Comparaison trois colonnes VBA - VB/VBA/VBS - Programmation
Marsh Posté le 13-04-2011 à 14:05:39
Une triple boucle avec l'utilisation de variables tableau pour chaque colonne, ça devrait être le plus rapide
Marsh Posté le 13-04-2011 à 14:07:54
Je ne suis pas du tout familiarisé avec cela ... du style ?
Marsh Posté le 13-04-2011 à 14:10:48
Si tu connais exactement le nombre de lignes, une simple boucle for fera l'affaire.
Tu parcours toutes les lignes, et avec des if, tu testes si les valeurs des cellules sont égales.
Si le nombre de ligne est variable, tu peux utiliser une boucle while (tant que tu ne tombes pas sur une cellule vide...)
Après, pour griser les cellules, tu peux voir le code en enregistrant une macro...
Sinon, pour comparer des chaines de caractère tu peux utiliser l'opérateur LIKE, cela peut te permettre
d'omettre le fait que certaines lettres soient en majuscules ou non... cf le lien: http://www.siteduzero.com/tutoriel [...] #ss_part_3, partie "D'autres opérateurs logiques"
Marsh Posté le 13-04-2011 à 15:57:34
Sais-tu ce qu'est une boucle for? N'as tu même pas ne serait-ce qu'une idée de comment procéder?
Marsh Posté le 13-04-2011 à 16:01:13
Vaguement mais sans plus ... si je savais comment faire je ne demanderai pas de l'aide ...
Marsh Posté le 13-04-2011 à 16:31:32
Si tu ne connais pas ça je te conseil de revoir les bases du langage VBA... et le site du zero possède un très bon tutoriel pour
ça:
http://www.siteduzero.com/tutoriel [...] art_200942
Marsh Posté le 17-04-2011 à 19:30:30
avec des dicos ?
en ajoutant la bibliotheque "microsoft scripting runtime"
un truc du genre:
Sub fgdh()
Dim dico_Col1 As New Scripting.Dictionary, dico_Col2 As New Scripting.Dictionary, dico_Col3 As New Scripting.Dictionary
col1 = 1
col2 = 2
col3 = 3
'remplissage des 3 dicos
For i = 1 To Cells(65536, col1).End(xlUp).Row
dico_Col1(CStr(Cells(i, col1).Value)) = 1
Next i
For i = 1 To Cells(65536, col2).End(xlUp).Row
dico_Col2(CStr(Cells(i, col2).Value)) = 1
Next i
For i = 1 To Cells(65536, col3).End(xlUp).Row
dico_Col3(CStr(Cells(i, col3).Value)) = 1
Next i
'test sur chaque cellule
For i = 1 To Cells(65536, col1).End(xlUp).Row
If dico_Col1.Exists(CStr(Cells(i, col1).Value)) And dico_Col2.Exists(CStr(Cells(i, col1).Value)) And dico_Col3.Exists(CStr(Cells(i, col1).Value)) Then
Cells(i, col1).Interior.Color = vbGrayText
End If
Next i
For i = 1 To Cells(65536, col2).End(xlUp).Row
If dico_Col1.Exists(CStr(Cells(i, col2).Value)) And dico_Col2.Exists(CStr(Cells(i, col2).Value)) And dico_Col3.Exists(CStr(Cells(i, col2).Value)) Then
Cells(i, col2).Interior.Color = vbGrayText
End If
Next i
For i = 1 To Cells(65536, col3).End(xlUp).Row
If dico_Col1.Exists(CStr(Cells(i, col3).Value)) And dico_Col2.Exists(CStr(Cells(i, col3).Value)) And dico_Col3.Exists(CStr(Cells(i, col3).Value)) Then
Cells(i, col3).Interior.Color = vbGrayText
End If
Next i
End Sub
Marsh Posté le 13-04-2011 à 12:58:01
Bonjour,
J'ai trois colonnes contenant des noms à comparer (plus de 3000). Je voudrais avoir un script qui grise les noms communs au trois colonnes et laisse les autres mais je n'y arrive pas.
Pouvez-vous m'aider ?
D'avance merci