Test de comparaison dans une plage de données VBA
Résolu
LoicL89
Messages postés
15
Statut
Membre
-
Gyrus Messages postés 3360 Statut Membre -
Gyrus Messages postés 3360 Statut Membre -
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.
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 ! :)
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:
- Test de comparaison dans une plage de données VBA
- Fuite données maif - Guide
- Test performance pc - Guide
- Test steam deck oled - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Test composant pc - Guide
3 réponses
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+
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+
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
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
Alors, essaie avec :
A+
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+