Copier cellules d'une feuille à une autre en fonction d' un ID

MagBota Messages postés 5 Statut Membre -  
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
je me trouve avec un classeur avec deux feuilles, la colonne A correspond à des identifiants.
Les identifiants sont les mêmes pour les deux feuilles.

La feuille 1 contient souvent plusieurs échantillons (plusieurs lignes) avec le même identifiant, tandis que la feuille 2 contient un échantillon (1 ligne) pour un identifiant.
La feuille 1 contient des colonnes où il manque des informations (cellules vides dans les colonnes G, K et N), qui se trouvent dans la feuille 2 (resp. colonne D, E et F).
Je souhaite copier les infos de la feuille 2, et les coller dans la feuille 1 :
lorsque l'identifiant de la feuille 1 correspond à 1 identifiant de la feuille 2.

Par exemple, si la valeur de la cellule A2 de la feuille1 = valeur de la cellule A6 de la feuille2, alors,
cellule G2.feuille1 = cellule D6. feuille2
cellule K2.feuille1 = cellule E6. feuille2
cellule N2.feuille1 = cellule F6. feuille2
puis, on passe à la cellule A3, et on réitère sur toutes les cellules de la colonne A.feuille1.

Si un identifiant de la feuille 1 n'est pas dans la feuille 2, je voudrais que la macro ne fasse rien et passe au suivant.

Voici le schéma que j'ai en tête, je pense que ça doit être relativement simple à coder (ou pas ?), mais il faudrait que je m'en sorte vite, et je n'en suis qu'au stade d'apprentissage du langage... Donc je n'ai pas fini !

Merci d'avance pour votre aide !

(je ne sais pas si je peux vous fournir une PJ ?)

1 réponse

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279
 
Bonjour,

(je ne sais pas si je peux vous fournir une PJ ?)
Oui, c'est mieux.
Pour la prochaine fois déposer le fichier de travail sur cjoint.com et coller ici le lien fourni.

Un exemple :
Sub maj()
    Dim sh2 As Worksheet, c As Range, lig As Long
    Set sh2 = Worksheets("Feuil2")
    Application.ScreenUpdating = False
    For lig = 2 To sh2.Cells(Rows.Count, 1).End(xlUp).Row
        Set c = Columns(1).Find(sh2.Cells(lig, 1), LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
            If Cells(c.Row, 7) = "" Then Cells(c.Row, 7) = sh2.Cells(lig, 4)
            If Cells(c.Row, 11) = "" Then Cells(c.Row, 11) = sh2.Cells(lig, 5)
            If Cells(c.Row, 14) = "" Then Cells(c.Row, 14) = sh2.Cells(lig, 6)
        End If
    Next lig
End Sub 

Je n'écrase pas, les données ne sont copiées que si la cellule destination est vide.
https://www.cjoint.com/?DCygCUwyifz

eric

0