Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 Export d'un Userform au format Docx;

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jeff1494

XLDnaute Occasionnel
Bonsoir à toutes et tous;

Je suis en train de me faire une petite boite à outils me permettant d'avoir des informations pour m'aider à monter une sorte de documentation du projet VBE.
Mon idée est de regrouper des informations du projet me permettant de monter une documentation cohérente du projet.

J'ai créé quelques macros pour me fournir des éléments, qui me serviront à créer de la doc, comme par exemple :
  1. Liste de tous les formulaires du projet.
  2. Liste des contrôles par formulaire.
  3. Liste des feuilles avec les attributs "masquée, protégée".
  4. Liste des noms de cellules et tableaux du classeur.
J'aimerai aussi pouvoir créer au format Word '.Docx' une documentation sur les formulaires. Pouvoir insérer dans un fichier ".docx" une capture des formulaires, et ainsi pouvoir documenter chaque contrôle par exemple.

J'ai trouvé une macro créée par @kiki29 il y a déjà un bon moment (Pris dans son récap des possibilités de jouer avec les PDF et Excel dont voici le lien).

Mon problème est qu'il exporte la capture d'écran au format PDF. Cela fonctionne parfaitement, mais je voudrais bien, en fait, sauvegarder la capture comme image dans un fichier Word.
J'ai bien sûr essayer de voir le code et si je pouvais le modifier. Mais le Hic est que Kiki29 a utilisé des concepts que je ne connais pas. Du genre "Const VK_SNAPSHOT = 44" voire " keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0" et d'autres.

Donc j'avoue humblement que d'une part j'aimerais bien comprendre ce genre d'instruction (L'aide sur les "Constantes KeyCode" m'a permis de comprendre l'idée générale, mais c'est tout.).

Je vous joins un fichier exemple très simple qui utilise la macro de Kiki29, et qui marche parfaitement bien.
Si une personne charitable pouvait :
  1. M'expliquer le code de kiki29.
  2. M'aider à créer une macro qui ferait le même genre de chose, à savoir:
    1. Prendre un "cliché" du formulaire au format Bmp, ou autre (.jpg, ...). Le format n'est une contrainte pour autant qu'il puisse être inclus dans un document.
    2. Pouvoir créer un document Word (format .docx) qui contiendrait ce cliché du formulaire. Le doc sera créé dans le répertoire du classeur, et avec le nom du formulaire.
Je vous joins un petit fichier qui m'a permis de tester la macro de kiki29. Il est minimaliste, juste un formulaire avec quelques contrôles bidons, et 3 boutons.
Un pour l'export vers PDF = "CommandButton1", le deuxième "CommandButton2" qui ne sert à rien d'autre que d'exister, et un troisième "CommandButton3" qui me servirait à créer le fameux document Word;

Si une âme charitable pouvait m'aider je lui en serais reconnaissant.
En attendant je vous souhaite à tous une bonne soirée.
 

Pièces jointes

Solution
bonsoir jeff
VB:
Private Sub CommandButton3_Click()
    PrintScreen
    DoEvents
    Dim wdApp As Object, wdDoc As Object
    ' creation de l'object application word
    Set wdApp = CreateObject("Word.Application")
    wdApp.Visible = True
    ' on créé un document
    Set wdDoc = wdApp.Documents.Add
    ' on colle la capture dans le document
    wdApp.Selection.Paste
    'on centre le tout
    wdApp.Selection.ParagraphFormat.Alignment = 1 ' 0=Left, 1=Center, 2=Right
    ' enregistrement du document
    wdDoc.SaveAs2 Environ("userprofile") & "\desktop\mon userform.docx"
    'on ferme
    wdDoc.Close
    wdApp.Quit
    MsgBox "enregistrement de la capture dans un fichier docw(word) terminé"
End Sub
Bonjour @job75
VB:
Wdoc.Shapes(1).Left = (Wdoc.PageSetup.PageWidth - Wdoc.Shapes(1).Width) / 2 - Wdoc.PageSetup.LeftMargin 'centrage
il y a le wdApp.Selection.ParagraphFormat.Alignment = 0 ' 0=Left, 1=Center, 2=Right pour ça
En faisant comme tu fais tu bloques au centre d'une page de départ classique quand tu snake ou réduire ou agrandir ce ne sera plus centré.
et pour peu que le page setup soit modifié (marge header etc..) c'est mort présentation foutue
Autant laisser l'automatisme non?
 
Chez moi sur Excel 2019 pour encadrer l'image par des textes je dois insérer des paragraphes à l'aide d'une boucle :
VB:
Private Sub CommandButton1_Click()
Dim Wapp As Object, Wdoc As Object, husf, h, i
 
    Application.ScreenUpdating = False
 
    PrintScreen
    DoEvents
    
    Set Wapp = CreateObject("Word.Application")
    Wapp.Visible = True
    Set Wdoc = Wapp.Documents.Add
    husf = Me.Height
    With Wapp.Selection.ParagraphFormat: h = .SpaceBefore + .SpaceAfter + .LineSpacing: End With
    For i = 1 To Int(husf / h) + 2
        Wapp.Selection.Paragraphs.Add
    Next i
    Wdoc.Paragraphs(1).Range.Text = "Ci-dessous la copie d'écran"
    Wdoc.Paragraphs(i - 1).Range.Text = "Fin de la copie d'écran"
    Wdoc.Paragraphs(2).Range.Select
    Wapp.Selection.Paste
    Wdoc.Shapes(1).Left = (Wdoc.PageSetup.PageWidth - Wdoc.Shapes(1).Width) / 2 - Wdoc.PageSetup.LeftMargin 'centrage

    Wdoc.SaveAs ActiveWorkbook.Path & "\UserForm.docx"
    Wdoc.ExportAsFixedFormat ActiveWorkbook.Path & "\UserForm.pdf", 17 'wdExportFormatPDF
    MsgBox "Les fichiers 'UserForm.docx' et 'UserForm.pdf' ont été créés..."
    
    Wdoc.Close False
    Wapp.Quit
    Unload Me
End Sub

 

Pièces jointes

Bonjour à toutes et tous;

@job75 : Chez moi cela fonctionne correctement. Donc Texte, Image, puis texte. Je n'ai pas remarqué de problème. Juste la rapidité d'exécution, mais comme le dit @patricktoulon cela doit venir de nos versions récentes (et la lourdeur de leur clipboard) il faut faire des poses sinon vba écrit le 2d texte avant d'avoir fini de coller. Mais comme tout cela est à usage perso cela ne me gène pas.
En fait j'ai la version "Microsoft Office LTSC Professionnel Plus 2024", mais cette version n'est pas référencée dans les choix possibles. C'est pourquoi il apparait que j'utilise Excel 2021.

@patricktoulon : Merci pour cette info. Par contre dans mon premier message je demandais si je pouvais avoir des explications concernant les instructions du genre "Const VK_SNAPSHOT = 44" voire " keybd_event VK_LMENU, 0, KEYEVENTF_EXTENDEDKEY, 0" et d'autres.
Alors j'ai trouvé de la doc là dessus, maais je ne comprends pas comment cela fonctionne. Aurais-tu la gentillesse de me l'expliquer.

Sur ce bonne journée à vous.
 
re
Bonjour
oui
VK_SNAPSHOT
définition:Virtual-Key Snapshot
code de la touche : 44
C’est la touche Impr. écran ou print screen en anglais(selon les marques de clavier ).
Elle permet de capturer l’écran dans le clipboard.

VK_LMENU
definition:Virtual Left Menu key
Code la touche : 164
C’est la touche ALT de gauche
Dans Windows, “MENU” est un ancien nom pour la touche Alt.

KEYEVENTF_KEYUP
definition : constante correspondant a la situation de la touche(appuyée ou pas )
appuyé=2
relaché=0

KEYEVENTF_EXTENDEDKEY
valeur=1
Indique que la touche envoyée est une touche étendue, comme :
Les touches du pavé numérique
Les touches fléchées
La touche INSERT, DELETE, HOME, END
Les touches Précédent / Suivant, etc.
en fait ça ajoute un bit spécial à l’event pour que Windows sache qu’il s’agit d’une touche “étendue”.
 
Bonjour jeff1494, le forum,

Je reviens sur ma solution du post #22, pas besoin de boucle.

Il suffit de créer 3 paragraphes avec le texte, de coller l'image dans le 2ème et d'ajuster sa hauteur avec .SpaceAfter :
VB:
Private Sub CommandButton1_Click()
Dim Wapp As Object, Wdoc As Object
 
    Application.ScreenUpdating = False
    PrintScreen
    DoEvents
  
    Set Wapp = CreateObject("Word.Application")
    Wapp.Visible = True
    Set Wdoc = Wapp.Documents.Add
    Wapp.Selection.Range.Text = "Ci-dessous la copie d'écran" & vbCrLf & vbCrLf & "Fin de la copie d'écran" '3 paragraphes
    Wdoc.Paragraphs(2).Range.Select
    Wapp.Selection.Paste
    Wdoc.Shapes(1).Left = (Wdoc.PageSetup.PageWidth - Wdoc.Shapes(1).Width) / 2 - Wdoc.PageSetup.LeftMargin 'centrage
    With Wapp.Selection.ParagraphFormat: .SpaceAfter = .SpaceAfter + Wdoc.Shapes(1).Height - .LineSpacing: End With

    Wdoc.SaveAs ActiveWorkbook.Path & "\UserForm.docx"
    Wdoc.ExportAsFixedFormat ActiveWorkbook.Path & "\UserForm.pdf", 17 'wdExportFormatPDF
    Wdoc.Close False
    Wapp.Quit
    MsgBox "Les fichiers 'UserForm.docx' et 'UserForm.pdf' ont été créés..."
    Unload Me
End Sub
La propriété .SpaceAfter est limitée à 1584 points, il y a de la marge.

A+
 

Pièces jointes

Dernière édition:
Bonjour @job75
ca me titillait un peu ton problème de centrage
chat gpt , claude , copilot , mia , enchor m'ont tous dit la même chose
Si ce n'est pas centré c'est que la résolution adoptée pour windows n'est pas la meilleure.
et Word n'arrive pas a scaler avec ses fonctions primaires d'alignement

Pour le coup j'ai fais le test et donc changer ma résolution (plus fine) puisque j'en ai la possibilité.
Bingo, c'est plus centré

Phénomène connu avec les versions + de 2016

Autrement dit, même si ton moteur graphique offre cette possibilité, réduire parfois la résolution et diminuer le zoom windows peut présenter des avantages.
Ça ne change rien au rendu sur l'écran ou si peu à l'œil nu

c'est bien pour ça que j'utilise le moteur du panneau de configuration NVIDIA(ou celui de la marque de ta carte graphique) au lieu de celui de windows
il peut te donner la meilleure config possible
si tant est que vous l'ayez installé
 
copilot me dit que pour utiliser l'image comme shape il faut la convertir en shape
activer le ref word
VB:
Dim shp As Shape
Set shp = wdDoc.InlineShapes(wdDoc.InlineShapes.Count).ConvertToShape

With shp
    .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
    .Left = wdShapeCenter
    .RelativeVerticalPosition = wdRelativeVerticalPositionParagraph
    .WrapFormat.Type = wdWrapInline ' ou wdWrapSquare, wdWrapTopBottom…
End With
sinon tes deux lignes de positionnement de shape plante un debogage
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
469
Réponses
5
Affichages
364
Réponses
7
Affichages
140
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…