Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

nicotlse31

XLDnaute Nouveau
Bonjour,

Le sujet a été beaucoup évoqué, j'ai essayé des mix de macros que j'ai récupéré dans les différents posts.
J'ai une nouvelle étude de cas.
C'est un fichier qui sera rempli tous les mois par différents interlocuteurs. Le but est qu'ils impriment le graphique correspondant à leur îlot sans se soucier ni de la mise en forme ni des données qu'ils contiennent.
A cet effet, j'ai fait une macro pour imprimer le graphique correspondant à l'îlot en pré-définissant des zones d'impression pour facilter l'impression.

=> Le but est de bloquer l'impression lorsqu'un ou plusieurs îlots n'a pas rempli sa note du mois en-cours !
Si chacun imprime son graph au fur et à mesure qu'ils remplissent leur note, tous les graphs auront des "champs meilleur niveau atelier" différent.

Le champ "Meilleur niveau atelier" U7 est une valeur max des cellules T7:T23
T7:T23 sont des recherhes horizontales pour afficher sur le graph la note du mois en-cours.
Les graphs de chaque îlots commencent à la ligne 45

Merci d'avance pour votre aide précieuse :)
Nicolas
 

Pièces jointes

  • Bilan_2015 transmettre.xlsm
    89.7 KB · Affichages: 69
  • Bilan_2015 transmettre.xlsm
    89.7 KB · Affichages: 66
  • Bilan_2015 transmettre.xlsm
    89.7 KB · Affichages: 73

camarchepas

XLDnaute Barbatruc
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Re ,

Waouh , que de copier coller , ça fonctionne surement , mais à maintenir tu vas t'amuser.

bon j'essayerai d'y jeter un oeil .


Bon un essai pour voir si le test fonctionne :

Code:
Sub Bouton1_Cliquer()
   Dim Mois As Variant
Bis:
  Mois = Month(Date)
  Mois = InputBox("Entrée le n° du mois à imprimer", "Attente saisie", Mois)  ' Peut être mis en commentaire aprés les tests
 If Mois <> "" Then
     If Not IsNumeric(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12": GoTo Bis
     If CLng(Mois) <> Int(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12 sans décimal": GoTo Bis
     If Mois < 1 Or Mois > 12 Then MsgBox "Saisir un nombre de 1 à 12 pour le numéro de mois": GoTo Bis
    
       Mois = Mois - 1
      If [D7].Offset(0, Mois + 1) & [D11].Offset(0, Mois + 1) & [D15].Offset(0, Mois + 1) & [D19].Offset(0, Mois + 1) & [D23].Offset(0, Mois + 1) <> "" Then
         MsgBox "Le choix du mois est erronné"
        GoTo Bis
      End If
       
     If [D7].Offset(0, Mois) = "" Or [D11].Offset(0, Mois) = "" Or [D15].Offset(0, Mois) = "" Or [D19].Offset(0, Mois) = "" Or [D23].Offset(0, Mois) = "" Then
         MsgBox ("Une note n'a pas été remplie, relancer l'agent de maîtrise correspondant")
        Exit Sub
      End If
     ' Mois = Mois + 1 mise en commentaire pour prise en compte du mois précédents. 
      If [D7].Offset(0, Mois) <> "" And [D11].Offset(0, Mois) <> "" And [D15].Offset(0, Mois) <> "" And [D19].Offset(0, Mois) <> "" And [D23].Offset(0, Mois) <> "" Then
         MsgBox "Le choix du mois est erronné"
        GoTo Bis
      End If
  
      With Rows("38:93")
         .Hidden = False
         With ActiveSheet
           .PageSetup.PrintArea = "$B$38:$N$93"
           .PrintPreview
         End With
         .Hidden = True
       End With
   End If
  End Sub
 

nicotlse31

XLDnaute Nouveau
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Et oui, je sais bien pour les copier coller... Je vois pas trop comment rationnaliser...
J'aimerai garder un onglet par atelier pour ne pas surcharger le même onglet de graphique et de donnée.

La macro ne fonctionne pas, elle me renvoie le message "le choix du mois est erroné" alors que tout est remplie :(
 

Pièces jointes

  • Bilan_2015 à transmettre.xlsm
    141.6 KB · Affichages: 28
  • Bilan_2015 à transmettre.xlsm
    141.6 KB · Affichages: 30
  • Bilan_2015 à transmettre.xlsm
    141.6 KB · Affichages: 30

nicotlse31

XLDnaute Nouveau
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Bonjour camarche pas,
Le paramétrage n'a pas l'air bon, le message "choix du mois est erroné" apparaît alors que tout est remplie !
Je voudrais que la macro scanne le mois précédent pour vérifier si tous ces champs sont complétés sur chaque onglet pour pouvoir autoriser l'impression.:confused:
Merci de ton aide:)
 

camarchepas

XLDnaute Barbatruc
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Bonjour,

A tester .....

Code:
Sub MONTAGE_Boutontest_Cliquer()
    Dim Mois As Variant
Bis:
   Mois = Month(Date)
   Mois = InputBox("Entrée le n° du mois à imprimer", "Attente saisie", Mois)  ' Peut être mis en commentaire aprés les tests
 If Mois <> "" Then
      If Not IsNumeric(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12": GoTo Bis
      If CLng(Mois) <> Int(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12 sans décimal": GoTo Bis
      If Mois < 1 Or Mois > 12 Then MsgBox "Saisir un nombre de 1 à 12 pour le numéro de mois": GoTo Bis
     
       Mois = Mois - 1
       If [D7].Offset(0, Mois + 1) & [D11].Offset(0, Mois + 1) & [D15].Offset(0, Mois + 1) & [D19].Offset(0, Mois + 1) & [D23].Offset(0, Mois + 1) <> "" Then
          MsgBox "Le choix du mois est erronné"
         GoTo Bis
       End If
       Mois = Mois - 1
      If [D7].Offset(0, Mois) = "" Or [D11].Offset(0, Mois) = "" Or [D15].Offset(0, Mois) = "" Or [D19].Offset(0, Mois) = "" Or [D23].Offset(0, Mois) = "" Then
          MsgBox ("Une note n'a pas été remplie, relancer l'agent de maîtrise correspondant")
         Exit Sub
       End If

   
      With Rows("38:93")
          .Hidden = False
          With ActiveSheet
            .PageSetup.PrintArea = "$B$38:$N$93"
            .PrintPreview
          End With
          .Hidden = True
        End With
    End If
   End Sub
 

nicotlse31

XLDnaute Nouveau
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Super ça fonctionne pour la 1re fonction "bloquer l'impression si mois précédent non remplie" :D
Peut-on inclure dans la macro une routine pour vérifier la même chose dans les autres "onglets" exemple "MONTAGE 2"
Le but étant de ne pas pouvoir fausser "la meilleur note du mois précédent tout altelier" lorsqu'on imprime l'indicateur
:cool:
 

Pièces jointes

  • Bilan_2015 à transmettre.xlsm
    144 KB · Affichages: 29
  • Bilan_2015 à transmettre.xlsm
    144 KB · Affichages: 26
  • Bilan_2015 à transmettre.xlsm
    144 KB · Affichages: 28

nicotlse31

XLDnaute Nouveau
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

ça a l'air de marcher avec cette macro


Sub MONTAGE_Boutontest_Cliquer()
Dim Mois As Variant
Bis:
Mois = Month(Date)
Mois = InputBox("Entrée le n° du mois à imprimer", "Attente saisie", Mois) ' Peut être mis en commentaire aprés les tests
If Mois <> "" Then
If Not IsNumeric(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12": GoTo Bis
If CLng(Mois) <> Int(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12 sans décimal": GoTo Bis
If Mois < 1 Or Mois > 12 Then MsgBox "Saisir un nombre de 1 à 12 pour le numéro de mois": GoTo Bis

Mois = Mois - 1
With Worksheets("MONTAGE 2").Activate
If [D7].Offset(0, Mois + 1) & [D11].Offset(0, Mois + 1) & [D15].Offset(0, Mois + 1) & [D19].Offset(0, Mois + 1) & [D23].Offset(0, Mois + 1) <> "" Then
MsgBox "Le choix du mois est erronné"
GoTo Bis
End If
End With
With Worksheets("MONTAGE").Activate
If [D7].Offset(0, Mois + 1) & [D11].Offset(0, Mois + 1) & [D15].Offset(0, Mois + 1) & [D19].Offset(0, Mois + 1) & [D23].Offset(0, Mois + 1) <> "" Then
MsgBox "Le choix du mois est erronné"
GoTo Bis
End If
End With
Mois = Mois - 1
With Worksheets("MONTAGE 2").Activate
If [D7].Offset(0, Mois) = "" Or [D11].Offset(0, Mois) = "" Or [D15].Offset(0, Mois) = "" Or [D19].Offset(0, Mois) = "" Or [D23].Offset(0, Mois) = "" Then
MsgBox ("Une note n'a pas été remplie, relancer l'agent de maîtrise correspondant")
Exit Sub
End If
End With
With Worksheets("MONTAGE").Activate
If [D7].Offset(0, Mois) = "" Or [D11].Offset(0, Mois) = "" Or [D15].Offset(0, Mois) = "" Or [D19].Offset(0, Mois) = "" Or [D23].Offset(0, Mois) = "" Then
MsgBox ("Une note n'a pas été remplie, relancer l'agent de maîtrise correspondant")
Exit Sub
End If
End With

With Rows("38:93")
.Hidden = False
With ActiveSheet
.PageSetup.PrintArea = "$B$38:$N$93"
.PrintPreview
End With
.Hidden = True
End With
End If
End Sub


Peut-on peut être la simplifier :confused:
Un bug parcontre si on fait le test en remplissant le mois de Janvier si on lance la macro, elle bug car elle scanne la colonne du mois précédent Janvier. Et comme cette colonne sera toujours vide, ça buguera:(
J'ai trouvé une astuce en remplissant la colonne par un caractère quelconque que j'écris en blanc et ça permet de corriger le bug.
Y a t'il une solution plus propre à inclure dans la macro :confused:
 

Pièces jointes

  • Bilan_2015 à transmettre.xlsm
    145.8 KB · Affichages: 27
  • Bilan_2015 à transmettre.xlsm
    145.8 KB · Affichages: 27
  • Bilan_2015 à transmettre.xlsm
    145.8 KB · Affichages: 29

nicotlse31

XLDnaute Nouveau
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Bonjour,
La macro ci-dessus fonctionne. Ouf ! :)
Parcontre, le bug du 1re mois persiste. Comme la macro autorise l'impression que si la colonne du mois précédent est correctement remplie pour le mois de Janvier ça bug.
Comment peut on éviter ça ? Y a t'il une astuce que l'on pourrait inclure à la macro?:confused: C'est dommage car sans ça elle est inutilisable:(
 

camarchepas

XLDnaute Barbatruc
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Re ,

Voir avec ce code

Code:
Sub MONTAGE_Boutontest_Cliquer()
    Dim Mois As Variant
Bis:
   Mois = Month(Date)
   Mois = InputBox("Entrée le n° du mois à imprimer", "Attente saisie", Mois)  ' Peut être mis en commentaire aprés les tests
If Mois <> "" Then
      If Not IsNumeric(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12": GoTo Bis
      If CLng(Mois) <> Int(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12 sans décimal": GoTo Bis
      If Mois < 1 Or Mois > 12 Then MsgBox "Saisir un nombre de 1 à 12 pour le numéro de mois": GoTo Bis
     
       Mois = Mois - 1
       If [D7].Offset(0, Mois + 1) & [D11].Offset(0, Mois + 1) & [D15].Offset(0, Mois + 1) & [D19].Offset(0, Mois + 1) & [D23].Offset(0, Mois + 1) <> "" Then
          MsgBox "Le choix du mois est erronné"
         GoTo Bis
       End If
       If Mois > 1 Then Mois = Mois - 1
      If [D7].Offset(0, Mois) = "" Or [D11].Offset(0, Mois) = "" Or [D15].Offset(0, Mois) = "" Or [D19].Offset(0, Mois) = "" Or [D23].Offset(0, Mois) = "" Then
          MsgBox ("Une note n'a pas été remplie, relancer l'agent de maîtrise correspondant")
         Exit Sub
       End If

   
      With Rows("38:93")
          .Hidden = False
          With ActiveSheet
            .PageSetup.PrintArea = "$B$38:$N$93"
            .PrintPreview
          End With
          .Hidden = True
        End With
    End If
   End Sub
 

nicotlse31

XLDnaute Nouveau
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Bonjour camarchepas,
J'ai testé ce code en fait, il permet de corriger le bug du mois de Janvier mais parcontre pour les autres mois on perd la sécurité pour bloquer l'impression en cas de non remplissage du mois précédent (M-1) :(:(
A te lire
 

Pièces jointes

  • Bilan_2015 à transmettre.xlsm
    144 KB · Affichages: 31
  • Bilan_2015 à transmettre.xlsm
    144 KB · Affichages: 37
  • Bilan_2015 à transmettre.xlsm
    144 KB · Affichages: 39

camarchepas

XLDnaute Barbatruc
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Re ,

Pour moi cela fonctionne , je viens de faire le test , mais dans l'inputbox , il faut bien entrer le bon mois pour le vérifier, si tu mets 3 et qu'il manque une info en février ,tu as bien le message ??????
 

nicotlse31

XLDnaute Nouveau
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Effectivement, le bug se produit uniquement pour la mois de Février... :mad:
Refais le test : Si le mois de Février est entiérement remplie et qu'il manque une valeur au mois de Janvier
=> Tu entres 2 dans l'inputbox. Pas de message et ça autorise l'impression avec pour conséquence de fausser la meilleur note du mois précédent
 

camarchepas

XLDnaute Barbatruc
Re : Macro pour bloquer l'impression si cellule vide dans colonne mois en cours

Re ,

Oups et oui tu as raison et j'ai trouvé le pourquoi , en fait Janvier = mois 0 donc le test doit être mois >0 .

Bon voici donc en prime un module gestion paramètré .

un seul module donc et le reste juste des appels au niveau du bouton

Ceci permet des mise au points ou des modif beaucoup plus facile .

Ensuite pour chaque bouton , il suffit d'appeler Gestion avec le numéro de la premiere ligne , puis le numéro de la derniere ligne .

Code:
Sub MONTAGE_Boutontest_Cliquer()
 Gestion 38, 93
End Sub


Sub Gestion(LigneSup As Long, LigneInf As Long)
Dim Mois As Variant

Bis:
 Mois = Month(Date)
 Mois = InputBox("Entrée le n° du mois à imprimer", "Attente saisie", Mois) ' Peut être mis en commentaire aprés les tests
 If Mois <> "" Then
   If Not IsNumeric(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12": GoTo Bis
   If CLng(Mois) <> Int(Mois) Then MsgBox "Saisir le mois sous forme d'un nombre de 1 à 12 sans décimal": GoTo Bis
   If Mois < 1 Or Mois > 12 Then MsgBox "Saisir un nombre de 1 à 12 pour le numéro de mois": GoTo Bis
   Mois = Mois - 1
   
   If [D7].Offset(0, Mois + 1) & [D11].Offset(0, Mois + 1) & [D15].Offset(0, Mois + 1) & [D19].Offset(0, Mois + 1) & [D23].Offset(0, Mois + 1) <> "" Then
     MsgBox "Le choix du mois est erronné"
     GoTo Bis
   End If

   If Mois > 0 Then Mois = Mois - 1
   
   If [D7].Offset(0, Mois) = "" Or [D11].Offset(0, Mois) = "" Or [D15].Offset(0, Mois) = "" Or [D19].Offset(0, Mois) = "" Or [D23].Offset(0, Mois) = "" Then
     MsgBox ("Une note n'a pas été remplie, relancer l'agent de maîtrise correspondant")
     Exit Sub
   End If

  With Rows(LigneSup & ":" & LigneInf)
   .Hidden = False
   With ActiveSheet
    .PageSetup.PrintArea = "$B$" & LigneSup & ":$N$" & LigneInf
    .PrintPreview
   End With
   .Hidden = True
  End With
 End If
End Sub
 

Statistiques des forums

Discussions
312 248
Messages
2 086 593
Membres
103 248
dernier inscrit
Happycat