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

    Merci infiniment, ça fonctionne parfaitement.

    Bonne soirée
    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. 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. 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