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 20/08/2007, 19h58   #1
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Par défaut Exécution de procédures

Bonjour,
Dans un modèle, j'ai une procédure exécutée à la création d'un nouveau document qui ouvre un autre document (en l'occurence un modèle) et exécute une procédure d'un module défini dans ce dernier document. Le but cherché (sic...) est de faire de l'héritage de modèle et d'y inclure bookmark, champs, etc...

J'utilise pour ce faire les vbcomponents afin de référencer correctement le module et la fonction "callbyname" pour exécuter la procédure.

A l'exécution, l'interpréteur me dit que le code n'existe pas.

Une idée pour me dépanner?
Merci d'avance et cordiales salutations
OW
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 20h40   #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
Ta ligne de code, peut-être ? Juste pour qu'on voit
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2007, 20h55   #3
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Salut,

je poste un bout de code dès demain matin, du bureau...
Merci en tous cas de ton intérêt et de ton aide.
Bonne soirée.
OW
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 07h46   #4
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Voilà le bout de code en question:

Code :
1
2
3
4
5
6
Dim lUF As Object
For Each lUF In lCurrentDoc.VBProject.VBComponents
  If lUF.Name = "Module1" Then
    CallByName lUF, "initModule", VbMethod
  End If
Next lUF
et initModule est définie dans Module1 comme

Code :
1
2
3
Public Sub initModule()
 
End Sub
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 11h36   #5
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
Est-tu certain de l'utilisation que tu fais de CallByName ?
Si tu veux exécuter une macro placée dans un modèle, fais un test avec Application.run. Regarde dans l'aide.
Pour une macro nommée Aperçu, placée dans le module NewMacro1, dans le fichier Normal.dot, ces deux syntaxes fonctionnent
Code :
1
2
3
4
5
6
Dim LaMacro, LeProjet, LeModule
    LeProjet = "Normal"
    LeModule = "NewMacros1"
    LaMacro = "aperçu"
    Application.Run MacroName:=LeProjet & "." & LeModule & "." & LaMacro
    Call Normal.NewMacros1.aperçu
A toutes fins utiles...
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 16h25   #6
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Salut Ouskel'n'or et merci.

La solution avec Application.run fonctionne en prenant garde de référencer correctement le projet...Des fois, je m'en veux!

Pour continuer la discussion, je ne parviens pas à passer des paramètres à la méthode appelée:

Voici l'appel:
Code :
1
2
3
 
lParam = "test"
Application.Run "CourrierS.Module1.test", lParam
et la déclaration de la procédure:

Code :
1
2
3
4
 
Public Sub test(pParam as String)
'do something
end Sub
Question annexe: Peut-on passer des variables par référence, du type 'Scripting.Dictionary'?

Merci encore de ton aide.
OW
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 23h05   #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
Je ne sais pas si ça va t'aider mais j'ai lu ça, tu peux toujours y jeter un oeil mais je ne sais pas si j'ai bien compris ta question.
Pour les paramètres, je ne l'ai jamais fait dans Word. Tu as regardé dans l'aide, à run ?
A+

Edit
Si c'est pour activer une référence, regarde à Addins dans l'aide, je ne pourrais pas te l'expliquer mieux.

Bref, je n'ai pas compris

Edit2
Si, j'ai finalement compris mais là je ne sais pas.
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 07h46   #8
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Salut,

merci de ta réponse.
Effectivement, le lien que tu me conseilles ne correspond pas exactement à ce que je cherche. A mon avis, le problème n'est pas précisément lié à Word mais à VB.
Dans le principe, j'essaie d'appeler une procédure ayant des paramètres déclarés par référence.
Code :
public Sub test(ByRef param1 as String)...
Cette procédure se trouve dans un module d'un projet différent du module du projet depuis lequel je fais l'appel. C'est la raison pour laquelle je dois passer par la fonction "Application.run".
En dehors de cette question, même le passage par valeur ne fonctionne pas.
Peut-être s'agit-il de l'appel lui-même qui est faux
Code :
Application.run "Project1.Module1.test", "toto"
puisque j'obtiens le message d'erreur "Propriété ou méthode non gérée par cet objet".
Une idée? Bonne journée.
OW
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 09h41   #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
As-tu essayé
Code :
1
2
3
Application.run "Project1.Module1.test, toto"
'ou
Application.run "Project1.Module1.test toto"
Toto étant une variable
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 14h03   #10
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Essais non transformés...Est-ce que cela fonctionne chez toi?
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2007, 15h52   #11
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
Non, je n'ai pas testé. C'était à tout hasard puisque tu avais testé les autres syntaxes
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2007, 15h06   #12
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Voilà, voilà...que de sueur!

La solution réside en effet dans les addins sur lesquels j'étais passé trop vite et dont je n'avais pas bien compris l'utilité.

Merci à toi ouskel'n'or et à charge de revanche
Cordialement,
OW
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2007, 10h43   #13
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
Si tu pouvais indiquer quelle macro complémentaire a résolu le pb, ce serait tout à fait parfait
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2007, 17h04   #14
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Salut le monde en général, salut Ousk' en particulier,

je m'étais sans doute emballé un peu...
Après avoir creusé la chose, je constate que:
- Les addins répondent bien au problème d'importer des méthodes dans un code VB existant et par conséquent de pouvoir appeler ce code en y passant des variables;
- Les addins n'autorisent pas la définition de bookmarks, styles, etc... éléments que je suis sensé devoir importer dans le document appelant.

En conclusion, retour à la case départ...

J'ai maintenant revisé mes ambitions à la baisse et vais simplement depuis mon document de base:

- ouvrir une template (voir post dans word) et insérer dans le code de la sub document_new, l'appel à la première UserForm en vue de compléter les champs de la couche active;
- copier la couche dans le document parent;

ça enlève passablement de possibilité et de réutilisabilité mais je m'en contenterai.

Suis volontiers à dispo pour discuter de ce projet qui, à mon avis, à un certain intérêt.

Merci, Ousk, de ton aide et au plaisir de te lire.

OW
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2007, 09h47   #15
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
Hello owsion,
Ton problème sortant des sentiers battus, il m'intéresse. Ce serait dommage d'en rester là...
J'ai donc eu une idée. Puisque tu cherches à exécuter une macro dans word depuis ton code, qu'on ne peut lancer une macro que si ton document est ouvert, je pense que tu as créé une instance sous word. Auquel cas, une variable crée dans Word peut parfaitement prendre la valeur d'une variable crée dans l'appli qui lance la macro.
Avant que je me lance dans le code (que tu as certainement en magasin - instanciation, ouverture du fichier, etc.) cette solution te conviendrait-elle ?
J'ai fait ça dans Excel, si le coeur t'en dit...
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2007, 10h14   #16
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Salut Ousk,

merci bcp de ton intérêt à mon problème.
Je me permets de te décrire de façon je l'espère complète, la situation:

Contexte:
=======
Je travaille dans une entreprise qui a la fâcheuse tendance à changer de charte graphique assez fréquemment, notamment pour ce qui concerne les entêtes, pieds de pages, styles, etc... Constatant l'impossibilité de mettre à jour en bloc les modèles issus d'un même modèle de base (ce qu'on aurait peut-être pu attendre de Word...), l'idée me vint de découper les documents Word en couche dont l'une devant contenir les styles.

Application:
========
Un modèle de base a pour charge de, sur la base d'un fichier de configuration décrivant les couches à importer, de:
- Mettre à jour les styles définis dans le document de style adhoc;
- Importer chaque couche dans le document final.

Pour corser le sujet, les couches contiennent des signets et des variables de document. Les variables de doc sont mises à jour depuis le fichier de config alors que l'idée était, dans le doc de base, de générer un masque de saisie pour les signets. Note: J'ai tenté par ce biais de limiter au maximum les possibilités laissées à l'utilisateur final de modifier la forme des documents, chacun y allant de sa petite cuisine perso...

Je suis surpris que personne n'aie jamais été confronté à ce problème et attend donc avec impatience tout aide que tu voudras bien me fournir.

Merci d'avance et à bientôt.

OW
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2007, 10h41   #17
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
Citation:
Envoyé par owsion
Je suis surpris que personne n'aie jamais été confronté à ce problème
Ne crois pas ça...
De mon point de vue à moi, et pour avoir été confronté à la dure réalité de gérer une charte de présentation des documents, la solution consistant à limiter les possibilités de Word aux utilisateurs n'est pas la bonne solution.
Nous avons (à peu près) résolu le pb sur plus de cinq-cents postes en définissant pour word les répertoires des modèles des utilisateurs sur serveur. Chaque utilisateur ayant son propre répertoire, les besoins n'étant pas les mêmes selon les services.
Ceci fait, une mise à jour périodique de ces modèles et une note de service "imposant" la charte, ont vite découragé les utilisateurs de modifier les modèles.
Le seul pb est alors d'empêcher les utilisateurs d'enregistrer les modifs dans les modèles.
Cette solution n'empêche pas celui qui connaît de modifier les répertoires par défaut, mais j'ai toujours considéré que "ce petit malin", s'il sait faire ça, saura de toute façon blouser le système aussi élaboré soit-il puisqu'il est clair qu'il en a la volonté et du temps à perdre.
Par contre, un utilisateur qui ne peut utiliser une fonctionnalité de Word alors qu'il la connaît, et l'a déjà utilisée chez lui, se sent brimé. Et ça je le comprends. Nous avions tenté l'expérience mais il n'a pas fallu six mois pour faire marche arrière devant les plaintes de la plupart des services.
Ceci dit, je ne connais pas le contexte... C'est donc toi qui vois.

Bon... pour la dernière solution que je t'ai proposée, faut oublier, elle ne répondait pas à ton "cahier des charges"
A+

Edit
J'allais oublier : Bon courage
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2007, 12h55   #18
Invité régulier
 
Inscription : octobre 2005
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 40
Points : 6
Points : 6
Re Ousk,

j'approuve la quasi totalité de tes commentaires: ça m'étonnerait assez peu que nous ayons le même type de boulot!
Un seul point que j'aimerais compléter:
- Les utilisateurs sont, pour la plupart, peu voire très peu expérimentés. Ils ignorent bien souvent la différence entre un modèle et un document. Pour preuve, le copier-coller est la pratique la plus courante, avec les risques d'erreur que cela représente: oubli de modifier un élément, écrasement du document source, etc...S'agissant de document légaux, ce genre d'erreur est inadmissible et peut impliquer des conséquences graves. Heureusement (ou en conséquence...), le chef relit tout.
- Comme tu le dis justement, rien ni personne n'empêchera le petit malin de sortir du chemin tracé. Toutefois, la mise en place de pareils outils (visant à simplifier le travail de la majorité) permet d'exiger une certaine rigueur. J'ai, je dois dire, l'avantage de travailler pour une société relativement 'militaire' et hiérarchisée où les moyens de pression sont encore possibles.
Voilà, je te tiendrai au courant de la mise en application. Je n'y joue, par chance, pas ma tête

Avec mes cordiales salutations helvétiques.
OW
owsion est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web