Macro événementielle «BeforePrint

Bonjour,

Est-ce possible de lancer une macro événementielle lors de l’impression d’une page ? Pour l’instant je lance cette macro par l’intermédiaire d’un bouton « Imprimer », mais j’aimerais que cette macro soit déclenchée même si les utilisateurs ne passent pas par ce bouton.

J’ai cherché du coté de Worksheet s’il y avait quelque chose du genre «BeforePrint», mais je n’ai rien trouvé.

Si ceci est possible, savez-vous comment j’aurais pu trouver ce renseignement tout seul, grâce aux programmes d’aide d’Excel ?

A vous relire.

Bonjour,

Il existe bien un évènement BeforePrint (de niveau Workbook) mais celui-ci ne te servira à rien puisque ton problème est précisément de déclancher l'impression.

Tu peux utiliser n'importe quel autre évènement pour déclancher une impression... Sauf BeforePrint qui ne se déclanchera qu'après ! (pour rappeler de mettre suffisament de papier dans l'imprimante par exemple)

A+

que souhaite tu faire

dans visual basic thisworkbook la fonction beforeprint est présente donc tu a juste a écrire ton code et il sera exécuter avant l'impression

j'espere répondre a ta question

...On utilise généralement la macro BeforePrint de la manière suivante :

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Select Case ActiveSheet.Index
Case 1: Call Macro1
Case 2 : Call Macro2
End Select
End Sub

Au lieu de .Index on peut également utiliser .Name...

A+

Merci à tous deux pour vos réponses

Spyderpaint, Je pense qu'avec ta solution, je devrais simplement indiquer dans mon code que ça ne concerne que telle ou telle feuille. Je ne vais cependant pas trop chercher à développer ton idée, puisque Galopin me propose également quelque chose d'intéressant.

Galopin,

J'ai essayé - selon tes indications - de modifier ton code ainsi ....

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Select Case ActiveSheet.Name
Case Calculs: Call Xxxxx
End Select
End Sub

..... "Calculs" étant le nom de ma feuille.

Mais la macro n'est pas déclenchée. En travaillant au pas-à-pas, toutes les lignes du code ci-dessus sont sélectionnées, mais ça n'appelle pas la macro Xxxxx.

Peux-tu encore m'indiquer comment corriger cela ?

Bonnes salutations à tous deux.

Bonjour,

Avec .Index c'est numérique tu peux écrire

Case 1

Avec .Name c'est du String, il faut mettre des guillemets :

Case "calculs"

A+

Re,

Effectivement qu'avec cette correction ça fonctionne parfaitement. Merci beaucoup pour ton aide.

Un autre problème est survenu entre temps : Dans la macro appelée, j'ai l'instruction suivante

Sub Xxxx ()
..........
Application.Dialogs(xlDialogPrint).Show
End Sub

Si je lance uniquement cette macro et que je clique sur "Abandon" (ou un autre mot de ce genre, je ne sais plus comment c'est en français et là je suis sur un PC allemand ) lorsqu'apparaît la fenêtre de dialogue, ça n'imprime effectivement pas.

Par contre si j'appelle cette macro au travers de l'autre macro Private Sub Workbook_BeforePrint, ça imprime quand même.

Comment pourrais-je faire afin qu'en cliquant sur "Abandon", les deux codes soient arrêtés là ?

Bonjour,

Sans voir ton fichier, essaie en modifiant tes codes comme suit :

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ok = True Then Exit Sub
Select Case ActiveSheet.Name
Case "Calculs": Call Xxxx
End Select
Cancel = True
End Sub

et

Public ok As Boolean
Sub Xxxx()
ok = True
'.......
Application.Dialogs(xlDialogPrint).Show
ok = False
End Sub

A analyser sur ton fichier.

Amicalement

Salut Dan,

Merci pour ton intervention.

Je ne voulais pas placer mon fichier sur le Forum car ce n’est vraiment qu’une ébauche pour l’instant et en plus pratiquement tout est en allemand. Mais bon, j’ai vraiment un problème avec cette impression et je finis donc par vous le fournir.

Après avoir écrit mon dernier message à Galopin ci-dessus, je me suis encore rendu compte d’un nouveau problème (avant d’essayer ta solution et avec le fichier tel que je vous le présente maintenant) : Si je suis sur une autre feuille, l’impression est tout à fait possible.

Si je suis sur la feuille « Calculs », l’impression par le bouton « Masquer les lignes inutiles et imprimer » fonctionne parfaitement, par contre l’impression par le bouton normal d’Excel crée des problèmes. Tel qu’indiqué à Galopin, si je clique « Abandon », ça imprime quand même – ce que ne voudrait évidement pas – et si je clique « OK », soit parfois ça bloque carrément tout le programme*** et je dois en forcer la fermeture ou le programme se referme tout seul, soit ça imprime deux fois la même feuille.

(***Ce problème m’en rappelle un autre identique que nous avions eu au sujet du fil d’une certaine Liliane. T’en souviens-tu ? Tu m’avais parlé d’un probable bug d’Excel.)

J’ai également essayé avec ta proposition (dont toutes les parties ont été neutralisées dans le fichier joint) mais alors j’ai le problème que je ne peux plus imprimer que la feuille « Calculs » et plus aucune autre (ni imprimer, ni voir un aperçu avant impression).

A te / à vous relire.

Bonjour

Tu peux essayer

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'lié à la macro Impression_Tabelle_5

  If ok = True Then Exit Sub
  ok = True
  Select Case ActiveSheet.Name
  Case "Calculs"
    'Sheets("Calculs").Activate
    Call MONTRER_toutes_lignes_Tabelle_5
    Call MASQUER_des_Lignes_Tabelle_5
    If (Application.Dialogs(xlDialogPrint).Show) = False Then
      Cancel = True
    End If
  End Select
  ok = False
'Cancel = True
End Sub

Avec mon 2003 la macro Workbook_BeforePrint(Cancel As Boolean) est extrêmement lente

Salut Banzai,

Merci pour ta proposition.

Selon mes premiers essais - sur Excel 2007 puisque je suis à la maison - en remplaçant le code Workbook_BeforePrint en place par le tien, j'ai les résultats guerre plus satisfaisants suivants :

- impression des autres feuilles à l'exception de la feuille "Calculs" = ok.

Feuille "Calculs" :

- par le bouton « Masquer les lignes inutiles et imprimer », rien ne se passe (la macro tourne quelque seconde puis s'arrête sans rien imprimer)

- par le bouton "Impression rapide" d'Excel, ça imprime deux fois la même feuille.

Pouvez-vous encore m'aider ?

Bonsoir Yvouille, Banzai64 ,et tous les forumeurs bien sur

en bidouillant les bytes

j'espère que cela convient

Salut Bob,

Après quelques essais, il semble que ta proposition fonctionne génialement ; tout est entré dans l'ordre

Merci beaucoup pour ta précieuse aide et merci à toutes les autres personnes qui sont intervenues dans cette discussion.

Bonne journée à tous.

Bonjour,

Après avoir indiqué à Bob dans mon dernier message que tous fonctionnait, j'ai continué à avancer avec mon projet et j'ai à nouveau un problème d'impression de la feuille "Calculs"

Si je passe par le bouton "Imprimer" d'Excel ou par mon bouton "Masquer les lignes inutiles et imprimer", pas de problème, ça passe à tous les coups.

Par contre si je passe par l'aperçu avant impression, l'aperçu est tout d'abord bien visible. Puis :

1) si je veux imprimer depuis l'aperçu, la boîte de dialogue "Imprimer" est à nouveau visible, ça imprime correctement, puis ça bloque totalement ; je ne peux plus rien faire d'autre que de fermer mon fichier (après que ça m'ait demandé si je voulais sauvegarder les changements ou non) ou

2) si je veux refermer l'aperçu sans imprimer, ça bloque complétement (ça ne revient pas sur la feuille Excel) et je suis obligé de refermer mon fichier de la même manière qu'au point. 1).

Savez-vous ce que je pourrais/devrais corriger ?

Bonnes salutations.

Salut yvouille,

A tout hasard, essaie en neutralisant tous les Application.ScreenUpdating = False de tes codes

Salut wba-new,

Merci pour ta proposition. Il semble que ça fonctionne bien en ce qui concerne le problème d’aperçu avant impression (je vais devoir encore faire plus d’essais au travail).

Par contre, si j'effectue des modifications sur la feuille "Proposition" puis que je sélectionne la feuille "Calculs" - ce qui lance la macro "Private Sub Worksheet_Activate" - ça prend nouvellement une éternité, ce qui est bien entendu très gênant.

Bob m’avait proposé une première solution en « bidouillant les bytes ». N’est-ce pas dans cette direction que se trouve la solution (que je n’arrive malheureusement pas à trouver tout seul) ?

A vous relire.

Une petite remarque sur ta macro MONTRER_toutes_lignes_Tabelle_5. Tu mets en commentaire "'Pas possible de faire autrement, sinon problème à la réouverture de certaines lignes fermées entre deux"

Tu ne peux donc pas faire

Rows("1:100").Hidden = False

au lieu de faire une boucle ?

Re,

Effectivement que ma boucle est parfaitement inutile dans ce cas Merci pour le conseil

Bonne journée.

Rechercher des sujets similaires à "macro evenementielle beforeprint"