Lancer Macro Après impression ou fermeture aperçu impression

Bonjour,

J'aurais besoin de lancer une macro sur la feuille en cours :

  • Soit après l'impression qui passe par l’aperçu avant impression.
  • Soit en quittant l’aperçu avant impression sans imprimer.

Merci de votre aide.

Salut Marc59300,

Est-ce une impression qui se fait par macro ou manuellement par l'utilisateur ?

En cherchant dans chez les anglais, j'ai trouvé ça de Jaafar Tribak :

Option Explicit

#If  VBA7 Then
    Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
#Else 
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
#End  If

Sub Test()

    Application.CommandBars.ExecuteMso "PrintPreviewAndPrint"

    Do
        DoEvents
    Loop Until FindWindowEx(Application.hwnd, 0, "FullpageUIHost", vbNullString) = 0

    'code after print preview window is closed (printed or canceled)
    MsgBox ("Print Complete")

End Sub

À tester donc, donne nous des retours.

Bonjour

Cela ce fait par macro (Obligatoirement Code ci joint)

Merci

Sub ImprimeSEUL()
    If leMenu = True Then ' si leMenu = vrai on affiche tout
        With Application
            ' le ruban
            Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
            ' la barre de formule
            Application.DisplayFormulaBar = True
            ' barre de status
            Application.DisplayStatusBar = True
        End With
        With ActiveWindow
            ' les titres (A et 1)
            .DisplayHeadings = True
            ' scroll barre horizontale
            .DisplayHorizontalScrollBar = True
            ' scroll barre verticale
            .DisplayVerticalScrollBar = True
            ' les onglets
            .DisplayWorkbookTabs = True
        End With
        ' on passe la variable booléenne leMenu à faux
        leMenu = False
        ' on change le nom du bouton "Plein_écran" qui se trouve sur la feuille 1 en "Plein écran"
        Sheets("ACCUEIL").Shapes("Plein_écran").TextFrame2.TextRange.Characters.Text = "Plein écran"

        Application.Dialogs(xlDialogPrintPreview).Show

    Else 'sinon on cache

        Application.Dialogs(xlDialogPrintPreview).Show

    End If

Ok. Alors essaye le code que je t'ai envoyé en appelant la procédure!

Bonjour

Je viens d'essayer mais le code ce met en rouge et ne fonctionne pas

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long[/color]

Remplace ta ligne par

Private Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long[/color]

Bonjour

Pou finir j'utilise la code de lancement impression:

Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")

Cela ne fonctionne pas..

Je ne vais pas te mentir, je ne suis pas aussi calé que le mec qui a écrit la macro... Donc je ne saurai pas te dire comment corriger ça...

Autre idée : Pourquoi ne pas forcer l'impression automatiquement (Avec .PrintOut) ? Tu imprimes tes données sans passer par l'ouverture de ta boîte de dialogue et tu exécutes par la suite la macro qui te plaît ? Elle se lancera donc après le début de tes impressions

Merci mais j'ai vraiment besoin de cette aperçu..

Merci de votre aide

Re Marc59300,

Il faut savoir qu'il est possible d’interagir avant l'impression avec la procédure :

Private Sub Workbook_BeforePrint(Cancel As Boolean)

End Sub

En revanche, aucune procédure ou fonction de base n'existe pour le moment pour effectuer une action après l'impression.

En recherchant, il doit être pourtant possible d'identifier la fin d'une impression.

Le problème également du code que je t'ai donné, je m'en suis aperçu après, c'est qu'il s'exécute si l'impression est lancé ou si c'est annulé.

Il te reste deux solutions :

  • Détecter dans l'aperçu avant impression si l'utilisateur clique sur "Imprimer" ou s'il quitte la process et en fonction, exécuter ton code
  • Créer ton propre aperçu avant impression, avec les boutons "Imprimer" et "Quitter" pour effectuer ton code en fonction.

Cette solution passerai pas un UserForm (?)

Malheureusement, je ne sais pas si ces solutions sont réalisables et je n'ai pas les connaissances et capacités de t'aider...

Sache que si elles ne sont pas réalisable, ta demande ne doit pas être possible, ou alors il y a une méthode que je n'ai pas envisagée

En espérant qu'une âme charitable vienne à ton secours,

Bonne journée,

Baboutz

Baboutz ,

Merci de ton aide et OUI j’espère une bonne âme pour m'aider.....

Bonjour,

Lancer une impression avec aperçu c'est :

Sub test
ActiveSheet.PrintOut Preview:=True
'Après si tu veux lancer une autre macro tu l'appelles sur la ligne suivante 
'Exemple :
MsgBox "C'est compris ?"
End Sub

A+

Rechercher des sujets similaires à "lancer macro impression fermeture apercu"