[xl2010][VBA] test document word ouvert

bj51 -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
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,
A voir également:

3 réponses

bj51
 
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,
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
0
bj51
 
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).
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
c'est uniquement une piste! si tu te trouves, merci de me renvoyer l'ascenseur :o)
0