Excel: Empêcher impression si cellule pas remplie

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

  1. 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
    1. 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
      1. 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
        1. Re,

          Merci infiniment, ça fonctionne parfaitement.

          Bonne soirée
          0