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

VBA Word Discussion :

[VBA-W] Appeler une fonction privée d' un document Word


Sujet :

VBA Word

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut [VBA-W] Appeler une fonction privée d' un document Word
    Bonjour ,
    j' ai créé un document Word dans le quel existe une fonction privée (module NewMacros, function ecrire_date() ).

    Je cherche à appeler cette fonction depuis une autre fonction, elle commune à tous les documents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function ecrire_param()
    Dim dossier As Word.Document
     
        Application.Visible = True
     
        Set dossier = Documents.Open("C:\\Marc\\documents word\\test\\Dossier de candidature TLSE_signets.doc")
        dossier.ecrire_date
        ActiveDocument.Close
     
    End Function
    j' ai l' "erreur d' exécution '438' Propriété ou méthode non gérée par cet objet." à l' appel de ecrire_date.

    Comme je suis débutant en VBA, je confond les objets, les documents, etc... je pense qu' il faut inclure/importer quelque chose, mais je ne sais pas quoi faire.
    Pouvez-vous m' aider svp ?
    Merci d' avance.

  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
    Par défaut
    Désolé mais je ne comprends pas ton code. Le mieux serait que tu nous dises point par point et dans l'ordre chronologique ce que tu veux faire
    1 - ?
    2 - ?
    3 - ?
    ...

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    ok je vais en dire un peu plus

    la fonction ecrire_param est définie pour tous les documents Word (normal.dot). Je l' appelle depuis c++ (automation), après avoir lancé word avec une autre fonction, et ça marche.
    Je voudrais, depuis la fonction ecrire_param, ouvrir le document "Dossier de candidature TLSE_signets.doc", ça marche correctement.
    Ensuite, appeler la fonction "ecrire_date" de ce document (c' est une macro que j' ai enregistrée pour ce document) et c' est là que j' ai mon erreur, et que je définisse ecrire_date comme sub ou function ne change rien, j' ai l' erreur ci-dessus.

    J' espère avoir été assez clair
    En tout cas merci pour la rapidité de cette première réponse !

  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
    Par défaut
    Donc, depuis un fichier donné, tu souhaites lancer une procédure placée dans un autre fichier, avec ou sans paramètre... Si c'est bien ça, alors, j'ai eu à le faire hier.
    Pour exécuter une macro sans paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'LeFichierAmacro.xls'!NomDeLaLaMacro"
    Pour exécuter une macro avec paramètres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Chemin As String, NomFich As String, NomComplet
        Chemin = "D:\xls\"
        NomFich = "monfichier.xls"
        NomComplet = "'LeFichierAmacro.xls'!NomDeLaLaMacro"
        Application.Run NomComplet, Chemin, NomFich
    Pour les fonctions, tu as un exemple dans l'aide en ligne à Application.run

  5. #5
    Membre averti
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    bon j' ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "'C:\\Marc\\documents word\\test\\Dossier de candidature TLSE_signets.doc'!ecrire_date"
    Et ça marche
    Je sais pas trop comment faire avec une fonction, par l' aide en ligne tu entends le fichier VBAWRD9.CHM que j' ai dans mon répertoire microsoft office ? Si oui je n' ai pas trouvé l' équivalent avec une fonction. Sinon je ne sais pas de quoi tu parles.

    Mais bon puisque j' arrive à le faire avec une sub, et que je n' ai pas besoin de valeur de retour, considérons le problème comme résolu

    Merci beaucoup !


    EDIT désolé d' enlever le tag résolu que j' avais mis mais j' ai une question supplémentaire de syntaxe : comment appeler la sub avec un/des arguments ?
    sub ecrire_date (param As String) ...
    Je n' arrive pas à trouver de syntaxe qui convienne.

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    lol désolé, je ne sais pas trop comment fonctionne le forum
    Je peux mettre le tag résolu et reposter avec mon nouveau problème (presque le même), ou alors continuer ce thread.
    Je continue à chercher, j' ai essayé avec :

    Application.Run macroname:="'C:\\Marc\\documents word\\test\\Dossier de candidature TLSE_signets.doc'!ecrire_date", varg1:="azer"

    et function ecrire_date(param As Variant)

    mais ça ne marche pas

  7. #7
    Membre averti
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    non Tu pourrais me donner le lien vers ce post de dadavyvy s' il te plaît ?

    EDIT c' est bon j' ai trouvé tout seul
    Merci dadavyvy alors :p

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    pour passer un paramètre dans la macro d'un autre document Word, la macro de destination doit être placée au niveau du module objet ThisDocument

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'procédure dans le premier document
    Sub essai()
        Dim monParametreVB As Integer
     
        monParametreVB = 3
        Documents("NomDocument.doc").NomMacro (monParametreVB)
    End Sub


    Procédure dans le deuxieme document (NomDocument.doc), à placer dans le module ThisDocument:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub NomMacro(maVar As Integer)
        MsgBox maVar * 3
    End Sub


    michel

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/04/2011, 09h52
  2. Réponses: 5
    Dernier message: 06/04/2011, 10h02
  3. [XL-2007] Appeler Une fonction VBa Dans Excel
    Par stevekho dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/08/2010, 14h06
  4. Réponses: 3
    Dernier message: 17/04/2007, 16h55
  5. [VBA-E] Appel de fonction/procédure depuis une variable
    Par truman dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/05/2006, 16h20

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