Test de comparaison dans une plage de données VBA

Résolu/Fermé
LoicL89 Messages postés 15 Date d'inscription jeudi 14 mai 2015 Statut Membre Dernière intervention 16 mai 2015 - Modifié par LoicL89 le 14/05/2015 à 19:11
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 - 14 mai 2015 à 22:00
Bonjour,

Bonjour,

Je suis débutant en VBA et je souhaiterais écrire un code permettant de comparer deux colonnes et d'afficher en couleur les cellules dont le test n'est pas bon.


Sub controle_donnees()

Dim maPlage As Range
Dim DernLigne As Long
Dim test As Range

DernLigne = Range("D" & Rows.Count).End(xlUp).Row
Set maPlage = Range("D2:E" & DernLigne)

'maPlage.Select

For Each test In maPlage

If test = 2 And test.Offset(test, 1) <> 0 Then
Union(test, test.Offset(test, 1)).Interior.Color = vbRed

ElseIf test = 1 And test.Offset(test, 1) = 0 Then
Union(test, test.Offset(test, 1)).Interior.Color = vbRed

End If

Next

End Sub


Les deux colonnes où doit s'effectuer le test sont la colonne D et E, sans prendre la 1ère ligne (contenant l'intitulé des colonnes). Ensuite,
lorsqu'il y a un "2" dans une cellule de la colonne D, il doit y avoir 0 dans la cellule de la colonne E lui correspondant. Et lorsqu'il y a un 1 dans une cellule de la colonne D, la cellule lui correspondant dans la colonne E doit être non nulle. Si ce test n'est pas bon pour certaines lignes, j'aimerais que cela se mette en rouge. J'ai copié et adapté ce code d'après plusieurs recherches sur internet. Le problème est que lorsque j'exécute la macro cette dernière bug (elle me colore certaines cases en rouge mais ce ne sont pas les bonnes, et elle ne s'arrête pas et tourne en continu...).

Merci pour votre aide ! :)
A voir également:

3 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
14 mai 2015 à 20:44
Bonjour,

Tu n'as pas besoin d'une macro pour obtenir ce résultat.
Tu peux utiliser une mise en forme conditionnelle avec la formule :
=OU(ET($D2=2;$E2<>0);ET($D2=1;$E2=0))
s'applique à =$2:$1048576

A+
0
LoicL89 Messages postés 15 Date d'inscription jeudi 14 mai 2015 Statut Membre Dernière intervention 16 mai 2015
14 mai 2015 à 20:51
Bonsoir,

Merci pour ta réponse. Je sais que je peux utiliser une mise en forme conditionnelle, mais je souhaiterais réaliser cette opération en VBA... Merci quand même
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
14 mai 2015 à 22:00
Alors, essaie avec :
Sub controle_donnees()
Dim MaPlage As Range
Dim DernLigne As Long
Dim test As Range
DernLigne = Range("D" & Rows.Count).End(xlUp).Row
Set MaPlage = Range("D2:D" & DernLigne)
For Each test In MaPlage
Union(test, test.Offset(0, 1)).Interior.Color = xlNone
If test = 2 And test.Offset(0, 1) <> 0 Then
Union(test, test.Offset(0, 1)).Interior.Color = vbRed
ElseIf test = 1 And test.Offset(0, 1) = 0 Then
Union(test, test.Offset(0, 1)).Interior.Color = vbRed
End If
Next
End Sub

A+
0