Comparer 2 colonnes de 2 classeurs diff VBA [Résolu/Fermé]

Signaler
-
 laurent -
Bonjour,

voilà je suis débutant en prog VBA et aujourd'hui je souhaite comparer une colonne d'un classeur B à la colonne du classeur A pour indiquer le nombre de références du classeur B qui n'apparaissent pas dans le classeur A dans une cellule du classeur C.
En espérant avoir été clair :)

j'ai déjà essayé beaucoup de choses sans résultats... ce qui complique la tâche est la comparaison sur des feuilles de classeurs différents je pense
si vous avez une idée
Merci!

4 réponses

Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 498
Bonjour,

Tu peux t'inspirer de ce code de Boisgontier : http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm#ComparaisonC
Une âme charitable pourrait elle me commenter rapidement ce que j'ai souligné s'il vous plaît. et je ne comprend pas pourquoi les variables ne sont pas déclarés :o

Sub ComparaisonColonne()
  t = Timer()
  f = 1 'no feuille
  Application.ScreenUpdating = False
 Set MonDico1 = CreateObject("Scripting.Dictionary")
  Set MonDico2 = CreateObject("Scripting.Dictionary")
  Workbooks("classeur1.xls").Activate
  For Each c In Sheets(f).Range("A:D").SpecialCells(xlCellTypeConstants, 23) If Not MonDico1.Exists(c.Value) Then MonDico1.Add c.Value, c.Address
  Next
  Workbooks("classeur2.xls").Activate
  Sheets(f).Activate
  For Each c In Sheets(f).Range("A:D").SpecialCells(xlCellTypeConstants, 23)
    If Not MonDico2.Exists(c.Value) Then MonDico2.Add c.Value, c.Address
  Next
  Workbooks("classeur1.xls").Activate
  Sheets(f).Activate
  For Each e In MonDico1
     Range(MonDico1.Item(e)).Font.Color = IIf(MonDico2.Exists(e), vbBlack, vbRed)
  Next
  Application.ScreenUpdating = True
  MsgBox Timer() - t
End Sub
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 498
Bonjour,

Timer() : https://support.office.com/fr-fr/article/timer-fonction-46da243c-2570-4950-a818-6d6934bf584a?ocmsassetID=HA001228923&CorrelationId=ae2d1731-dae3-4c25-aa99-758353463263&ui=fr-FR&rs=fr-FR&ad=FR

Application.ScreenUpdating = False : empêche le rafraichissement de l'écran

Set MonDico1 = CreateObject("Scripting.Dictionary") Créé un objet Dictionary : https://support.microsoft.com/fr-fr/help/187234

SpecialCells(xlCellTypeConstants : Les cellules contenant des constantes.

If Not MonDico1.Exists(c.Value) Then MonDico1.Add c.Value, c.Address : Lien déjà donné, t'aurais pu lire.....

Range(MonDico1.Item(e)).Font.Color = IIf(MonDico2.Exists(e), vbBlack, vbRed) Mets en noir (vbBlack) si e exist dans le dictionary (http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm#SupDoubBD) et en rouge (vbRed) dans le cas contraire, ou l'inverse je ne sais plus...
merci à toi!