Ma macro saute des étapes
Bonjour à tous,
Je vous expose mon problème : ma macro, lorsqu'elle est exécutée automatiquement, saute des étapes, des lignes de code, sans que je sache pourquoi. Cela m'arrive par exemple dans le cas de ce bout de code :
'Checking if the column "Doc Items" is not empty, except if the value in the column "Document Status" is "F" (Forecast)
Dim zan As Long, aan As Integer, ban As Integer
aan = Sheets("VendorDocument").ListObjects("Table1").ListColumns("Doc Items").Index
ban = Sheets("VendorDocument").ListObjects("Table1").ListColumns("Document Status").Index
dl = Cells(Rows.Count, aan).End(xlUp).Row
For zan = 1 To dl
If IsEmpty(ActiveSheet.ListObjects("Table1").DataBodyRange(zan, ban).Value) And _
ActiveSheet.ListObjects("Table1").DataBodyRange(zan, ban).Value <> "F" Then
'Applying a red color to the cells of the column H (Doc Items) when there is an error
ActiveSheet.ListObjects("Table1").DataBodyRange(zan, aan).Interior.Color = vbRed
Else
ActiveSheet.ListObjects("Table1").DataBodyRange(zan, aan).Interior.Color = xlNone
End If
Next zan
La ligne "ActiveSheet.ListObjects("Table1").DataBodyRange(zan, aan).Interior.Color = vbRed" est sautée, et je n'ai aucune idée de pourquoi, surtout que j'utilise cette formulation pour d'autres lignes de code qui semblent très bien marcher. Ca m'arrive sur plusieurs lignes de code différentes.
Par contre, lorsque je sélectionne ligne par ligne et que j'exécute manuellement, tout semble bien se passer.
Des idées ?
Merci d'avance et bonne journée,
Aelyth
Bonjour,
Difficile d'affirmer avec certitude mais, en général, la ligne est sautée quand la condition n'est pas remplie. Je pense donc que le problème vient de votre condition et particulièrement de la fonction isempty. Il vaut mieux tester avec = "".
Par ailleurs, si cellule = "", forcément, cellule <> "F". Donc il faudra choisir entre ces 2 conditions.
Voici un essai :
Sub Aelyth() ':)
Dim zan As Long, aan As Integer, ban As Integer
with Sheets("VendorDocument").range("Table1")
aan = .Listobject.ListColumns("Doc Items").Index
ban = .Listobject.ListColumns("Document Status").Index
dl = .Rows.Count
For zan = 1 To dl
If .cells(zan, ban).Value = "" Then
.cells(zan, aan).Interior.Color = vbRed
Else
.cells(zan, aan).Interior.Color = xlNone
End If
Next zan
end with
end subCdlt,
Bonjour,
D'après ce que je comprends, "" prendra en compte tous les textes, et non pas seulement "F". Or, il y a différentes propositions, et la seule acceptable est "F". Pour résumer, je souhaiterai que la cellule soit mise en rouge dès lors que la cellule de la colonne "Doc Items" est vide ET que la valeur dans la cellule de la colonne "Document Status" est différente de F.
Cordialement.
C'était peut-être ça le problème, les 2 conditions portaient sur la colonne Document Status. A voir :
Sub Aelyth()
Dim zan As Long, aan As Integer, ban As Integer
with Sheets("VendorDocument").range("Table1")
aan = .Listobject.ListColumns("Doc Items").Index
ban = .Listobject.ListColumns("Document Status").Index
dl = .Rows.Count
For zan = 1 To dl
If .cells(zan, aan).Value = "" and .cells(zan, ban).Value <> "F"Then
.cells(zan, aan).Interior.Color = vbRed
Else
.cells(zan, aan).Interior.Color = xlNone
End If
Next zan
end with
end subOui, en effet, après correction c'est réglé ! Merci beaucoup de l'aide !