Bonjour bonjour !
Voilà mon objectif :
- Ouvrir un Userform normalement
- Lorsque je clique sur mon Commandbutton1, je souhaite qu'excel ouvre un second userform plus propre par dessus (ce qu'il fait très bien), le snapshot, 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...
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 :
Sur le module1 :
Merci beaucoup pour votre aide !!
Voilà mon objectif :
- Ouvrir un Userform normalement
- Lorsque je clique sur mon Commandbutton1, je souhaite qu'excel ouvre un second userform plus propre par dessus (ce qu'il fait très bien), le snapshot, 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...
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 :
VB:
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 :
Code:
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 !!