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 :

Erreur 5941 à l'affectation d'une variable Word.application [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable du patrimoine
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable du patrimoine
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Par défaut Erreur 5941 à l'affectation d'une variable Word.application
    Bonjour, et une très bonne année pleine de (bons) développements pour tous,

    J'ai 2 méthodes très similaires dans Excel qui me lance (une oui mais l'autre me retourne l'erreur 5941) l'application Word après avoir affecté un certain nombre de variables que je réaffecte après le lancement de Word à des bookmarks.
    Du style :
    Sub Creat_BdC_MOE() 'création des bons de commande MOE

    déclaration de mes variables et notamment celles qui suivent...
    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
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    ...
    Affectation de mes variables
    ...
    ouverture de Word
    Set WordApp = CreateObject("word.application")' Et c'est la que ca plante pour une des 2 méthodes seulement
    Set WordDoc = WordApp.Documents.Open(NomDoc, ReadOnly:=True)
     
    WordApp.Visible = False
     
    Affectation des bookmarks 
    WordDoc.Bookmarks("Num_BdC").Range.Text = vNumBdC
    ...
     
    WordApp.Visible = True
    WordApp.Activate 
     
    End Sub
    Comme je l'ai dis en commentaire après Set WordApp, sur les 2 méthodes, une fonctionne parfaitement, mais l'autre me renvoie l'erreur 5941.
    Les seules différences qu'il y a entre les 2 méthodes, sont juste au niveau des variables qui changent et des noms des bookmarks qui sont différents.
    Je ne comprends pas cette erreur qui se produit seulement sur une méthode et pas l'autre.
    Si quelqu'un à une idée... je suis, au combien preneur.
    Merci pour l'aide précieuse de la collectivité.
    jppouma.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Comme tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set WordApp = CreateObject("word.application")
    Inutile de créer une référence à Word et tu peux déclarer tes variables WordApp et WordDoc As Object

    Je ne sais pas si ça va régler ton problème, par contre...

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par parmi Voir le message
    Bonjour,

    Inutile de créer une référence à Word et tu peux déclarer tes variables WordApp et WordDoc As Object
    Je dirais oui dans l'absolu, mais c'est moins tranché en pratique. En cochant manuellement la référence à Word dans la boîte de dialogue correspondante, cela donne accès à l'aide et à l'IntelliSense de VBA Word, directement dans VBA Excel, et aussi dans l'Explorateur d'objets. Et l'inverse est également vrai. (Du moins jusqu'à Office 2010.) Par contre, cela ne marche pas avec PowerPoint. Je n'ai pas essayé avec les autres applications d'Office

  4. #4
    Membre averti
    Homme Profil pro
    Responsable du patrimoine
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable du patrimoine
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Par défaut
    Bonjour et merci à tous pour vos réponses (même si certaines sont assez peu constructives, j'y reviendrai ),
    Pour répondre à Menhir, j'avais revérifié à plusieurs reprises mon chemin et le nom de mon fichier. J'ai fait une "fixette" à cet endroit et mon problème venait d'un bookmarks dont le nom sur mon document word et dans ma macro était différent.
    Donc problème résolu.

    Cela dit, sur les réponses "très constructives" et qui font bien avancer les choses, effectivement j'ai fais un applicatif qui contient plusieurs milliers de lignes de code que j'ai copier/coller, comme ça un peu au hasard, j'ai mis tout ça dans un shaker, bien secoué, et au miracle... CA MARCHE !!!
    Plus sérieusement, lorsque j'écris du code, j'essaie de comprendre ce que j'écris même si parfois c'est la prise de tête. Et je ne me considère pas, et loin de là, comme un Pro en VBA. Mais je test toutes mes macros (ou procédures ou méthodes... pour moi ce sont termes qui définissent tous la même chose) afin de m'assurer qu'il n'y aie pas (ou pas trop) de bogues.
    Voilà, à bon entendeur...

    Merci à la communauté pour votre aide.
    jppouma.

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    et mon problème venait d'un bookmarks
    Voilà qui conforte assez ce que je rappelle fréquemment : l'important, en matière de "pilotage", est la connaissance PARFAITE de ce que l'on pilote.
    Et voilà pourquoi j'ai personnellement l'habitude de répondre dans ces cas-là ceci : sais-tu traiter sans faille la chose, directement depuis l'application pilotée (donc hors pilotage) ? Si tel n'est pas le cas -->> sujet à traiter d'abord dans la section de ce forum qui concerne l'application pilotée. L'application qui "pilote" n'est quant à elle là que pour créer les objets nécessaires au pilotage.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jppouma Voir le message
    mon problème venait d'un bookmarks dont le nom sur mon document word et dans ma macro était différent.
    Ce qui signifie que le problème ne se situait absolument pas là où tu l'avais signalé...
    C'est sûr qu'on ne risquait pas de le trouver...
    Merci d'avoir fait perdre du temps inutilement.

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    En tout cas, une macro dans Excel pour ouvrir un document Word, c'est loin d'être l'idée du siècle. D'autant plus que le collage avec liaison, les champs base de données de Word, ou même le publipostage, permettent de récupérer le plus simplement du monde des informations dans Excel, directement à partir de Word. Mais pourquoi faire simple quand on peut faire compliqué ?

    Jusqu'à preuve du contraire, c'est le signe d'une grande méconnaissance de Word. Mais, comme c'est plus facile de cliquer sur des pouces que d'expliquer la véritable problématique il ne sortira rien de positif de ton passage.

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jppouma Voir le message
    sur les 2 méthodes, une fonctionne parfaitement, mais l'autre me renvoie l'erreur 5941.
    Je ne vois pas ce que tu appelles "les 2 méthodes".
    Quel est le texte de l'erreur ?

    Essaye de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set WordApp = CreateObject("word.application")
    Set WordDoc = WordApp.Documents.Open(NomDoc, ReadOnly:=True)
    Par un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set WordDoc = GetObject(NomDoc)
    (du coup, WordApp devient inutile)

  9. #9
    Membre averti
    Homme Profil pro
    Responsable du patrimoine
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable du patrimoine
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Par défaut
    Merci à parmi et Menhi pour vos réponses.
    A Menhir :
    J'entends par méthode des procédures ou si tu veux des macros.
    Pour l'erreur j'ai juste le N° de l'erreur. Dans ma gestion des erreurs dans cette macro je ne retourne que le N° de l'erreur. C'est peut-être un tort !!! Je vais essayer d'en savoir plus...
    Je vais essayer ton code.
    Je fais un retour dès que j'ai fait l'essai.
    Merci encore.

  10. #10
    Membre averti
    Homme Profil pro
    Responsable du patrimoine
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable du patrimoine
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Par défaut
    Pour Menhir,
    Le texte de l'erreur est : Le membre de la collection requis n'existe pas.
    Pour le coup... ça ne m'avance pas vraiment.

  11. #11
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jppouma Voir le message
    J'entends par méthode des procédures ou si tu veux des macros.
    Quelle est la différence entre les deux ?

    Pour l'erreur j'ai juste le N° de l'erreur. Dans ma gestion des erreurs dans cette macro je ne retourne que le N° de l'erreur. C'est peut-être un tort !!!
    Ce qui est un tord, c'est de mettre des On Error dans ton code alors que tu es en phase de débugage.
    C'est comme faire du débugage les yeux bandés.

    Et, même en mode d'exécution normale, c'est un tord d'appliquer des On Error sur une vaste portion de code.
    Quand on utilise ces cochonneries, on ne le fait que sur une portion très ciblé du code (au mieux une seule ligne) en les virant juste après avec un On Error Goto 0.

    La plupart du temps, ça ne fait que masquer les problèmes sans les résoudre et, surtout, ça handicape énormément dans l'analyse et l'élimination du problème.

    Citation Envoyé par jppouma Voir le message
    Le texte de l'erreur est : Le membre de la collection requis n'existe pas.
    Pour le coup... ça ne m'avance pas vraiment.
    Je ne suis pas de ton avis.
    Perso, je parirais bien une pièce sur un problème de nom de fichier : une faute d'orthographe, une extension qui manque, un chemin erroné ou un autre truc du genre.
    Essaye de faire dans Word une mini-macro avec la ligne suivante, précédée bien sûr du code qui renseigne NomDoc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Documents.Open(NomDoc, ReadOnly:=True)
    Dans ton code Excel, essaye de mettre un point d'arrêt juste avant la ligne qui bugue.
    Lance l'exécution et quand ça stoppe, regarde le contenu de WordApp et de NomDoc dans la liste des variables locales.

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Commence par montrer explicitement tes deux méthodes. Au moins, cela va faire cela de moins pour la boule de cristal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Documents.Open(NomDoc, ReadOnly:=True)
    Déjà que des versions de VBA prennent peur quand elles voient passer des paramètres nommés et des noms de constantes à la place des valeurs numériques dans les appels automation; là tu exagères. Tu veux ouvrir en lecture seule un document que tu ouvres et que tu traites, alors qu'il reste caché.

    À moins de vouloir être sûr de courir après le trouble et que tu tiennes mordicus à mettre toi-même, et dans ton propre code, des instructions pour modifier un document que personne ne peut voir à l'écran; c'est juste comme de passer la tondeuse sur un gazon que tu as tondu dix minutes plus tôt. Ça sent le code copié-collé utilisé sans savoir ce que tu fais réellement.

    Et puis, avoir des applications cachées en mode conception et/ou débogage, c'est complètement dément. Cela empêche de vérifier le résultat d'une instruction dans le document au moment où elle est exécutée.

    Tiens. tiens, tiens. Il y en a un qui qui n'est pas content.

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

Discussions similaires

  1. [WD18] Erreur d'affectation sur une variable numérique.
    Par PointCarreJo dans le forum WinDev
    Réponses: 3
    Dernier message: 06/10/2014, 17h19
  2. [Smarty] Affectation d'une variable dans le template
    Par wkd dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 05/10/2006, 11h56
  3. erreur d'affectation d'une variable
    Par Myth_Titans dans le forum C++
    Réponses: 3
    Dernier message: 05/07/2006, 21h51
  4. Affectation d'une variable dans un état
    Par tamerlan dans le forum Access
    Réponses: 26
    Dernier message: 04/04/2006, 09h09
  5. [DEBOGUEUR] tracer l'affectation d'une variable
    Par mimil dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 15/03/2006, 17h08

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