IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Verifier qu'un fichier Word est ouvert à partir de VBA Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 22
    Points
    22
    Par défaut Verifier qu'un fichier Word est ouvert à partir de VBA Excel
    Bonjour à tous,

    Je vous ecris car je lance une macro à partir de VBA Excel, qui ouvre un fichier Word, et j'ai mis une condition pour verifier si ce fichier Word n'est pas déjà ouvert, mais cela ne marche pas tout le temps, jai souvent le message d'erreur suivant :
    Le serveur distant n'existe pas ou n'est pas disponible (erreur 462)
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set FichierWord = GetObject("D:\Fichier.doc")
     
    If FichierWord = ActiveDocument Then
        MsgBox "Le fichier Word de référence est ouvert, veuillez fermer le fichier Word pour que les données puissent être copié."
        Exit Sub
    End If
    Merci pour vos réponses

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Le code que tu nous mets ne peux pas fonctionner. Si tu ouvres un doc word depuis Excel, tu crées une instance de l'application et du document.
    Montre-nous le code que tu utilises pour lancer word et ouvrir le fichier, c'est lui qui nous intéresse

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set FichierWord = Nothing
    Set wrdapp = CreateObject("Word.Application")
    Set wrddoc = wrdapp.Documents.Open("D:\Fichier.doc")
    wrdapp.Visible = True
    Merci de ton aide!!!

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set wrdapp = CreateObject("Word.Application")
    DoEvents 'laisse le temps à l'application de s'ouvrir
    Set wrddoc = wrdapp.Documents.Open("D:\Fichier.doc")
    DoEvents 'laisse le temps au document de s'ouvrir
    wrdapp.Visible = True
    'If wrddoc is nothing then msgbox "le document D:\Fichier.doc est fermé ou n'existe pas."
    Pour ton test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set FichierWord = GetObject("D:\Fichier.doc")
     
    If FichierWord = wrdapp.ActiveDocument Then
        MsgBox "Le fichier Word de référence est ouvert, veuillez fermer le fichier Word pour que les données puissent être copié."
        Exit Sub
    End If
    Mais je ne suis pas certain d'avoir toutes les données

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci, mais cela ne fonctionne pas, l'ordre de mon programme est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub ExporterVersWord()
     
    Dim Titre As String, FichierWord, wrdapp, wrddoc
     
    Set FichierWord = GetObject("D:\Fichier.doc")
     
    If FichierWord = ActiveDocument Then
        MsgBox "Le fichier Word de référence est ouvert, veuillez fermer le fichier Word pour que les données puissent être copié."
        Exit Sub
    End If
     
     
    Set FichierWord = Nothing
    Set wrdapp = CreateObject("Word.Application")
    DoEvents
    Set wrddoc = wrdapp.Documents.Open("D:\Fichier.doc")
    DoEvents
    wrdapp.Visible = True
    If wrddoc Is Nothing Then MsgBox "le document D:\Fichier.doc est fermé ou n'existe pas."
    End Sub

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    C'est tout de suite mieux quand on a tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub ExporterVersWord()
    Dim Titre As String, FichierWord as object, wrdapp, wrddoc
        On Error Resume Next
        Set FichierWord = GetObject("D:\Fichier.doc")
        If Not FichierWord Is Nothing Then
            MsgBox "Le fichier Word de référence est ouvert, veuillez fermer le fichier Word pour que les données puissent être copié."
            On Error GoTo 0
            Exit Sub
        End If
        'La suite

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci pour tout le temps que tu m'as accordé mais malheureusement ca ne fonctionne toujours pas, en effet si le document n'est pas ouvert, le message indiquant que le fichier Word est ouvert apparait quand même.
    En fait il rentre toujours dans la condition di If not

    Non ca fonctionne toujours pas!!!!

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Curieux, chez moi, ça a fonctionné une fois mais ça ne fonctionne plus

    Edit
    Regarde la FAQ Excel, la syntaxe t'est donnée par SilkyRoad à la rubrique "Comment vérifier si un document Word est déjà ouvert ?"

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    C'est pareil chez moi, mon programme de départ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set FichierWord = GetObject("D:\Fichier.doc")
    If FichierWord = ActiveDocument Then
        MsgBox "Le fichier Word de référence est ouvert, veuillez fermer le fichier Word pour que les données puissent être copié."
        Exit Sub
    End If
     
     
    Set FichierWord = Nothing
    Set wrdapp = CreateObject("Word.Application")
    Set wrddoc = wrdapp.Documents.Open("D:\Fichier.doc")
    wrdapp.Visible = True
    marchait des fois et d'autres fois pas.

    En fait le problème provient de l'erreur 462 (Le serveur distant n'existe pas ou n'est pas disponible ) qui apparait que certaines fois.

    Du coup, j'avais modifié ma boucle if en rajoutant une condition de comptage des document word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Documents.Count >= 1 Then
    Else
    If FichierWord = ActiveDocument Then
        MsgBox "Le fichier Word de référence est ouvert, veuillez fermer le fichier Word pour que les données puissent être copié."
        Exit Sub
    End If
    End If
    ouvert et la j'ai eu l'erreur 4248 qui est apparu (commande indisponible : auncun document n'est ouvert)

  10. #10
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272
    Par défaut
    Salut, peut-être faire un ChDrive "D" qqpart ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    le programme de la faq ne marche chez moi il indique tjrs que le fichier est fermé

    bon ben tant merci pour ton aide et tout le tps que tu mas accordé


    C'est quoi Chdrive??

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Sert à définir le lecteur mais j'ignore quelle incidence cela peut avoir avec le code.
    Curieux, ton histoire tout de même, chez moi il me dit qu'il est ouvert quoi qu'il arrive
    Doit rester une instance ouverte...
    Non, ce n'est pas ça, aucune instance de Word auverte
    Dès que j'ai un moment je refais mes tests mais là, je suis occupé "ailleurs"
    Bonne soirée

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Je suis en train d'essayer d'utiliser cette procédure et bien sur comme dimitrios il m'indique que le fichier est ouvert même quand il est fermé.
    Ousk, tu marques dans ton dernier message que tu vas faire des tests sur ce codes, les as tu fait? Des retours sur cette procédure?

    Merci d'avance
    Séraphin

  14. #14
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    et ainsi ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
    Private Declare Function lClose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
    Private Function dejaouvert(FileName As String) As Boolean
        Dim lfic As Long, erreur As Long
        lfic = -1: erreur = 0
        lfic = lOpen(FileName, &H10)
        If lfic = -1 Then
            erreur = Err.LastDllError
        Else
            lClose (lfic)
        End If
        dejaouvert = (lfic = -1) And (erreur = 32)
    End Function
     
    Private Sub Command1_Click()
      MsgBox dejaouvert("d:\fichier.doc")
    End Sub

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour le bout de code,
    mais après essaie j'ai le même problème qu'avec la procédure du dessus.
    Le fichier est toujours considérer comme ouvert.

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Je crois me souvenir que j'ai déjà eu ce genre de problème pour des histoires d'instanciation ou de tableau dynamique dans mes modules de classe.

    Regarde déjà à quelle ligne ça plante. Ensuite, dis-toi que bien souvent ce problème est certes provoqué par la ligne en cause, mais qu'en réalité la cause profonde est très souvent dûe à un problème de référence situé en amont.

    Donc n'hésite pas à regarder déjà toutes les variables en cause dans la ligne en cours, et vérifie que tu n'as pas déjà des valeurs anormales pour d'éventuelles autres variables en amont.

    Je ne me souviens plus très bien (ça doit remonter à il y a 2 mois), mais la dernière fois je crois que c'est dû à un passage d'objet inexistant (Nothing ou erreur je sais plus), qui à terme a fini par faire planter le programme plus loin.

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Après redémarrage de mon PC pour voir si cela pouvait supprimer mon problème de document toujours ouverts.
    Et bien ma procédure fonctionne.
    Merci decondelite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Savoir si un fichier word est ouvert
    Par enchanté dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/01/2008, 10h54
  2. Réponses: 20
    Dernier message: 11/12/2007, 17h34
  3. Réponses: 2
    Dernier message: 31/10/2007, 10h30
  4. Savoir si un fichier texte est ouvert ?
    Par devl83 dans le forum Administration système
    Réponses: 4
    Dernier message: 22/05/2007, 17h00
  5. Tester si un fichier X est ouvert
    Par James64 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/10/2004, 15h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo