Test de comparaison dans une plage de données

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 !

Bonsoir, LoicL

un fichier exemple serait plus efficace

Amicalement

Pierrot

Bonjour Pierrot,

Voici le fichier exemple en question !

Le fichier a été diminué, normalement environ 1 million de données sont inscrites...

Merci

Bonsoir, LoicL

même avec le fichier, je ne trouve pas sauf en ajoutant une colonne avec un format conditionnel

voir le fichier

Amicalement

Pierrot

Merci Pierrot, mais je voudrais le réaliser en VBA... Et non passer par un format conditionnel dans une colonne supplémentaire.

Demain, je vais me renseigner auprès d'un ami français

Bonsoir

Pierrot

Je vous remercie pour votre aide !

Bonsoir,

Je ne suis pas, loin s'en faut, un spécialiste en VBA, mais je vous propose néanmoins de tester le code suivant :

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)

'maPlage.Select

For Each test In maPlage

    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

J'ai corrigé l'étendue de la plage de travail (maplage) ainsi que le décalage.

Bonsoir JFL,

J'ai essayé avec le code que vous venez de me fournir, la sélection est désormais portée sur la colonne D (et ne prend plus en compte la colonne E) mais rien ne s'affiche en rouge comme définit dans le code.

Je vous remercie également pour votre aide. Je continu à chercher...

C'est étonnant car votre fichier avec mon code affiche les cellules en rouge quand cela est.... nécessaire !

En effet les valeurs fournies dans votre fichier test étaient toutes correctes !

Je vous joins votre fichier avec mon code et des valeurs modifiées afin que vous puissiez tester ma proposition.

Ah oui ! Je crois que je fatigue... Je me suis trompé de version pour mon fichier test et je croyais avoir inclus des erreurs volontaires ! Merci pour votre aide cela fonctionne parfaitement !!

Bonjour, LoicL, JFL, le forum,

après avoir testé le fichier de JFL, ou de l'autre,le tout fonctionne très bien

il suffit de modifier le données pour s'en rendre compte?Il ne reste plus qu'à tirer les formules jusqu'en bas du tableau

Bonne journée

Amicalement

Pierrot

Rechercher des sujets similaires à "test comparaison plage donnees"