[Catégorie modifiée VB6 --> VBA] Problème code pour comparer deux colonnes de ch [Résolu]

Signaler
Messages postés
6
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
-
Lestagiare
Messages postés
6
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010
-
Bonjour à tous,

Alors voilà, j'ai un petit problème avec mon code.
Je vous explique rapidement ce qu'il en est :

J'ai un classeur excel avec deux feuilles, et j'aimerai comparer une colonne présente dans la feuille1 avec une autre colonne de la feuille2 (toutes les deux contiennent des chaines de caractères) afin de coloriser les cellules de la colonne de la feuille1 si elles sont présente dans la colonne de la feuille2.

Pour cela, j'ai déjà écris quelque chose, mais mes connaissances en la matière étant limitées, j'aimerai un peu d'aide.

Voilà le code :

Sub Macro1()
Dim i As Integer
Dim j As Integer
i = 6
j = 2
While i < 20000 And j < 41
If Worksheets("Feuille1").Range("B" + CStr(i)).Value = Worksheets("Feuille2").Range("C" + CStr(j)).Value Then
Worksheets("Feuille1").Activate
Worksheets("Feuille1").Range("B" + CStr(i)).Select
With Selection.Interior
ColorIndex = 3
Pattern = xlSolid
End With
Else
j = j + 1
End If
i = i + 1
Wend
End Sub

Merci d'avance pour votre aide.

8 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Bonjour et bienvenu

Et quel est ton problème ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Arg, j'avais pas vu la petite erreur :
    With Selection.Interior
        ColorIndex = 3       ' Manque le . en tête
        Pattern = xlSolid    ' de ces 2 lignes
    End With 
Messages postés
6
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010

Bin le problème est que, quand je lance la macro, il ne se passe rien... Pas de plantage, mais pas de colorisations des cellules.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
Ca ressemble pourtant à du code correct.
En pareil cas, il faut deboguer pour voir ce que fait le programme :
Place ton curseur sur la première ligne de code (pas les Dim)
Appuis sur F9 : le code s'arrêtera là au prochain passage
Survole avec la souris les variables et il t'affichera son contenu.
A toi de voir si la cellule pointée est la bonne, etc ...
Avance d'une ligne de code avec F8
Continue le code normalement : F5

Solution alternative :
Sub MacroVinBlanc()
    Dim Cell_1 As Range
    Dim Cell_2 As Range
    ' Cellules de la feuille 1
    For Each Cell_1 In Sheets("Feuille1").Range("B6:B20000")
        ' Cellules de la feuille 2
        For Each Cell_2 In Sheets("Feuille2").Range("C2:C41")
            ' Si identiques
            If Cell_1.Value = Cell_2.Value Then
                ' Zoli coloriage
                With Cell_1.Interior
                    ColorIndex = 3
                    Pattern = xlSolid
                End With
                ' Pas la peine de continuer
                Exit For
            End If
        Next
    Next
End Sub
Messages postés
6
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010

Ok ! Merci de ta réponse ! Je vois ça demain au boulot car c'est pour mon travail. Je te tiens au courant des avancées ou éventuels problèmes.
Merci d'avance.
Messages postés
6
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010

Salut Jack !

Voilà j'ai résolu mon problème avec ce code :

Sub Flagship()
Dim i As Integer
Dim j As Integer

For i = 6 To 2000
For j = 2 To 40
If Worksheets("Product Board").Range("B" + CStr(i)).Value = Worksheets("FlagShip Products").Range("C" + CStr(j)).Value Then
Worksheets("Product Board").Activate
Worksheets("Product Board").Range("B" + CStr(i)).Select
With Selection.Interior
.ColorIndex = 40
.Pattern = xlSolid
End With
End If
Next j
Next i
End Sub

Je te remercie pour ton aide.

A bientôt.
Messages postés
6
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010

Re bonjour,

Je me permet de soliciter à nouveau votre aide pour une petite optimisation.

En effet, la macro marche actuellement avec un nombre de lignes fixe.
Cependant, ce nombre de lignes est souvent actualisé.
J'aimerai donc que le nombre de lignes, anciennement égale à 2000 et 40 soit variable.

Le code actuel est celui-ci :

Sub Flagship()
Dim i As Integer
Dim j As Integer

For i = 6 To 2000
For j = 2 To 40
If Worksheets("Product Board").Range("B" + CStr(i)).Value = Worksheets("FlagShip Products").Range("C" + CStr(j)).Value Then
        Worksheets("Product Board").Activate
        Worksheets("Product Board").Range("B" + CStr(i)).Select
        With Selection.Interior
            .ColorIndex = 40
            .Pattern = xlSolid
        End With
End If
Next j
Next i
End Sub


Pensez-vous que cela soit possible ?

Merci d'avance.
Messages postés
6
Date d'inscription
jeudi 1 juillet 2010
Statut
Membre
Dernière intervention
7 juillet 2010

Je me permet un petit up. Si quelqu'un à la solution :)

Merci d'avance.