[xl2010][VBA] test document word ouvert

Bonjour,

Je cherche à copier des données d'un classeur excel ouvert dans un document word ouvert. Pour cela, j'utilise une UserForm dans Excel qui permet à l'utilisateur de choisir quelles feuilles du classeur il veut copier dans quel document word ouvert. J'ai un Initialize() qui fonctionne :
Private Sub UserForm_Initialize()
    ' Déclarations
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Dim xlFeuil As Excel.Worksheet
    
    Set wdApp = GetObject(Class:="Word.Application")
    wdApp.Visible = True
    
    ' Remplissage de la ComboBox.
    Me.cbxChoixDocument.Clear
    ' ***manque un test de document ouvert ici
    If IsObject(wdApp) Then
        For Each wdDoc In wdApp.Documents
            Me.cbxChoixDocument.AddItem wdDoc.Name
        Next wdDoc
    Else
        MsgBox "Aucun document word ouvert. Ouvrez le document dans lequel vous souhaitez insérer les feuilles de mesure et placez le curseur à l'endroit désiré.", vbExclamation, "Pas de document word ouvert"
        Exit Sub
    End If
    
    ' Remplissage de la ListBox.
    For Each xlFeuil In ActiveWorkbook.Worksheets
        If xlFeuil.Name <> "Données oct" And xlFeuil.Name <> "Données tiers" And xlFeuil.Name <> "Infos générales" And xlFeuil.Visible Then
            Me.lbChoixFiches.AddItem xlFeuil.Name
        End If
    Next xlFeuil
    
    ' Mise en place du focue à l'ouverture du formulaire.
    Me.cbxChoixDocument.SetFocus
End Sub


Mon problème : le test pour vérifier qu'un document word est ouvert ne fonctionne pas : la fonction GetObject crée obligatoirement une instance de word, qui fait que le test IsObject est toujours vrai. Comment vérifier qu'il n'existe pas de document ouvert ?
Précision : j'ai remarqué que la ligne wdApp.Visible = True est obligatoire sinon la boucle de recherche des documents ne fonctionne pas, quelqu'un sait me dire pourquoi ?

Cordialement,

3 réponses

  1. Up,

    Quelqu'un a-t-il une idée pour au moins éviter une erreur si aucun document word n'est ouvert ? (c'est l'instruction GetObject qui renvoie alors une erreur)

    Cordialement,
    1. Contributeur
      Bonjour,

      Peut-être une piste: test Excel à adapter à Word en début de code
      je n'en suis pas l'auteur

      Function ClasseurEstOuvert(strNomFichierComplet As String) As Boolean 
        Set objExcel = New Excel.Application 
        With objExcel 
          ' L'instance d'Excel qui porte le fichier ne doit pas être visible 
          .Visible = False 
          .Workbooks.Open (strNomFichierComplet) 
          ' Si le classeur est déjà ouvert cette propriété sera à True 
          ClasseurEstOuvert = .Workbooks(1).ReadOnly 
          .Quit 
        End With 
         ' Ne pas oublier de supprimer la référence à Excel 
        ' sinon une autre instance fantôme hantera le système... 
        Set objExcel = Nothing 
       End Function

      Michel
      1. Merci, je vais tenter d'adapter, même si apparemment cette fonction nécessite un nom de fichier en entrée (que je n'ai évidemment pas si aucun document n'est ouvert).
        1. Contributeur
          c'est uniquement une piste! si tu te trouves, merci de me renvoyer l'ascenseur :o)