Excel: Empêcher impression si cellule pas remplie

Fermé
Stephane - 26 mai 2021 à 21:52
 Stephane - 27 mai 2021 à 18:16
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
A voir également:

4 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 27 mai 2021 à 07:22
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
0
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
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 27 mai 2021 à 17:00
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
0
Re,

Merci infiniment, ça fonctionne parfaitement.

Bonne soirée
0