Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[Résolu] Copier coller cellules en fonction d'une valeur commune - VBA

Delaye

XLDnaute Nouveau
Bonjour à tous / toutes,

Nouveau sur ce forum, j'ai pas mal cherché, mais je ne trouve pas ce que je cherche

Je dispose d'un fichier comportant 2 feuilles. Sur la feuille 1 j'ai des infos, sur la feuille 2 j'ai d'autres infos. Dans chacune de ces feuilles, j'ai une colonne avec des valeurs communes (code INSEE).
J'ai besoin de copier les valeurs des cellules E à Y depuis la feuille 2 vers la feuille 1 si le code INSEE correspond. Les infos doivent être copiées sur la feuille 1 à partir de la colonne S.
Le problème ? Je n'y arrive absolument pas ! J'ai testé un paquet de choses, je n'arrive jamais à avoir ce que je veux, soit mes boucles fonctionnent bien mais pas le reste, soit cela fait des erreurs (je fais beaucoup de php, mais je suis totalement débutant en VBA...).

Je vous joins un fichier exemple, le fichier d'origine possède environ 35000 lignes par feuille, d'où l'utilité de faire une maccro !

Merci par avance pour votre aide !
 

Pièces jointes

  • fichier_exemple.xlsm
    12.3 KB · Affichages: 71

Paf

XLDnaute Barbatruc
Re,

le dernier fichier joint comporte plus de colonnes que les précédent, il s'agit donc de rapatrier toutes les colonnes de la feuille2.

La macro modifiée:
VB:
Sub MAJ_V2()
'deb = Timer
Dim Tablo2, TabDonnées(1 To 25), i As Long, j As Long, Dico, Clé
Dim Tablo1, Tablo3, W1 As Worksheet, W2 As Worksheet
Set Dico = CreateObject("Scripting.Dictionary")
Set W1 = Worksheets("Feuille1") ' feuille à mettre à jour
Set W2 = Worksheets("Feuille2") ' feuille des données
Tablo2 = W2.Range("A2:Y" & W2.Range("A" & Rows.Count).End(xlUp).Row)
For i = LBound(Tablo2, 1) To UBound(Tablo2, 1)
    'Clé = IIf(Len(Tablo2(i, 3)) = 4, "0" & Tablo2(i, 3), Tablo2(i, 3))
    Clé = Tablo2(i, 3)
    For j = 1 To 25
        TabDonnées(j) = Tablo2(i, j)   'Attribution des données
   Next
    Dico(Clé) = TabDonnées
Next
Tablo1 = W1.Range("C2:C" & W2.Range("A" & Rows.Count).End(xlUp).Row)
ReDim Tablo3(1 To UBound(Tablo1, 1), 1 To 25)
For i = LBound(Tablo1, 1) To UBound(Tablo1, 1)
    If Dico.exists(Tablo1(i, 1)) Then
        For j = 1 To 25
            Tablo3(i, j) = Dico(Tablo1(i, 1))(j)
        Next
    End If
Next
W1.Range("S2").Resize(UBound(Tablo3), 21) = Tablo3 'mise à jour de Feuille1
'MsgBox "Traitement en : " & Timer - deb
End Sub

A+
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…