Macro : parcourir un tableau et vérifier certaines conditions

Bonjour à tous,

Je tente de trouver une solution à la problématique ci-dessous :

Je dois envoyer une matrice à différents interlocuteurs qui doivent la remplir.

Afin de m'assurer qu'ils remplissent bien tous les champs obligatoires, je cherche à faire afficher un message d'erreur si les colonnes en question sont vide et à les mettre en surbrillance lors de l'enregistrement. Pas de souci sur ce point.

Mon principal problème est de faire comprendre, dans ma macro, COMMENT reconnaitre ces cellules.

Donc voici mon raisonnement :

Pour éviter que le calcul ne se fasse sur le tableau entier (ça plante sinon) : si, pour chaque ligne, la colonne B contient une donnée, la macro vérifie la ligne entière. Sinon, ligne suivante. Ainsi, on ne passe pas inutilement sur certaine ligne.

Ci-dessous le test appliqué à une ligne. Les [champs_obligatoires] désignent les cellules obligatoires de la 1er ligne à remplir.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim c As Range, nb As Long

For Each c In [Champs_obligatoires]

If c.Value = "" Then nb = nb + 1

If c.Value = "" Then c.Borders.Weight = 3

If c.Value = "" Then c.Borders.Color = RGB(255, 0, 0)

If c.Value <> "" Then c.Borders.Weight = 2

If c.Value <> "" Then c.Borders.Color = RGB(0, 0, 0)

Next c

If nb > 0 Then MsgBox "Il manque " & nb & " champs obligatoires": Exit Sub 'c.Select.Borders.Color = RGB(255, 0, 0)

End Sub

Comment puis-je appliquer ce calculs sur mes lignes, dès que la colonne B contient une donnée svp?

J'espère avoir été assez claire car c'est un vrai casse tête !

Merci d'avance pour vos réponses

Je vous joins le fichier en question

14matrice-test.xlsm (47.72 Ko)

Bonjour epartida et bienvenue,

à tester,

copier les macro suivante sur la page ThisWorkbook,

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
Call Vérifier
End Sub

Sub Vérifier()
'si, pour chaque ligne, la colonne B contient une donnée, la macro vérifie la ligne entière.
col = Array(1, 3, 5, 6, 7, 8, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 25, 27, 29, 30, 31, 32, 33, 34, 35, 36)
rw = Sheets("Alimentation").Cells(Rows.Count, "A").End(xlUp).Row

For i = 4 To rw
   If Sheets("Alimentation").Cells(i, "B") <> "" Then
     For j = LBound(col) To UBound(col)
       If Sheets("Alimentation").Cells(i, col(j)) = "" Then
          MsgBox "vous devez renseigner la cellule " & Cells(i, col(j)).Address & Chr(10) & "Enregistrement non complété"
          Exit Sub
       End If
     Next j
   End If
Next i

Application.EnableEvents = False
ThisWorkbook.Save
MsgBox "Enregistrement réussi"
Application.EnableEvents = True
End Sub

Bonjour

Merci pour ce retour !

J'ai testé et seule la dernière partie fonctionne. Le msg "enregistrement réussi" s'affiche que le cellule b4 soit vide ou non. J'ai essayé de repérer le souci mais mes compétences ne sont pas aussi poussé que les vôtres

Re bonjour !

En cherchant un peu j'ai trouvé d'où venait le souci : Si la A et la B sont remplis, le message d'erreur s'affiche. Donc il ne prend pas que la colonne B. Pour remédier à ça, j'ai modifié cette partie : If Sheets("Alimentation").Cells(i, "B") <> "" Then en mettant A à la place de B et en changeant mes intitulés de colonne.

Merci encore pour votre aide, je marque ce problème en résolu !

Rechercher des sujets similaires à "macro parcourir tableau verifier certaines conditions"