Excel: Empêcher impression si cellule pas remplie

Stephane -  
 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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  2. Stephane
     
    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
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  4. Stephane
     
    Re,

    Merci infiniment, ça fonctionne parfaitement.

    Bonne soirée
    0