Excel: Empêcher impression si cellule pas remplie

Signaler
-
 Stephane -
Bonjour,

J'ai fait quelques recherches, mais n'ai malheureusement pas trouvé de solution à mon problème. Raison pour laquelle je demande ici.

J'ai un document Excel avec un bouton qui imprime et enregistre automatiquement mon document.

Sub imprimer_enregistrer()
Sheets("Form").PrintOut copies:=1

ActiveWorkbook.SaveAs Filename:= _
"C:\XXXX" & Format(Date, "yyyy.mm.dd") & " " & Format(Time, "hh-mm") & " " & Range("=Données!C2") & ".xlsm"

Application.Quit
End Sub




J'aimerai, que
si cellule A2 est remplie
il est obligatoire de remplir B2 -> Si B2 pas rempli -> Opération annulée avec message "Veuillez remplir B2"
Il est obligatoire de remplir C2 -> Si C2 pas rempli -> Opération annulée avec message "Veuillez remplir C2"
Il est obligatoire de remplir D2 -> Si D2 pas rempli -> Opération annulée avec message "Veuillez remplir D2"
Il est obligatoire de remplir F2 -> Si F2 pas rempli -> Opération annulée avec message "Veuillez remplir F2"
Il est obligatoire de remplir G2 -> Si G2 pas rempli -> Opération annulée avec message "Veuillez remplir G2"

J'ai mis une ligne par colonne, car j'aimerai pouvoir personnalisez mon texte d'erreur en fonction de l'information manquante.

En vous remerciant d'avance de votre aide

Bonne soirée

4 réponses

Messages postés
15808
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 juin 2021
1 502
Bonjour,

Une facon de faire:

Sub imprimer_enregistrer()
    Cel_Vide1 = Application.CountIf(Range("B2:D2"), "") 'nombre de cellules vides
    Cel_Vide2 = Application.CountIf(Range("F2:G2"), "") 'nombre de cellules vides
    Cel_Vide = Cel_Vide1 + Cel_Vide2
    If Cel_Vide = 0 Then
        Sheets("Form").PrintOut copies:=1
        ActiveWorkbook.SaveAs Filename:= _
        "C:\XXXX" & Format(Date, "yyyy.mm.dd") & " " & Format(Time, "hh-mm") & " " & Range("=Données!C2") & ".xlsm"
        Application.Quit
    Else
        If Range("B2") = "" Then
            Cel = "B2"
        ElseIf Range("C2") = "" Then
            Cel = "C2"
        ElseIf Range("D2") = "" Then
            Cel = "D2"
        ElseIf Range("F2") = "" Then
            Cel = "F2"
        ElseIf Range("G2") = "" Then
            Cel = "G2"
        Else
        End If
            Range(Cel).Select
            Response = MsgBox("Veuillez remplir la cellule " & Cel & " svp!", vbCritical, "Cellule NON remplie")
    End If
End Sub
Bonjour,

Merci pour votre aide, cela fonctionne.

Je n'ai malheureusement pas été très explicite dans ma demande.

J'aimerai que cela fonctionne exactement de la même manière, mais sur toute la colonne de A2 à A33

Ex: Si A7 rempli -> Obligation de remplir B7;C7;D7;F7;G7

Désolé pour cet oubli.

Stéphane
Messages postés
15808
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 juin 2021
1 502
Re,

Sub imprimer_enregistrer()
    If Not Cell_Vide Then
        Sheets("Form").PrintOut copies:=1
        ActiveWorkbook.SaveAs Filename:= _
        "C:\XXXX" & Format(Date, "yyyy.mm.dd") & " " & Format(Time, "hh-mm") & " " & Range("=Données!C2") & ".xlsm"
        Application.Quit
    End If
End Sub

Function Cell_Vide() As Boolean
    With Worksheets("Form")
        For Lig = 2 To 33
            Cel_Vide = 0
            Cel_Vide1 = 0
            Cel_Vide2 = 0
            If .Cells(Lig, 1) <> "" Then
                Cel_Vide1 = Application.CountIf(.Range("B" & Lig & ":D" & Lig), "") 'nombre de cellules vides
                Cel_Vide2 = Application.CountIf(.Range("F" & Lig & ":G" & Lig), "") 'nombre de cellules vides
                Cel_Vide = Cel_Vide1 + Cel_Vide2
                If Cel_Vide <> 0 Then
                    If .Range("B" & Lig) = "" Then
                        Cel = "B" & Lig
                    ElseIf .Range("C" & Lig) = "" Then
                        Cel = "C" & Lig
                    ElseIf .Range("D" & Lig) = "" Then
                        Cel = "D" & Lig
                    ElseIf .Range("F" & Lig) = "" Then
                        Cel = "F" & Lig
                    ElseIf .Range("G" & Lig) = "" Then
                        Cel = "G" & Lig
                    Else
                    End If
                    .Range(Cel).Select
                    Response = MsgBox("Veuillez remplir la cellule " & Cel & " svp!", vbCritical, "Cellule NON remplie")
                    Cell_Vide = True
                    Exit Function
                End If
            End If
        Next Lig
    End With
     Cell_Vide = False
End Function
Re,

Merci infiniment, ça fonctionne parfaitement.

Bonne soirée