Comparaison de listes

  • Initiateur de la discussion Initiateur de la discussion Vinvol
  • 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 !

Vinvol

XLDnaute Junior
Bonjour et meilleurs voeux pour cette nouvelle année qui commence !!

Je me jette sur le forum dès ce début d'année parce que j'ai mis au point une macro dont je suis très fier (je m'auto-félicite parce que y'a que moi qu'elle rend fier lol) mais qui est incomplète.

Le principe : j'ai un index de référence et un index mis à jour. La macro compare les deux et surligne, dans une nouvelle feuille, les lignes ayant évolué.
Le problème que je rencontre, c'est quand l'évolution prend la forme d'une nouvelle ligne ajoutée. Dans ce cas, ma macro incomplète n'en tient pas compte et laisse une ligne vide.

Le principe de fonctionnement étant :
Code:
If Sheets("A").Cells(i, x) = Sheets("B").Cells(j, x)
... j'ai essayé de compléter cette formule par un "Else", autrement dit, si tu ne trouves pas de valeur équivalente, alors tu fais "ça".
Mais ça ne marche pas...

J'ai trouvé une solution qui ne me satisfait pas, à savoir lancer une première comparaison (entre i et j), puis, dans un second temps, en lancer une deuxième (k) pour identifier mes lignes laissées vides et les compléter.
Ca fonctionne mais ne me satisfait pas car sur 20 lignes, c'est rapide, mais quand il y en a plsuieurs centaines, ça rallonge d'aurant...

Donc, si quelqu'un à une solution à me proposer...

Je joins un fichier exemple, avec mes 3 macros (l'incomplète, celle qui ne marche pas et celle qui ne me satisfait pas).

Merci d'avance pour votre aide,
Vincent
 

Pièces jointes

Re : Comparaison de listes

Bonjour Vinvol,

Y'a-t-il une colonne , titre1 peut être qui ne change jamais,

l'on pourrait alors lancer une recherche dans index pour vérifier l'existence de la ligne, si non trouvée alors on ajoute l'originale à update , sinon l'on exécute la procédure de controle des différences .

A oui , quelle est la mise en couleur dans ce cas ?
 
Re : Comparaison de listes

Bonjour camarchepas et merci pour ta réponse.

Effectivement, les données des colonnes Titre1 et Titre2 ne changent pas (mis à part l'ajout de nouvelles occurences, évidemment), mais les deux ne sont pas systématiquement renseignées. Parfois seul titre1 est identifié, parfois seul titre2. Mais en toute logique, pour les nouvelles lignes, les 2 colonnes seront renseignées.

La mise en couleur des nouveaux documents est rouge.

Rechercher dans index l'existence d'une ligne, ce n'est pas déjà ce qui est fait par la macro ? (cherche la valeur (i, x) en (j, x) ; s'il ne la trouve pas, c'est qu'elle n'existe pas). Je crois qu'il y a un raisonnement logique dans cette histoire qui m'échappe...

Vincent
 
Re : Comparaison de listes

Bonjour Vinvol, Bonjour camarchepas. Si j'ai bien compris... en utilisant des tableaux pour vérifier / écrire , en limitant les colorations aux seules plages nécessaires et en n'utilisant pas le blanc (qui ne semble là que pour écraser les couleurs précédentes), une proposition qui semble donner le bon résultat en plus rapide. Cordialement
 

Pièces jointes

Re : Comparaison de listes

Bonjour Efgé,

Effectivement tu as bien compris et le résultat est bluffant. C'est exactement ce que je recherchais et, cerise sur le gateau, ça va me permettre de décrouvir la fonction Ubound que je ne connaissais absolument pas.

Petite question cependant, pour m'aider à apprivoiser ce code et l'adapter à mon vrai fichier :
pour le code
Code:
TFL = .Range(.Cells(2, 1), .Cells(Rows.Count, 9).End(3)(1, 3))
à quoi correspond le (3) ?

Merci beaucoup pour ton aide,
Vincent
 
Re : Comparaison de listes

Ah ok, c'est un raccourci.

Je ne veux pas jouer mon boulet, mais en essayant de l'adapter, la macro plante (subscript out of range) sur :

Code:
For L = 1 To UBound(TFL, 2)
            TFU(i, L) = TFL(i, L)
        Next L

Je suppose que la modif doit intervenir au niveau du (TFL, 2), mais là... pourquoi 2 ?

Désolé d'être embetant avec ça, c'est juste que j'essaye de comprendre.

Merci,
Vincent
 
Re : Comparaison de listes

Le 2 est la dimension du tableau ,

en l'occurence , tu as du faire une erreur de variable car le tableau TFL n'a qu'une dimension contrairement à TFU.
Il suffit de regarder les variables locales dans l'éditeur VBA pour en être persuadé .
 
Re : Comparaison de listes

Re BONJOUR,
Dans
VB:
UBound(TFL, 2)
le 2 indique que l'on s'occupe des colonnes (deuxième dimention du tableau) donc il faut vérifier que dans
VB:
ReDim TFU(1 To (UBound(TFL, 1)), 1 To 12)
le 12 soit bien le maximum de colonnes de tes tableaux
(il semble que TFL ai plus de colonnes que TFU).

P.S Merci à toi à j'ai trouvé une méthode pour mes retours à la ligne (C'est un autre sujet, mais ça fait plaisir 😀 😀)
Cordialement
 
Re : Comparaison de listes

Re
@ camarchepas 🙂
Si TFL est correctement utilisé
VB:
TFL = .Range(.Cells(2, 1), .Cells(Rows.Count, 9).End(3)(1, 3))
Au même titre que TFI et TFU d'ailleurs

Il s'agit bien d'un tableau à deux dimentions.
Cordialement

P.S
Quel plaisir ces sauts de lignes

😀
 
Re : Comparaison de listes

Code:
ReDim TFU(1 To (UBound(TFL, 1)), 1 To 12)

C'est effectivement là qu'était l'os. J'avais bien modifié le 12, mais je l'avais arrêté aux nombres de colonnes utiles à la comparaison, et non pas à l'intégralité des colonnes utilisés par TFL.

Il reste des zones d'ombre qu'un peu de temps, de réflexion et de tests lèveront sans aucun doute, mais pour l'heure, l'adaptation fonctionne et c'est bien le plus important.

Merci encore à vous deux, pour votre aide et votre patience.

Vincent
 
- 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

  • Question Question
Microsoft 365 macro TCD
Réponses
4
Affichages
262
Réponses
4
Affichages
347
Retour