Comparaison de listes

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

  • Test.xlsm
    23.6 KB · Affichages: 64
  • Test.xlsm
    23.6 KB · Affichages: 88
  • Test.xlsm
    23.6 KB · Affichages: 64

camarchepas

XLDnaute Barbatruc
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 ?
 

Vinvol

XLDnaute Junior
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
 

Efgé

XLDnaute Barbatruc
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

  • Test(1).xls
    78 KB · Affichages: 79
  • Test(1).xls
    78 KB · Affichages: 64
  • Test(1).xls
    78 KB · Affichages: 60

Vinvol

XLDnaute Junior
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
 

Vinvol

XLDnaute Junior
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
 

camarchepas

XLDnaute Barbatruc
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é .
 

Efgé

XLDnaute Barbatruc
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 :D :D)
Cordialement
 

Efgé

XLDnaute Barbatruc
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

:D
 

Vinvol

XLDnaute Junior
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
 

Discussions similaires

Statistiques des forums

Discussions
312 782
Messages
2 092 061
Membres
105 175
dernier inscrit
cocovid