Afficher le nom des cellules vides

Bonjour,

J'aimerais que le programme affiche un msgbox lorsque les cellules sont vides et que l'on change de feuille.

Mon soucis c'est que j'essaie de faire en sorte qu'il affiche le nom des cellules qui sont vides, comme un formulaire

Par exemple, si la cellule B5 s'appelle Nom et qu'il faut remplir son nom en C5, le msgbox doit afficher Nom : n'est pas rempli

Le problème c'est que le message affiche plusieurs fois B5 : n'est pas rempli

Voici le code :

Private Sub Worksheet_Deactivate()

Dim MaPlage As Range, Cel As Range, NomPlage As Range, NomCel As Range

Set MaPlage = Sheets("Feuil1").Range("C5:C7")
Set NomPlage = Sheets("Feuil2").Range("B5:B7")
For Each NomCel In NomPlage
For Each Cel In MaPlage 'pour toutes les cellules de la plage
    If Cel.Value = "" Then 'si elle est vide alors
        'message à l'utilisateur
        MsgBox " la cellule " & NomCel.Address & " : n'est pas remplie."
        'sortie de la procédure
    End If
Next
Next

End Sub

Je mets aussi le fichier en pièce jointe si besoin,

merci d'avance

3cellule-vide.xltm (14.92 Ko)

Bonjour,

C'est normal, tu fais une boucle dans une boucle, et pas deux boucles séparées, je pense que ce que tu veux c'est une procédure à laquelle tu passes la plage à vérifier.

Je fais une proposition dans le fichier.

La procédure utilisée est:

Sub checkRemplissage(Plage As Range, nonRemplis As Collection)
Dim Cel As Range

For Each Cel In Plage
    If Cel.Value = "" Then
        nonRemplis.Add Cel
    End If
Next Cel
End Sub

L'autre Sub l'utilise pour remplir sa collection avec les cellules non remplies et les affiche à tour de rôle dans un Msgbox.

4cellule-vide1.xlsm (16.23 Ko)

Bonjour Ausecour,

Merci pour ton aide, je comprends mieux mon problème, faire une procédure est beaucoup plus simple !

Le seul soucis c'est que si je ne rempli pas une cellule, le msgbox affiche l'adresse de la cellule alors que l'idéal serait qu'il affiche la valeur de la cellule d'à côté.

Par exemple je rempli pas la case pour le Nom, le msgbox affiche : La cellule Nom n'est pas remplie

Ah d'accord je n'avais pas totalement compris le sujet, ce que je propose dans ce cas c'est une procédure un peu modifiée:

Sub checkRemplissage(Plage As Range, nonRemplis As Collection, rowOffset As Integer, columnOfset As Integer)
Dim Cel As Range

For Each Cel In Plage
    If Cel.Value = "" Then
        nonRemplis.Add Cel.Offset(rowOffset, columnOfset)
    End If
Next Cel
End Sub

qui s'utilise comme ceci:

Private Sub Worksheet_Deactivate()

Dim Cel As Range
Dim nonRemplis As New Collection

checkRemplissage Sheets("Feuil1").Range("C5:C7"), nonRemplis, 0, -1

If nonRemplis.Count > 0 Then
    For Each Cel In nonRemplis
        MsgBox "La cellule " & Cel.Value & " : n'est pas remplie.", vbInformation, "Cellule non remplie"
    Next Cel
End If
End Sub

L'idée c'est de lui transmettre la plage de cellules que tu dois vérifier, et lui dire où se trouvent les noms par rapport à cette plage, en lui donnant le décalage sur les lignes et sur les colonnes, dans le cas c'est la colonne pile à gauche, donc -1 en colonne, si c'est une ligne au dessus alors -1 en ligne, une ligne en dessous 1, une colonne à droite 1, et ainsi de suite.

Il est sûrement possible de lui donner la plage de cellules et la plage de noms mais j'ai trouvé que cette solution était la plus simple.

6cellule-vide1.xlsm (16.42 Ko)

Sinon si le but est de faire un formulaire je fais plutôt ça via des Userform en général, tu peux afficher un message en disant que des champs obligatoires n'ont pas été remplis, tu peux également les mettre en couleur pour les faire ressortir, et facilement définir ceux qui sont obligatoires et ceux qui ne le sont pas. Tu peux aussi faire ça sur la feuille bien entendu, je vérifie ça au moment ou l'utilisateur veut valider sa saisie, pile avant de l'exporter dans un tableau qui la stocke.

Merci de ta réponse !

Sur ton conseil je vais aussi explorer la piste de L'userform

Rechercher des sujets similaires à "afficher nom vides"