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

nicotlse31

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

Bonjour,
Merci pour cette macro.
Je pense qu'on est sur la bonne voie.
Je l'ai testé et le pb est que même si les cases du mois sont remplie, la macro balance le message (Une note n'a pas été remplie...)
ça marche sur la colonne du mois de Janvier. Je pense qu'il y a un soucis avec l'offset
 

nicotlse31

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

Bonjour,
Merci pour cette macro.
Je pense qu'on est sur la bonne voie.
Je l'ai testé et le pb est que même si les cases du mois sont remplie, la macro balance le message (Une note n'a pas été remplie...)
ça marche sur la colonne du mois de Janvier. Je pense qu'il y a un soucis avec l'offset

Autre bug : Quand tous tes mois sont remplies, par exemple jusqu'à Avril, si il te manque 1 valeur ou + sur Avril, et que tu sélectionnes un mois précédent (ex : Janvier), La macro te permet d'imprimer le graph avec tous les mois jusqu' a Avril inclus...:(
 

camarchepas

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

Bonjour ,

Pour l'offset , oui , il faut bien sur enlever 1 du mois , voici le nouveau code .

Pour ce qui est des données , c'est la conception de la zone du données du graphe qui est à revoir . aucun rapport avec le code donc

Code:
Sub Bouton3_Cliquer()
   Dim Mois As Integer
     Mois = Month(Date)
     Mois = InputBox("Mois à traiter", "Veuillez saisir", Mois) - 1 ' Peut être mis en commentaire aprés les tests
  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("45:100")
      .Hidden = False
      With ActiveSheet
        .PageSetup.PrintArea = "$B$45:$N$100"
        .PrintPreview
      End With
      .Hidden = True
    End With
  End Sub
 

nicotlse31

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

Bonjour ,

Pour l'offset , oui , il faut bien sur enlever 1 du mois , voici le nouveau code .

Pour ce qui est des données , c'est la conception de la zone du données du graphe qui est à revoir . aucun rapport avec le code donc

Code:
Sub Bouton3_Cliquer()
   Dim Mois As Integer
     Mois = Month(Date)
     Mois = InputBox("Mois à traiter", "Veuillez saisir", Mois) - 1 ' Peut être mis en commentaire aprés les tests
  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("45:100")
      .Hidden = False
      With ActiveSheet
        .PageSetup.PrintArea = "$B$45:$N$100"
        .PrintPreview
      End With
      .Hidden = True
    End With
  End Sub

C'est parfait ça marche nickel ! Merci bien
Parcontre, on peut toujours pièger la macro, si on veut par exemple imprimer le mois d'avril et qu'une valeur manque sur la colonne d'Avril, tu sélectionnes 1 mois précédent qui est correctement remplie et tu réussis à imprimer le mois d'Avril. :(
Y a t'il possibilité de bloquer ce cas ? :confused:
 

camarchepas

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

Ok ,

A tester pour ce point , l'on boucle sur la saisie du mois si l'on essai de tricher

Code:
sub Bouton3_Cliquer()
 Dim Mois As Integer
Bis:
Mois = Month(Date)
Mois = InputBox("Mois à traiter", "Veuillez saisir", Mois) - 1 ' Peut être mis en commentaire aprés les tests
    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
      If Month(Date) = 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

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

nicotlse31

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

Ok ,

A tester pour ce point , l'on boucle sur la saisie du mois si l'on essai de tricher

Code:
sub Bouton3_Cliquer()
 Dim Mois As Integer
Bis:
Mois = Month(Date)
Mois = InputBox("Mois à traiter", "Veuillez saisir", Mois) - 1 ' Peut être mis en commentaire aprés les tests
    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
      If Month(Date) = 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

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

Bravo, impeccable :cool:
Il y a juste un détail, le message "Le choix du mois est erroné" n'apparaît que si le type essaye de rentrer le mois de Janvier, si il essaye un autre mois, rien ne se passe. Pourrait-on faire apparaître ce message pour chaque mois tentés inférieur au dernier mois.
Si ce n'est pas possible, je me contenterais de cette macro qui est déjà super :)
 

camarchepas

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

Et oui ,

Cela fonctionne , mais tu ne peux le tester comme cela :

c'est l'équation : If Month(Date) = Mois + 1 qui gére le message et comme le mois actuel est 1 voilà .

Reviens au mois de février pour me dire si ok ou

if month(date)+1 = mois +1

voili , voilà
 

nicotlse31

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

Et oui ,

Cela fonctionne , mais tu ne peux le tester comme cela :

c'est l'équation : If Month(Date) = Mois + 1 qui gére le message et comme le mois actuel est 1 voilà .

Reviens au mois de février pour me dire si ok ou

if month(date)+1 = mois +1

voili , voilà

J'ai essayé avec le mois de Février, ça marche, logique puisqu'on a rajouté +1 dans la macro.
Ce que je voudrais c'est que ça balance comme message " Mois erroné" à chaque fois que le gars essaye un mois différent que le dernier. A voir si faisable.
Autre truc à quoi, je pense, je voudrais envoyer un message d'erreur si le gars tente de marquer un autre caractère qu'un chiffre dans l'input box "Entrée le n° du mois à imprimer". Sinon ça fait buguer la macro, un truc du style is isnumeric, mais j'arrive pas à l'intégrer
Autres détails, si le gars clic sur annuler à l'inputbox"Entrée le n° du mois..." ça fait buguer la macro. Faudrait mettre un code qui permet l'arrêt de la macro sans bug
 

camarchepas

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

Bon ,

Puisque l'on ne travail pas en temps réel, dans ton exemple ,

voici une autre solution :

j'ai également ajouté les sécurités pour les maladroits du clavier .....

Code:
Sub Bouton3_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
    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
    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("45:100")
       .Hidden = False
       With ActiveSheet
         .PageSetup.PrintArea = "$B$45:$N$100"
         .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

Impeccable,
ça marche bien !
Au moment de remplir le mois, Peut-on y inclure une fonction qui empêche le remplissage d'un nombre supérieur à 12 ?
Super boulot en tous cas, je pensais pas qu'on puisse réaliser des choses comme ça avec de la macro, je suis impressionné :)
Merci encore
 

camarchepas

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

Re ,
Et oui , hyper puissant les macros
voici donc avec un limiteur si le mois est inférieur à 1 ou supérieur à 12 ,
maintenant tu tombes dans le piège .

Code:
Sub Bouton3_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
     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("45:100")
        .Hidden = False
        With ActiveSheet
          .PageSetup.PrintArea = "$B$45:$N$100"
          .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,
Vous m'aviez bien aidé à mettre au point une macro qui devait bloquer l'impression en cas de non remplissage de la valeur du mois en-cours.
Je voudrais modifier en bloquant l'impression uniquement pour le mois précédent (M-1)
Quels paramètres dois je changer à la macro du fichier joint?
Actuellement la macro est la suivante :
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
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



Merci d'avance pour votre aide
 

Pièces jointes

  • Bilan_2015 à transmettre.xlsm
    100 KB · Affichages: 28
  • Bilan_2015 à transmettre.xlsm
    100 KB · Affichages: 28
  • Bilan_2015 à transmettre.xlsm
    100 KB · Affichages: 25

nicotlse31

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

Bonjour ,

Je ne comprends pas bien la demande , pour le coup c'est déjà le cas ,

il faudrait détailler un peu plus,

Mais ce n'est pas que tu paramètrage je pense ...

Re,

Aujourd'hui, la macro bloque l'impression si tous le mois en cours n'est pas complétement remplie.
Demain, je voudrais que la macro bloque l'impression uniquement si le mois précédent n'est pas complétement remplie.
Autre chose, j'ai fait un onglet par atelier, vu qu'on souhaite bloquer l'impression pour tous les ateliers, il faudrait que la macro scanne également, le champ du mois précédent des autres onglets.
Voir PJ en exemple, onglet "montage" et "montage 2"

En espérant avoir était assez clair
 

Pièces jointes

  • Bilan_2015 à transmettre.xlsm
    140.6 KB · Affichages: 22
  • Bilan_2015 à transmettre.xlsm
    140.6 KB · Affichages: 25
  • Bilan_2015 à transmettre.xlsm
    140.6 KB · Affichages: 26

Statistiques des forums

Discussions
314 588
Messages
2 110 988
Membres
111 002
dernier inscrit
Lolo73i