Recopie automatique de cellules


#1

Bonjour à tous.
Je me tourne vers vous pour essayer de trouver une solution à mon problème.
Je souhaite créer une macro me permettant de recopier automatiquement des lignes d’un tableau dans d’autre. En feuille 1 j’ai une liste générale de personnes avec en colonne D leur groupe d’attribution (1, 2 ou 3).
Je souhaite faire en sorte qu’en fonction du n° de groupe cela recopie automatiquement la ligne de la personne dans un des tableaux sur les feuilles suivantes. Ceux du groupe 1 dans le tableau feuille 2, ceux du groupe 2 dans le tableau feuille 3…
Dans le fichier joint j’ai un début de code mais je bloque pour la suite. Je ne trouve pas le code pour le faire tourner sur l’ensemble des lignes du tableau feuille 1.
Merci par avancetest001.xlsm (21,7 Ko)


#2

Bonjour @toushussss,

C’est tout ce que j’ai dans ma besace actuellement :wink:

Donc voici une proposition par formule matricielle à valider avec ctrl + maj + entrée

Voir aussi le “Gestionnaire de noms”:

Fichier en retour ICI==> toushussss V1.xlsm (25,7 Ko)

Cordialement.


#3

Super mdo ç’est impeccable.
Par contre je vais encore t’embêter mais qu’est ce que je peux rajouter dans la formule pour également copier la trame de la cellule (couleur, bordure…)
Merci encore


#4

Re @toushussss,

Voici une nouvelle proposition par VBA.

Dans la feuille active:

Option Explicit

Dim f As Worksheet, fd As Worksheet

Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Set fd = ActiveSheet
    If Not Intersect(Target, Range("D2:D" & Range("A" & Rows.Count).End(xlUp).Row)) Is Nothing Then
        On Error GoTo NlleF
        Set f = Sheets(Target.Value)
        On Error GoTo 0
        fd.Range(fd.Cells(Target.Row, "A"), fd.Cells(Target.Row, "C")).Copy f.Range("A" & Rows.Count).End(xlUp)(2)
    End If
fin:
    Application.EnableEvents = True
Exit Sub

NlleF:
    If Target.Value = "" Then GoTo fin
    Sheets.Add.Move After:=Sheets(Sheets.Count)
    ActiveSheet.Name = Target.Value
    fd.Range("A1:C1").Copy ActiveSheet.Range("A1")
    Resume
End Sub

Comment ça fonctionne:

Pour chaque Groupe ( de 1 à x) validé dans la “Feui1” si la feuille “Groupe x” n’existe pas elle se créer.
Puis à chaque validation dans les cellules de la colonne “D” on copie les plages de cellules de “A à C” de la “Feuil1” dans les feuilles “Groupe x” concernées.

Les formats de cellules suivront, de plus les titres des colonnes “A1 à C1” de la “Feuil1” seront créés dans chaque nouvelle feuille avec sont format d’origine.

Ci-joint ton fichier en retour ICI==> toushussss V2.xlsm (18,4 Ko)

Pour lancer l’exécution de la macro, n’oublie pas de revalider chaque cellules de la colonne “D”.

Cordialement.


#5

Super merci beaucoup. :slight_smile: