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

Code VBA - Correspondance de 2 listes et copie des bonnes lignes

  • Initiateur de la discussion Initiateur de la discussion MarcA
  • Date de début Date de début

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 !

MarcA

XLDnaute Nouveau
Bonjour, cela fait une semaine que je bloque sur une macro.
Je suis plutôt débutant sur VBA.
J'aurai besoin d'un coup de pouce pour débloquer.

Ce que je veux faire :
1. Sélectionner la colonne A de la feuille "Copier liste ici" (liste de codes clients)
2. Trouver les codes dans la colonne BV de la feuille "Sheet3" (liste des commandes avec ou sans code)
3. Copier les lignes de la feuille "Sheet3" dont la colonne BV contient un code de la colonne A de la feuille "Copier liste ici" dans la feuille "Sheet4".

J'arrive à trouver, mais je bloque sur le copier. Je n'arrive pas à faire en sorte que la ligne de la cellule trouvée soit copiée. La macro me copie à chaque fois la première ligne de la feuille "Sheet3".

Voici le code que j'utilise (et qui ne fonctionne totalement pas pour le moment):


J'arrive à faire le tri ensuite, donc pas de problème.
Ah oui, pour moi la fin de mon code (après Next i) ne sert à rien, mais je n'ai pas essayé de le supprimé. Si ça ne sert vraiment à rien, dîtes-le moi !

Merci d'avance de votre aide !
 
Re : Code VBA - Correspondance de 2 listes et copie des bonnes lignes

Bonjour,

En utilisant un Objet Dictionary, et sa méthode Exists, ça devrait être plus rapide.

Regarde ICI si tu trouve ton bonheur, sinon n'hésite pas à relancer ce fil pour de plus amples explications...
 
Re : Code VBA - Correspondance de 2 listes et copie des bonnes lignes

Exemple plus ou moins proche de ce que tu cherches à faire :
Exemple NON TESTE!!!
Code:
Sub MarcA()
Dim Dico As Object, TablA(), TablBV(), i As Long

'On remplit le dictionary des éléments contenus colonne A Sheets("Copier liste ici")
  Worksheets("Copier liste ici").Activate
  Set Dico = CreateObject("Scripting.Dictionary")
  TablA = Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row) 
  For i = LBound(TablA) To UBound(TablA)
    Dico(TablA(i, 1)) = ""
  Next i
  Worksheets("Sheet3").Activate
'On remplit le tableau avec les données contenues dans BV
  TablBV = Range("BV1:BV" & Range("BV" & Rows.Count).End(xlUp).Row)
'on boucle sur ce tableau
  For i = LBound(TablBV) To UBound(TablBV)
'si l'élément du tableau existe dans le dictionary alors on copie-colle
    If Dico.exists(TablBV(i, 1)) Then Worksheets("Sheet3").Rows(i).Copy Worksheets("Sheet4").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
  Next i
End Sub
 
Re : Code VBA - Correspondance de 2 listes et copie des bonnes lignes

Bonjour,

Merci de cette réponse rapide. En effet je n'ai pas pensé à créé un Dictionnaire - je ne pensais pas que cela pourrait m'aider.
Je ne sais pas créer de dictionnaire à partir d'une colonne. Par contre, pour la suite (mettre en valeur les doublons, trier et copier, ça je pourrai le faire).

De plus, la partie recherche ne semble pas poser de problème (même si elle est longue, c'est vrai), c'est pour recopier les lignes que ma macro bloque...
 
Re : Code VBA - Correspondance de 2 listes et copie des bonnes lignes

Bonjour,

Je viens de tester le code. Ça fonctionne. Après, la question est de savoir s'il a réussi à trouver tous les codes ou s'il en a zappé. Je n'arrive pas à voir si la variable i est limitée par le nombre de codes de la colonne A ou de la colonne BV. Il serait bon que cette variable soit limitée par le nombre de lignes de la colonne BV, comment je peux changer ça ?
 
Re : Code VBA - Correspondance de 2 listes et copie des bonnes lignes

Bonjour,

Je t'ai fait le code, à toi à vérifier son efficacité......

Tu dis :
Après, la question est de savoir s'il a réussi à trouver tous les codes ou s'il en a zappé

Pour vérifier :
1- Copie la colonne A feuille "Copier liste ici" et va la coller n'importe ou dans ta feuille "Sheet4" (supposons en colonne BZ)
2- Dans la colonne voisine (CA dans l'exemple), en CA1 écris la formule : =NB.SI(BV:BV;BZ1)
3- Etends cette formule vers le bas.
4- si autre chose qu'un 1 apparait c'est qu'il y a erreur...
 
Re : Code VBA - Correspondance de 2 listes et copie des bonnes lignes

Merci beaucoup. Je reviens vers vous un peu en retard mais pour vous dire que tout fonctionner correctement.
Encore merci !🙄
 
- 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
5
Affichages
241
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
650
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…