Le but est donc de distribuer un document qui intégrerait un modèle afin que le destinataire du formulaire puisse créer un nouveau document basé sur ce modèle.

Il faut donc utiliser la fonctionnalité OLE (Object Linking Embedding), et en particulier Embedding qui signifie Incorporation. En clair, nous allons incorporer le modèle à utiliser à l'intérieur du document fourni.

Cela n'est pas très compliqué :

  • Ouvrez un document basé sur le modèle de votre choix, et copiez tout le contenu.
    nb : le document peut être complètement vide, ce n'est pas grave, vous copierez seulement le retour paragraphe car à lui seul il contient la mise en page et la mise en forme du document).
  • Dans le document formulaire, onglet Accueil, cliquez sur la flèche déroulante du bouton Coller, puis sur Collage spécial.
  • Dans la boîte de dialogue Collage spécial, choisissez Document Microsoft Word Objet, puis cochez Afficher sous forme d'icône.
    Vous pouvez, si nécessaire, changer l'icône ainsi que sa Légende.
    Cliquez sur OK, le document basé sur votre modèle est incorporé dans le document formulaire.

L'utilisateur n'aura plus qu'à double-cliquer sur l'icône pour créer le document. Lorsqu'il aura terminé, il fermera simplement le document qui s'enregistrera automatiquement dans le document formulaire. Ce dernier devant bien entendu être enregistré par les moyens normaux.

 


On voudrait aller plus loin pour que

  1. d'une part, l'utilisateur puisse cliquer sur un bouton du formulaire et ainsi ouvrir directement le document intégré.
  2. d'autre part, l'utilisateur enregistre automatiquement une copie de son document sur son disque dur, ou bien que ce document soit automatiquement envoyé par mail lorsqu'il est terminé.

 

1. Pour ouvrir le fichier incorporé via un bouton

Pour le bouton, vous allez ajouter un Contrôle ActiveX Bouton de commande que vous allez associer à la macro qui suit.

  • Sous l'onglet Développeur, groupe Contrôles, cliquez sur la flèche déroulante Outils hérités, et sous la rubrique Contrôles ActiveX, cliquez sur Bouton de commande.
  • Le bouton étant inséré dans le document, double-cliquez dessus, et copiez-collez la macro ci-après :

Dim objet As InlineShape, obj_OLE As OLEFormat
For Each objet In ActiveDocument.InlineShapes
With objet
If .Type = wdInlineShapeEmbeddedOLEObject Then
    If .OLEFormat.Application = "Microsoft Word" Then
    .OLEFormat.Activate
    Exit For
    End If
End If
End With


Votre bouton est prêt, vous pouvez le tester. Attention, il ne fonctionne que pour un document Word intégré de la manière indiquée ci-dessus, et ouvrira le premier document Word intégré.

 


2. Pour enregistrer le document en local et le renvoyer à l'expéditeur

Si vous voulez un autre bouton permettant d'enregistre le document en local sur l'emplacement choisi par l'utilisateur, et en même temps vous transmettre le document (via Outlook), insérez un deuxième bouton de la même manière que ci-dessus, et associez-le à la macro qui suit :

Private Sub CommandButton2_Click()
Dim envoi
Dim Objet As InlineShape, objOLE As OLEFormat
Dim objWord As Object
Dim dossier As String, nom_doc As String, nom_ent As String
Dim monItem, monDoc
Dim ol As Object
Application.ScreenUpdating = False

'demande si on est ok pour enregistrer et envoyer le fichier
envoi = MsgBox("OK pour enregistrer votre fichier en local et l'envoyer à votre correspondant ?", vbYesNo, "Envoi par mail")
If envoi = vbYes Then
GoTo suite:
Else
Exit Sub
End If

suite:
'demande dans quel dossier enregistrer le document
With Application.FileDialog(msoFileDialogFolderPicker)
    .Show
    If .SelectedItems.Count > 0 Then
    dossier = .SelectedItems(1)
    Else: Exit Sub
    End If
End With
'demande quel nom donner au document
nom_doc = InputBox("Quel nom pour votre document ?""Nom du document")
If nom_doc = "" Then Exit Sub
nom_ent = dossier & "/" & nom_doc & ".docx"

'ouvre le fichier incorporé
For Each Objet In ActiveDocument.InlineShapes
With Objet
    If .Type = wdInlineShapeEmbeddedOLEObject Then
        If .OLEFormat.Application = "Microsoft Word" Then
            Set objOLE = .OLEFormat
            objOLE.Activate
            Set objWord = objOLE.Object
 'enregistre le fichier incorporé en local avec le nom choisi
        ActiveDocument.SaveAs nom_ent
        objWord.Close , False
        Exit For
        End If
    End If
End With

Next

' envoie le mail avec la pièce jointe, via Outlook

Set ol = CreateObject("outlook.application")
Set monItem = ol.CreateItem(0)
monItem.To = "adresse@destinataire.com " 'adresse mail du destinataire
monItem.Subject = "objet du mail"
monItem.Body = "Bonjour" & Chr(13& Chr(13& "Veuillez trouver le document etc."
Set monDoc = monItem.Attachments
monDoc.Add nom_ent
monItem.Send
Set ol = Nothing
MsgBox "Votre document a bien été transmis. "
Application.ScreenUpdating = True
End Sub