Lancer Macro Après impression ou fermeture aperçu impression Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Marc59300
Jeune membre
Jeune membre
Messages : 27
Appréciation reçue : 1
Inscrit le : 14 octobre 2019
Version de Sheets : fr

Message par Marc59300 » 14 novembre 2019, 08:36

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.
:thx:
Avatar du membre
Baboutz
Membre fidèle
Membre fidèle
Messages : 413
Appréciations reçues : 33
Inscrit le : 19 avril 2019
Version d'Excel : 2016 FR

Message par Baboutz » 14 novembre 2019, 09:10

Salut Marc59300,

Est-ce une impression qui se fait par macro ou manuellement par l'utilisateur ?
Avatar du membre
Baboutz
Membre fidèle
Membre fidèle
Messages : 413
Appréciations reçues : 33
Inscrit le : 19 avril 2019
Version d'Excel : 2016 FR

Message par Baboutz » 14 novembre 2019, 09:20

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. :wink:
Avatar du membre
Marc59300
Jeune membre
Jeune membre
Messages : 27
Appréciation reçue : 1
Inscrit le : 14 octobre 2019
Version de Sheets : fr

Message par Marc59300 » 14 novembre 2019, 09:21

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

Avatar du membre
Baboutz
Membre fidèle
Membre fidèle
Messages : 413
Appréciations reçues : 33
Inscrit le : 19 avril 2019
Version d'Excel : 2016 FR

Message par Baboutz » 14 novembre 2019, 09:25

Ok. Alors essaye le code que je t'ai envoyé en appelant la procédure!
Avatar du membre
Marc59300
Jeune membre
Jeune membre
Messages : 27
Appréciation reçue : 1
Inscrit le : 14 octobre 2019
Version de Sheets : fr

Message par Marc59300 » 14 novembre 2019, 09:39

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]
Avatar du membre
Baboutz
Membre fidèle
Membre fidèle
Messages : 413
Appréciations reçues : 33
Inscrit le : 19 avril 2019
Version d'Excel : 2016 FR

Message par Baboutz » 14 novembre 2019, 09:41

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]
Avatar du membre
Marc59300
Jeune membre
Jeune membre
Messages : 27
Appréciation reçue : 1
Inscrit le : 14 octobre 2019
Version de Sheets : fr

Message par Marc59300 » 14 novembre 2019, 09:46

Bonjour

Pou finir j'utilise la code de lancement impression:
Application.CommandBars.ExecuteMso ("PrintPreviewAndPrint")
Cela ne fonctionne pas..
Avatar du membre
Baboutz
Membre fidèle
Membre fidèle
Messages : 413
Appréciations reçues : 33
Inscrit le : 19 avril 2019
Version d'Excel : 2016 FR

Message par Baboutz » 14 novembre 2019, 09:52

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
Avatar du membre
Marc59300
Jeune membre
Jeune membre
Messages : 27
Appréciation reçue : 1
Inscrit le : 14 octobre 2019
Version de Sheets : fr

Message par Marc59300 » 14 novembre 2019, 10:01

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

Merci de votre aide
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message