1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| '*****************************************************************************************************
' ___ _ _______ __ _ ____ _ _ _______ ___ _ _ _ ___ _ _.
' // \\ /\\ // // \\ // // // // // // \\ // // // // \\ //| //
' //___// //__\ // //__// // // //__// // // // // // // // // // | //
' // // \\ // // \\ // // // \\ // // // // // // // // // | //
'// // // // // // // //___ // \\ // \\__// //__// //___ \\__// // |//
'****************************************************************************************************
'fonction de cature pour userform
'Utilisation des api avec les macro 4
'pas de déclarations à faire
'capture avec la simulation de la touche snapshot avec argument fenêtre acive
'enregistrement avec un paste et export d'un chart
Sub captureForm(uf)
If Not uf.Visible Then MsgBox "Le userform n'est pas affiché": Exit Sub
Hwnd = ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JCC""," & """" & vbNullString & """" & ", " & """" & uf.Caption & """)")
ExecuteExcel4Macro ("CALL(""user32"",""ShowWindow"",""JJJ"",""" & Hwnd & """,""" & 9 & """)") ' application du mode
'vidage du clipBoard
'avec les versions suppérieures a 2007 le clibboard est un peu lent (latence) en lecture et en ecriture
'alors pour éviter de sauver une eventuelle capture précédente on le vide
ExecuteExcel4Macro ("CALL(""user32"",""OpenClipboard"",""JJ""," & 0& & ")")
ExecuteExcel4Macro ("CALL(""user32"",""EmptyClipboard"",""J"")")
ExecuteExcel4Macro ("CALL(""user32"",""CloseClipboard"",""J"")")
'attente de vidage de/des image(s) dans le cipboard boucle
'tant qu'un handle d'image bitmap ou metafile se trouve dans le clipBoard
Do
DoEvents
X = ExecuteExcel4Macro("CALL(""user32"",""IsClipboardFormatAvailable"",""JJC""," & 2 & ")")
X = X + ExecuteExcel4Macro("CALL(""user32"",""IsClipboardFormatAvailable"",""JJC""," & 14 & ")")
Loop While X = 1
'simulation de la touche printscreen(snapshot)
ExecuteExcel4Macro ("CALL(""user32"",""keybd_event"",""JJJJJ""," & 44 & ", " & 1 & ", " & 0 & ", " & 0 & ")") 'api SetWindowLongA
ExecuteExcel4Macro ("CALL(""user32"",""keybd_event"",""JJJJJ""," & 44 & ", " & 1 & ", " & &H2 & ", " & 0 & ")") 'api SetWindowLongA
'attente d'acces complet au bitmap dans le clipboard
Do: DoEvents: X = ExecuteExcel4Macro("CALL(""user32"",""IsClipboardFormatAvailable"",""JJC""," & 2 & ")"): Loop While X = 0
'Enregistrement
'dialog saveas
Fichier = Application.GetSaveAsFilename(InitialFileName:=uf.Name, filefilter:="image Files (*.jpg), *.jpg", Title:="ENREGISTREMENT DE LA CAPTURE")
If Fichier = False Then Exit Sub
ActiveSheet.Paste
With ActiveSheet
Set shp = .Shapes(.Shapes.Count)
With .ChartObjects.Add(shp.Left + 200, shp.Top, shp.Width, shp.Height)
.Chart.Paste: .Chart.Export Filename:=Fichier, FilterName:="jpg"
.Delete
shp.Delete
End With
End With
End Sub |
Partager