Vérifier le nombre d'une cellule suit le nombre d'une autre cellule

Bonjour tout le monde,

Je suis actuellement en train de coder une macro en VBA, et on m'a demandé de vérifier une donnée sur les documents que je traite, mais je ne sais pas comment faire.

Les documents que je traite suivent un système de révision : ils sont d'abord émis en révision 01, puis en révision 02, etc.

La vérification qui m'est demandée est la suivante : quand un document est en revision 02, vérifier que la précédente était bien 01, idem revision 03 pour 02 précedemment, etc. J'ai pour cela deux colonnes, une avec la revision actuelle, appelée Revision Number, et une avec la précédente, appelée Previous Revision Number.

Etant donné qu'il peut y avoir un nombre infini de revisions pour un document, j'aimerai trouver une autre solution que faire :

Dim za As Long, aa As Integer, ba As Integer

aa = Sheets("Nom de la feuille").ListObjects("Table1").ListColumns("Revision Number").Index

ba = Sheets("Nom de la feuille").ListObjects("Table1").ListColumns("Previous Revision Number").Index

dl = Cells(Rows.Count, an).End(xlUp).Row

For za = 1 To dl

If ActiveSheet.ListObjects("Table1").DataBodyRange(za, aa).Value = "02" AND ActiveSheet.ListObjects("Table1").DataBodyRange(za, ba).Value ="01"

Else

ActiveSheet.ListObjects("Table1").DataBodyRange(za, aa).Interior.Color = vbRed

End If

Next za

Pour que les cellules incorrectes soient colorées en rouge dans chacun des cas.

Il y a également une exception : dans le cas où c'est la première revision d'une document, donc 01 dans "Revision Number", l'information dans la colonne "Previous Revision Number" peut être "F" ou la cellule peut être vide.

Est-ce que vous auriez une idée pour vérifier qu'à chaque fois, la cellule de la colonne "Previous Revision Number" soit "-1" de la colonne "Revision Number", tout en incluant l'exception ?

Merci d'avance à vous et bonne journée,

Aelyth

Bonjour,

Un essai à tester :

Option Explicit
Sub Test()

Dim Lig As Long, RN As Integer, PRN As Integer

With Sheets("Nom de la feuille").ListObjects("Table1")
    RN = .ListColumns("Revision Number").Index
    PRN = .ListColumns("Previous Revision Number").Index
    For Lig = 1 To .DataBodyRange.Count
        If .DataBodyRange(Lig, RN).Value * 1 > 1 Then
            If .DataBodyRange(Lig, PRN).Value * 1 = .DataBodyRange(Lig, RN).Value - 1 Then
                .DataBodyRange(Lig, RN).Interior.ColorIndex = xlNone 'Supprime couleur éventuelle
            Else
                .DataBodyRange(Lig, RN).Interior.Color = vbRed
            End If
        Else
            .DataBodyRange(Lig, RN).Interior.ColorIndex = xlNone 'Supprime couleur éventuelle
        End If
    Next Lig
End With

End Sub

PS : essayez d'utiliser des noms de variable un peu plus explicites que aa, ab, etc

Bonjour,

Merci beaucoup de votre réponse ! Je vais essayer ça, toutefois, de ce que je comprends, cela ne prend pas en compte l'exception de la revision 01, si ?

Bonne journée !

Bonjour,

Merci beaucoup de votre réponse ! Je vais essayer ça, toutefois, de ce que je comprends, cela ne prend pas en compte l'exception de la revision 01, si ?

Bonne journée !

Normalement si : If .DataBodyRange(Lig, RN).Value * 1 > 1 Then

Le principe de tout ça est de convertir la référence texte ("01") en nombre valide avec un *1. On peut alors réaliser des comparaisons mathématiques.

PS : c'est aussi réalisable en MFC, sans aide de VBA.

Je pense que je me suis mal exprimée sur l'exception : si le document est en revision 01, alors le résultat dans la colonne Previous Revision Number peut être F ou vide.

Je pense que je me suis mal exprimée sur l'exception : si le document est en revision 01, alors le résultat dans la colonne Previous Revision Number peut être F ou vide.

Actuellement, si le document est en révision 01, je ne vérifie pas le contenu de la cellule previsous revision correspondante. Si ce n'est pas ton souhait, il te reste juste à compléter la partie Else de la 1ère structure If.

Bonjour,

J'ai enfin eu le temps de tester la macro (désolée pour le temps de réponse...) et je constate un problème à l'éxécution : la macro saute les lignes suivantes :

Option Explicit

Sub Test()

Dim Lig As Long, RN As Integer, PRN As Integer

With Sheets("Nom de la feuille").ListObjects("Table1")

RN = .ListColumns("Revision Number").Index

PRN = .ListColumns("Previous Revision Number").Index

For Lig = 1 To .DataBodyRange.Count

If .DataBodyRange(Lig, RN).Value * 1 > 1 Then

If .DataBodyRange(Lig, PRN).Value * 1 = .DataBodyRange(Lig, RN).Value - 1 Then

.DataBodyRange(Lig, RN).Interior.ColorIndex = xlNone 'Supprime couleur éventuelle

Else

.DataBodyRange(Lig, RN).Interior.Color = vbRed

End If

Else

.DataBodyRange(Lig, RN).Interior.ColorIndex = xlNone 'Supprime couleur éventuelle

End If

Next Lig

End With

End Sub

Et je ne comprends pas du tout pourquoi. Une idée ?

Merci encore de ton aide et bonne journée !

Même chose en adaptant la macro ainsi :

Dim zak As Long, aak As Integer, bak As Integer

aak = Sheets("VendorDocument").ListObjects("Table1").ListColumns("Revision Number").Index
bak = Sheets("VendorDocument").ListObjects("Table1").ListColumns("Previous Revision Number").Index
For zak = 1 To dl
If Sheets("VendorDocument").ListObjects("Table1").DataBodyRange(zak, aak).Value * 1 > 1 Then
If Sheets("VendorDocument").ListObjects("Table1").DataBodyRange(zak, bak).Value * 1 = ActiveSheet.ListObjects("Table1").DataBodyRange(zak, aak).Value - 1 Then
Sheets("VendorDocument").ListObjects("Table1").DataBodyRange(zak, bak).Interior.ColorIndex = xlNone
Else
Sheets("VendorDocument").ListObjects("Table1").DataBodyRange(zak, aak).Interior.Color = vbRed
End If
Else
ActiveSheet.ListObjects("Table1").DataBodyRange(zak, aak).Interior.ColorIndex = vbBlue
End If
Next zak

Rechercher des sujets similaires à "verifier nombre suit"