vba : fermer un classeur après impression

bérylion

XLDnaute Occasionnel
Salut la foule,

bon c'est pas très explicite mais je vous la fait courte :

je créé un classeur masqué à la volée pour imprimer à la suite différentes feuilles de différents classeurs sur une imprimante réseau.
les feuilles sont copiées et empilées dans ce classeur, et une commande permet de l'afficher dans le backstage PrintPreviewAndPrint pour choisir manuellement les options d'impressions (tirages, couleur, rectoverso, assemblage...)

le problème est :

comment fermer ce classeur par VBA après l'avoir imprimé en cliquant manuellement sur le bouton ''imprimer'' du backstage ?!

volontairement je vous donne pas le code pour laisser libre court à vos idées les plus folles !
(mais bien sur je le fournirai si ça peut aider...)

A vot' bon coeur...
 

MJ13

XLDnaute Barbatruc
Re : vba : fermer un classeur après impression

Bonjour Bérylion, Eric

Peut-être utiliser un code sur l'évènement du workbook (mais il n'y a pas de AfterPrint :eek:).

Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
End Sub
 

bérylion

XLDnaute Occasionnel
Re : vba : fermer un classeur après impression

Bonjour Bérylion, Eric

il n'y a pas de AfterPrint :eek:).

End Sub
[/CODE]


salut

oui, et c'est bien dommage !
(y-z-ont pourtant créé un aftersave, ça aurait été trop facile de tout faire d'un coup)

sinon, le beforeprint event ne convient pas non plus car cela fermerait le classeur avant l'impression.

j'ai fait le tour de la question toute la journée, et je suis tout sec :(

mais je désespère pas, je suis preneur de toute solution alternative...
 

Staple1600

XLDnaute Barbatruc
Re : vba : fermer un classeur après impression

Bonsoir à tous

Un biais venu d'outre-Atlantique
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
     ' (code de Richie(UK)
    Application.EnableEvents = False 
    'stop infinite Loop re printing 
    Cancel = True 
    'cancel original print instruction 
     
    'do your printing here via VBA 
     
    'do your AFTER print stuff here 
     
    Application.EnableEvents = True 
    'reset event-checking 
End Sub
 
Dernière édition:

bérylion

XLDnaute Occasionnel
Re : vba : fermer un classeur après impression

Bonsoir à tous

Un biais venu d'outre-Atlantique
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean) 
   
     
    'do your printing here via VBA 
     
  
End Sub


Salut

merci pour la contribution mais j'ai bien spécifié que l'impression se fait ''à la main''

j'avais trouvé cette manip mais ça ne marche pas dans mon cas...

je viens d'avoir une vague idée à base de Application.Dialogs(xlDialogPrint).Show qui pourrait dépanner, mais j'ai pas xl14 à la maison.

je fais un essai sur le xl12 de madame et je reviens !
 

Staple1600

XLDnaute Barbatruc
Re : vba : fermer un classeur après impression

Re

???
Comme ton titre l'indique:
vba : fermer un classeur après impression


Vba= macro non?

Testes la proposition (en ajoutant le code pour la fermeture du classeur) où il se doit et on en reparle ;)


PS: J'avais testé avant de tester mon précédent message.
 
Dernière édition:

bérylion

XLDnaute Occasionnel
Re : vba : fermer un classeur après impression

re-

ça n'est compatible avec la conception de la sub.
le panneau d'impression est appelé pour laisser l'utilisateur choisir ses paramètres d'impression
mais il n'a pas 'la main' sur la procédure et l'éxécution du code se poursuit avant même qu'il ait vu quoi que ce soit !
donc, si j'ai pas le temps de cliquer sur imprimer, et que ma procédure n'a aucune instruction d'impression, je peux mettre tout ce que je veux dans la workbook_beforeprint, y risque pas de se passer grand chose...

voici le code à finaliser :

VB:
Static Sub QueuePrint(Queue As Boolean)

On Error GoTo ErrIntercept

Application.ScreenUpdating = False

If Queue Then

    MyWb = ActiveWorkbook.Name

    Temp_Print_WB = Workbooks(Temp_Print_WB).Name

    Windows(Temp_Print_WB).Visible = True
    Windows(MyWb).Activate
    ActiveSheet.Copy after:=Workbooks(Temp_Print_WB).Sheets(1)
    ActiveWorkbook.Sheets(Sheets.Count).Name = Left(MyWb, Len(MyWb) - 5)
    If Not TempWb Then Sheets(1).Delete: TempWb = True
    ActiveWindow.Visible = False
    Windows(MyWb).Activate

    Exit Sub

Else

    Windows(Temp_Print_WB).Visible = True

    If TempWb Then
        Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")

        'ce menu n'est pas modal donc la sub se poursuit _
            l'idée était donc de faire tourner une boucle ''à vide'' _
                jusqu'à ce que l'utilisateur clic sur ''imprimer''

        Do
            DoEvents
        Loop ' until l'utilisateur ait cliqué et l'impression soit envoyée vers l'imprimante
    
End If

    ActiveWorkbook.Close False

    Exit Sub

End If

ErrIntercept:
If Err.Number = 9 Then
    With Workbooks.Add
        Temp_Print_WB = .Name: TempWb = False
    End With
    ActiveWindow.Visible = False
    Resume
else : exit sub
End If

End Sub

j'avais penser tester la propriété activeworkbook.BuiltinDocumentProperties(10)
mais la ou s'est fort c'est qu'elle se met à jour sur printpreview aussi bien que sur printout !!
donc impasse...

j'ai trouvé une solution de substitution :

je remplace :
VB:
        Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")
par
VB:
       Application.Dialogs(xlDialogPrint).Show
et j'ai viré la boucle qui tourne à vide
ce form étant modal, il me laisse paramétrer et lancer mon impression avant de poursuivre et de fermer le classeur.

c'est donc en partie résolu, mais je reste sur ma faim :p


Si vous avez mieux, je prends tout ce qui vient !
 

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote