Boucle If à 3 conditions : =#N/A, =caseVide, =0

Bonjour à tous,

Après une nuit blanche à me casser les dents sur ce sujet je vous donne la problématique.

Pour un tableau de cellules à 2 colonnes A et B et pour x lignes, dont la colonne B peut avoir des cellules à zéro, vides et à #N/A, quel code VBA faut-il pour lister dans un Msg Box le contenu des cellules de la colonne A adjacentes aux cellules à zéro, vides et à #N/A de la colonne B ?

Voici mon code qui ne marche pas à cause de la dernière partie de ma condition If :

"

Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim message As String

' Utiliser la feuille active
Set ws = ActiveSheet

' Trouver la dernière ligne avec des données dans la colonne B
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

' Boucle à travers les lignes
For i = 1 To lastRow
' Vérifier si la cellule dans la colonne B est égale à 0, vide ou #N/A
If IsError(ws.Cells(i, 2).Value) Or IsEmpty(ws.Cells(i,2).Value) Or

ws.Cells(i, 2).Value = 0 Then

' Ajouter la valeur de la cellule correspondante dans la colonne A au message
message = message & ws.Cells(i, 1).Value & vbCrLf
End If
Next i

"

Si vous avez une idée pour faire fonctionner cette condition If j'en serais ravi ! S'il vous plaît !

(Contourner le problème et remplacer dans la macro les 0 par des vides ne fonctionne pas car j'ai un module qui réactualise mes données)

Sub xxxxx()
     Dim ws    As Worksheet
     Dim lastRow As Long
     Dim i     As Long
     Dim message As String
     Dim b As Boolean

     ' Utiliser la feuille active
     Set ws = ActiveSheet

     ' Trouver la dernière ligne avec des données dans la colonne B
     lastRow = Application.Max(ws.Cells(ws.Rows.Count, "A").End(xlUp).Row, ws.Cells(ws.Rows.Count, "B").End(xlUp).Row) 'dernier ligne de A et B

     ' Boucle à travers les lignes
     For i = 1 To lastRow
          ' Vérifier si la cellule dans la colonne B est égale à 0, vide ou #N/A
          b = IsError(ws.Cells(i, 2).Value) ' c'est une erreur ?
          If Not b Then b = IsEmpty(ws.Cells(i, 2).Value) Or ws.Cells(i, 2).Value = 0 'si ce n'était pas une erreur, est-ce vide ou zéro ?
          If b Then 'un des 3
               ' Ajouter la valeur de la cellule correspondante dans la colonne A au message
               message = message & ws.Cells(i, 1).Value & vbCrLf
          End If
     Next i
     MsgBox IIf(Len(message) = 0, "VIDE !!!!!", message), vbInformation, "Contenu de A, si B est erreur, vide ou zéro"
End Sub

if faut séparer le test "erreur" des 2 autres tests, parce que ws.Cells(i, 2).Value avec une erreur dedans, cause l'arrêt de la macro

Ok merci beaucoup j'ai utilisé une partie de votre réponse qui m'a aidé et maintenant ça marche !

Merci !

Rechercher des sujets similaires à "boucle conditions casevide"