OVH Cloud OVH Cloud

Récupérer des données d'une macro d'un autre doc

19 réponses
Avatar
JièL Goubert
Salutatous

j'espère avoir tourné suffisamment mon clavier autour de mon ordinateur
avec de poser cette question...

La question est : comment récupérer des valeurs de certaines variables
d'une macro d'un autre document ?

c'est en fait une suite à ma question (stupide) de tout à l'heure. Ma
macro ouvre la boite de dialogue permettant de choisir un modèle de doc
Sub macro1()
Dialogs(wdDialogFileNew).Show

et dans le modèle choisi, se trouve une macro Document_News qui
renseigne des variables. Ex : Toto = "truc chose"

Je voudrais récupérer la valeur de Toto dans la macro1

Si c'est pas par une variable, je serais pas bégueule, j'accepte toute
solution qui me permettrait de récupérer les valeurs de l'autre macro

Merci bôcoup

NB : c'est du Word 2003

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

9 réponses

1 2
Avatar
Anacoluthe
Bonjour !

'Guy Moncomble' nous a écrit ...
Bien, mais ce programme a été chargé 795 fois et ... il ne se met pas à
jour lorsque le SMIC change et que le tableau des données a été modifié.
Pour cette application je n'ai reçu en tout et pour tout qu'un message
d'utilisateur et encore c'était pour me dire qu'il ne fonctionnait pas
du tout (sous Word97). A ton avis encourageant ou décourageant ?


Encourageant !! :-) )))) Certaines majors (pas de nom ici) vendent
très chers des logiciels beugués adonf sans que personne n'y trouve
rien à redire. Alors tu penses, déjà que le relèvement du smic
c'est pas tous les jours, tu laisses filer des fortunes... :-D

A+
A~

Avatar
JièL Goubert
Bonjoir© Guy Moncomble

Le 15/02/2006 08:27 vous avez écrit... :
Pour compléter ce que dit Geo à propos des propriétés, je les utilise
dans mon programme Fiche de paie pour assistantes maternelles


J'ai donc télécharger, mais bon, si tu pouvais me dire où est-ce que ça
se trouve dans les milliards de lignes de codes ;-p, ça m'avancerai pas
mal...

Mais quelqu'un regarde-t'il ces
macros pour voir ce que les autres font, j'en doute puisque dans ce même
programme subsiste une petite erreur sans grandes conséquences, mais
très visible. ]];((


Moi je n'arrive pas à la faire fonctionner :-s je suis "mot dit" ;-) ou
quoi ?
J'ai une erreur "Erreur de compilation, Projet ou Biblio introuvable" et
ça sur un simple "Ucase" (entre autre car je n'arrive pas non plus à
faire fonctionner le macro "EditeVarPerso" que je soupçonne de contenir
des choses que je voudrais comprendre : "Erreur d'exécution 5981 :
impossible d'ouvrir la macro de stockage" :-(

Il doit me manquer des références, mais lesquelles ???

Pour finir je crois que l'utilisation des propriété est plus simple et
plus efficace que les variables document, mais elles ont un défaut :
elles sont immédiatement visibles par n'importe qui.


Pas gênant dans mon cas

Dans les deux cas,
il faut être extrèmement attentif à la nature des variables : texte ou
numérique ... il y a des cas bizarres...


Ok, c'est noté

Merci Guy

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Avatar
JièL Goubert
Bonjoir(c) Anacoluthe

Oui docvariables et docproperties sont deux choses assez différentes.
Pour répondre à JièL sur une autre ficelle il faut toujours commencer
par tester l'existence d'une docvariable ou d'une docproperty avant
d'en créer une nouvelle : Word émet une erreur si elle est déjà
présente dans le document.


On les testes comment les docproperty steuplé ?
J'ai contourné le truc de façon beurk beurk en faisant un "on error
resume next", mais je ne trouve pas ça très zélégant

Merci

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr

Avatar
Geo

On les testes comment les docproperty steuplé ?
J'ai contourné le truc de façon beurk beurk en faisant un "on error resume next", mais
je ne trouve pas ça très zélégant


Ca se défend quand même.

Tu peux toujours faire une boucle sur les propriétés et traiter au plus
fin au cas par cas.

for i = 1 to TonDoc.BuiltInDocumentProperties.Count
select Case TonDoc.BuiltInDocumentProperties(i).name
Case "Nom1" ' à remplacer
TonDoc.BuiltInDocumentProperties(i).delete

Case Else
' Autre propriété
end case

next i
' Ajouter la propriété Nom1

et tant qu'on y et en fouillant dans le grenier, j'ai retrouvé de vieux
trucs :

Un nom de propriété peut être vide :
If Not IsNull(Doc.BuiltInDocumentProperties(j).name) Then

Idem pour la valeur, vide ou nulle
If Not IsNull(Doc.BuiltInDocumentProperties(j).Value) Then
If Not IsEmpty(Doc.BuiltInDocumentProperties(j).Value) Then

La valeur d'une propriété a bien un type :
Select Case Doc.BuiltInDocumentProperties(i).Type
Case msoPropertyTypeBoolean

Case msoPropertyTypeDate

Case msoPropertyTypeFloat

Case msoPropertyTypeNumber

Case msoPropertyTypeString

Case Else

End Select

--
A+

Avatar
Anacoluthe
Bonjour !

'JièL Goubert' nous a écrit ...
On les testes comment les docproperty steuplé ?
J'ai contourné le truc de façon beurk beurk en faisant un "on error
resume next", mais je ne trouve pas ça très zélégant


Pardon pour le retard ;-)

Il y a deux méthodes pour savoir si un item nommé existe déjà
dans une collection :

1) Comme a dit Geo parcourir toute la collection jusqu'à trouver
le Collection.Item.Name cherché. Si le nom n'est pas trouvé
c'est qu'il n'existe pas.

L'aide en donne un exemple pour une variable de document :
' ----------------------------------------------------------
For Each aVar In ActiveDocument.Variables
If aVar.Name = "Blue" Then num = aVar.Index
Next aVar
If num = 0 Then
ActiveDocument.Variables.Add Name:="Blue", Value:=6
Else
ActiveDocument.Variables(num).Value = 6
End If
' ----------------------------------------------------------


2) Faire une gestion d'erreur. C'est en fait plus rapide.
Si ça heurte ta sensibilité, tu peux arranger ça
proprement dans une fonction générale.

Voici un autre exemple pour une DocProperty cette fois :

' ----------------------------------------------------------
Public Function ItemExists(C As Object, I As Variant) As Boolean
' Teste si un item d'une collection existe
Dim O As Object
ItemExists = False
On Error GoTo NexistePas
Set O = C.Item(I)
ItemExists = True
NexistePas:
Set O = Nothing
End Function
' ----------------------------------------------------------
Public Sub NouvellePropriété()
P = InputBox("Nouvelle propriété ?")
If Not ItemExists(ActiveDocument.CustomDocumentProperties, P) Then
V = InputBox("valeur pour " & P & " ?", P)
ActiveDocument.CustomDocumentProperties.Add _
Name:=P, _
LinkToContent:úlse, _
Value:=V, _
Type:=msoPropertyTypeString
Else
MsgBox P & " existe déjà avec la valeur " & vbCr _
& ActiveDocument.CustomDocumentProperties(P).Value
End If
End Sub
' ----------------------------------------------------------

A+ :-)

Anacoluthe
« L'intérêt que j'ai à croire une chose
n'est pas une preuve de l'existence de cette chose. »
- VOLTAIRE

Avatar
JièL Goubert
Bonjoir(c) Anacoluthe

Le 25/02/2006 15:02 vous avez écrit ceci :
Bonjour !

'JièL Goubert' nous a écrit ...
On les testes comment les docproperty steuplé ?
J'ai contourné le truc de façon beurk beurk en faisant un "on error
resume next", mais je ne trouve pas ça très zélégant


Pardon pour le retard ;-)


no problémo, y'a pas le feu

Il y a deux méthodes pour savoir si un item nommé existe déjà
dans une collection :

1) Comme a dit Geo parcourir toute la collection jusqu'à trouver
le Collection.Item.Name cherché. Si le nom n'est pas trouvé
c'est qu'il n'existe pas.


OK, vu

2) Faire une gestion d'erreur. C'est en fait plus rapide.
Si ça heurte ta sensibilité, tu peux arranger ça
proprement dans une fonction générale.


Effectivement, le on error est nettement plus simple, je comprend ;-)

LinkToContent:úlse, _


J'ai pas compris le but de ceci. ça sert à quoi ce lien ?

« L'intérêt que j'ai à croire une chose
n'est pas une preuve de l'existence de cette chose. »
- VOLTAIRE


;-)
mis dans un autre contexte, c'est amusant :-)

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr/


Avatar
JièL Goubert
Bonjoir(c) Geo

Le 24/02/2006 13:50 vous avez écrit ceci :

On les testes comment les docproperty steuplé ?
J'ai contourné le truc de façon beurk beurk en faisant un "on error
resume next", mais je ne trouve pas ça très zélégant


Ca se défend quand même.


Oui, effectivement, finalement c'est plus simple

Un nom de propriété peut être vide :
If Not IsNull(Doc.BuiltInDocumentProperties(j).name) Then

Idem pour la valeur, vide ou nulle
If Not IsNull(Doc.BuiltInDocumentProperties(j).Value) Then
If Not IsEmpty(Doc.BuiltInDocumentProperties(j).Value) Then

La valeur d'une propriété a bien un type :
Select Case Doc.BuiltInDocumentProperties(i).Type
Case msoPropertyTypeBoolean

Case msoPropertyTypeDate

Case msoPropertyTypeFloat

Case msoPropertyTypeNumber

Case msoPropertyTypeString

Case Else

End Select


Je garde tout ça, je vais voir comment m'en servir.

Encore merci

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est la : http://faq.outlook.free.fr/


Avatar
Geo

Je garde tout ça, je vais voir comment m'en servir.


C'est pas obligé :-)

--
A+

Avatar
Anacoluthe
Bonjour !

'JièL Goubert' nous a écrit ...
LinkToContent:úlse, _
J'ai pas compris le but de ceci. ça sert à quoi ce lien ?



Tu peux définir une propriété de document
- Fichier / Propriété / Personnalisation
dont la valeur est /liée/ à un signet de ton document
Pratique non ?

Si tu écris LinkToContent:=True tu dois ajouter en LinkSource
le signet qui renseignera ta doc-propriété


« L'intérêt que j'ai à croire une chose
n'est pas une preuve de l'existence de cette chose. »
- VOLTAIRE


mis dans un autre contexte, c'est amusant :-)


Bon dimanche :-D

Anacoluthe
« L'esprit de propriété double la force de l'homme. »
- VOLTAIRE


1 2