Screenshot d'un userform secondaire - VBA

Bonjour bonjour !

Voilà mon objectif :

  • Ouvrir un Userform normalement
  • Lorsque je clique sur mon Commandbutton1, je souhaite qu'excel ouvre un second userform par dessus (ce qu'il fait très bien), prenne une capture d'écran sur ce userform, puis le ferme.
Or, jusqu'ici, ma fonction qui snapshot l'userform récupère l'image du premier userform et non celle de l'userform qui s'ouvre par dessus

Chose curieuse : la prise d'écran se fait même quand le premier userform est en vbModeless, mais si les deux sont vbModeless aucune prise d'écran n'est faite et la macro plante (car aucun élément copié pour la fonction Paste)...

Je soupçonne le code de ne pas "sélectionner" le second usf comme fenêtre active lors de la prise d'écran, mais aucune idée de comment régler ça.

Autre contrainte : le Unload du second userform ne fonctionne que si celui ci est en vbModeless, sinon je suis obligé de le fermer à la main pour que la procédure continue...

Voilà mon code :

Sur le premier Userform :

Private Sub CommandButton1_Click()
    ApercuDoss.Show
    Call Export_dossier_trspt
    Unload ApercuDoss
    MsgBox "Dossier envoyé avec succès", vbInformation, "Succès"
End Sub

Sur le module1 :

Sub Export_dossier_trspt()

Dim Ws As Worksheet

    Application.ScreenUpdating = False
    PrintScreen
    DoEvents

    On Error Resume Next
       Application.DisplayAlerts = False
       Sheets("impression").Delete
       Application.DisplayAlerts = True
    On Error GoTo 0

    'Ajoute une feuille pour coller l'image du formulaire
    Set Ws = Sheets.Add

    'renomme la feuille
    ActiveSheet.Name = "impression"
        Sheets("impression").Paste
        Sheets("impression").PageSetup.Orientation = xlLandscape
        Selection.ShapeRange.LockAspectRatio = msoTrue
        'Selection.ShapeRange.Height = Range("A1:N44").Height
        Selection.ShapeRange.Width = Range("A1:N44").Width

        'impression centrée dans la page
        With Sheets("impression").PageSetup
            .CenterHorizontally = True
            .CenterVertically = True
            .PrintArea = "A1:N44"
            .LeftMargin = Application.InchesToPoints(0)
            .RightMargin = Application.InchesToPoints(0)
            .TopMargin = Application.InchesToPoints(0)
            .BottomMargin = Application.InchesToPoints(0)
            .Zoom = False
        End With

    ActiveSheet.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=ThisWorkbook.Path & "\" & "Formulaire" & ".pdf", _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=False

        'enléve les messages d'alerte
        Application.DisplayAlerts = False
        ActiveSheet.Delete
        'remet les messages d'alerte
        Application.DisplayAlerts = True
        'réactive le rafraichissement de l'écran
        Application.ScreenUpdating = True

...ETC...

End Sub

Sub PrintScreen()
     keybd_event VK_MENU, 0, 0, 0
     keybd_event VK_SNAPSHOT, 0, 0, 0
     keybd_event VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0
     keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0
End Sub

Merci beaucoup pour votre aide !!

Up, si je puis me permettre

Salut,

je ne suis pas certain que ca fonctionne mais à tester quand même....

Private Sub CommandButton1_Click()
    Formulaire1.Hide
    ApercuDoss.Show
    Call Export_dossier_trspt
    Unload ApercuDoss
       MsgBox "Dossier envoyé avec succès", vbInformation, "Succès"
       Formulaire1.Show
End Sub

Bonjour,

Merci pour ta réponse crackwood01 !

Malheureusement, toujours le même problème..

Je joins un fichier semblable à ce message.

Vous remarquerez que le screenshot ne fonctionne pas, du coup excel paste le dernier truc que vous avez en presse papier. Si je nettoie mon presse papier, le module plante car il n'y a plus rien à Paste...

Merci !

34mattmons.xlsm (27.26 Ko)

Et si tu ajouter un 0 apres le show?

Apercu.show 0

Je suis sur mon téléphone donc impossible pour moi de tester, je brainstorm ...

Alors je ne peux mettre 0 que si le premier userform est déjà non modal, logique.

Lorsque je mets les deux en non modal avec le 0, plus aucune impression d'écran, à nouveau le problème de Paste, sûrement car en non modal on est pas focalisé sur le userform...

Rechercher des sujets similaires à "screenshot userform secondaire vba"