Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/03/2007, 14h56   #1
Futur Membre du Club
 
Inscription : février 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 50
Points : 16
Points : 16
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 :
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.
Cram_N7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 15h08   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
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 - ?
...
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 15h23   #3
Futur Membre du Club
 
Inscription : février 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 50
Points : 16
Points : 16
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 !
Cram_N7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 16h30   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
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 :
Application.Run "'LeFichierAmacro.xls'!NomDeLaLaMacro"
Pour exécuter une macro avec paramètres :
Code :
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
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 16h56   #5
Futur Membre du Club
 
Inscription : février 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 50
Points : 16
Points : 16
bon j' ai testé :
Code :
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.
Cram_N7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 17h22   #6
Futur Membre du Club
 
Inscription : février 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 50
Points : 16
Points : 16
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
Cram_N7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 17h26   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Pour passer des paramètres, tu dois respecter la syntaxe que dadavyvy a eu la gentillesse de m'indiquer, hier, et placer tes paramètres dans des variables. Faut s'y plier, sans quoi, on est puni


PS - Je garde ça dans un coin
Citation:
Bon, alors tu vas le mettre ce si c'est résolu ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 17h30   #8
Futur Membre du Club
 
Inscription : février 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 50
Points : 16
Points : 16
bon okok, je mets le tag, je vais chercher dans mon coin et reposerai une question si nécessaire
En tout cas merci pour ton aide
Cram_N7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 17h33   #9
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Pourquoi ? Ça ne fonctionne toujours pas ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 17h37   #10
Futur Membre du Club
 
Inscription : février 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 50
Points : 16
Points : 16
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
Cram_N7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 17h55   #11
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
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 :
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 :
1
2
3
Sub NomMacro(maVar As Integer)
    MsgBox maVar * 3
End Sub


michel
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h43.


 
 
 
 
Partenaires

Hébergement Web