Code VBA ou Macro : Insertion Document Maître et Sous Document

Messages postés
4
Date d'inscription
lundi 22 juillet 2019
Statut
Membre
Dernière intervention
25 juillet 2019
-
Bonjour à tous!
Je n'ai pas assez de notion en VBA. je voudrais insérer par Macro ou code VBA un sous-document word dans un document maitre (word). Le sous-document à insérer est sélectionné par l'utilisateur dans la boîte de dialogue selon un chemin quelconque (Exemple C:\..\ ou clé USB F:\).
Je suis tombé sur le code ci-dessous que j'ai un peu modifié et qui marche bien :

Macro_InsertionMaitreSousDoc 
'    ActiveWindow.ActivePane.View.Type = wdOutlineView
    If ActiveWindow.View = wdMasterView Then
        ActiveWindow.View = wdOutlineView
    Else
        ActiveWindow.View = wdMasterView
    End If
    Selection.Range.Subdocuments.AddFromFile Name:="Recommandation.docx", _
        ConfirmConversions:=False, ReadOnly:=False, PasswordDocument:="", _
        PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
        WritePasswordTemplate:=""
End Sub

Mon Problème est le suivant:
Comment faire pour que le Name (Nom de sous document à insérer) soit celui sélectionné par l'utilisateur à partir d'un chemin quelconque.
Selection.Range.Subdocuments.AddFromFile Name= sous-document sélectionné par l'utilisateur.
Prière me proposer un code convenable.
Merci pour votre contribution!
Afficher la suite 

1 réponse

Messages postés
6424
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
8 décembre 2019
91
0
Merci
Bonjour,

Trouver le chemin avec openfiledialog:

https://software-solutions-online.com/excel-vba-open-file-dialog/

ensuite récupérer le nom du fichier:

https://www.gcexcel.com/extraire-le-nom-dun-fichier-dun-chemin/

Voilà


Prière me proposer un code convenable.

cette remarque n'est pas nécessaire, nous sommes tous bénévoles!

Persena
Messages postés
4
Date d'inscription
lundi 22 juillet 2019
Statut
Membre
Dernière intervention
25 juillet 2019
-
Je vous remercie pour les différents codes qui me sont proposés et leurs explications assez détaillées. Ces codes sont très utiles. je mettrai en places les différentes procédures et les testées. Je vous reviendrai après pour la suite.
Persena
Messages postés
4
Date d'inscription
lundi 22 juillet 2019
Statut
Membre
Dernière intervention
25 juillet 2019
-
Bonjour !
Après la mise en places des différence procédures et les tests réalisés, je note une erreur de compilation sur la FONCTION ExtractionNomSousDoc :
"Nom externe non défini" sur str = [a1].

Voici les procédures et fonction réalisés ci-dessous :

BTN_INSERT_SOUSDOC (Procédure principale fait l'insertion du sous-document dans le document maître. Elle appelle :
1-/ La procédure SelectcheminSousDoc (Récupère le chemin d'accès du sous document sélectionné par l'utilisateur). Celle-ci marche bien
2-/ La fonction ExtractionNomSousDoc (Extrait le nom du sous-document à insérer). Erreur de compilation "Nom externe non défini" sur str = [a1]

Merci de votre aide!

Private Sub BTN_INSERT_SOUSDOC()
  ActiveWindow.ActivePane.View.Type = wdOutlineView
    If ActiveWindow.View = wdMasterView Then 
        ActiveWindow.View = wdOutlineView
    Else
        ActiveWindow.View = wdMasterView
    End If
 Call SelectcheminSousDoc()
 ExtractionNomSousDoc(cheminacces)
    Selection.Range.Subdocuments.AddFromFile Name:=nomSousDoc, _      
        ConfirmConversions:=False, ReadOnly:=False, PasswordDocument:="", _
        PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
        WritePasswordTemplate:=""
    
End Sub
------------------------------------------------------------------------------------------
Sub SelectcheminSousDoc() 
 Dim NbSelect As Integer ,cheminacces As String
 'un document sélectionné par l’utilisateur
 Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
 'affichage de la boîte de dialogue
 intChoice = Application.FileDialog(msoFileDialogOpen).Show
 'Traitement de la boîte de dialogue 
  If intChoice <> 0 Then 
  'récupération du chemin d’accès du document si sélection
  cheminacces = Application.FileDialog(msoFileDialogOpen).SelectedItems(1) 
  End If 

End Sub
---------------------------------------------------------------------------
FUNCTION ExtractionNomSousDoc(str As String) As string
'Split Array
   Dim nomSousDoc As String 
   str = [a1]
   nomSousDoc = Split(str, "\")(UBound(Split(str, "\")))
   End FUNCTION
cs_Le Pivert
Messages postés
6424
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
8 décembre 2019
91 -
nomSousDoc 
est une variable que tu appelles dans plusieurs Sub , il faut donc la déclarer en haut avant toutes les Sub

 Dim nomSousDoc As String 


Voilà
Persena
Messages postés
4
Date d'inscription
lundi 22 juillet 2019
Statut
Membre
Dernière intervention
25 juillet 2019
-
Bonjour CS_Le Pivert

Merci pour votre suggestion. Je l'ai déclaré en haut avant toutes les Sub mais le message d'erreur persiste toujours au niveau de la Fonction: FUNCTION ExtractionNomSousDoc. Ceci est aussi valable pour toutes les méthodes contenant cette ligne de code : str = [a1].

J'ai refais une procédure unique à partir des 3 citées plus haut en supprimant la ligne de code : str = [a1] qui crée l'erreur et ça a bien marché. le chemin d'accès a été récupéré, le nom du sous-document a été extrait et enfin le sous-document a été inséré dans le document maître avec succès.

Voici la procédure reprise ci-dessous. Je vais la parfaire et vous renvoyer la version finale. Merci pour les propositions.

Private Sub BTN_INSERT_SOUSDOC()
Dim NbSelect As Integer, cheminacces As String
Dim str As String, nomSousDoc As String
ActiveWindow.ActivePane.View.Type = wdOutlineView
If ActiveWindow.View = wdMasterView Then
ActiveWindow.View = wdOutlineView
Else
ActiveWindow.View = wdMasterView
End If
'un document sélectionné par l’utilisateur
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
'affichage de la boîte de dialogue
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'Traitement de la boîte de dialogue
If intChoice <> 0 Then
'récupération du chemin d’accès du document si sélection
cheminacces = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
End If
str = cheminacces
nomSousDoc = Mid(str, InStrRev(str, "\") + 1)
Selection.Range.Subdocuments.AddFromFile Name:=nomSousDoc, _
ConfirmConversions:=False, ReadOnly:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:=""

End Sub
Commenter la réponse de cs_Le Pivert