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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
705
Retour