OVH Cloud OVH Cloud

Variable globale perdue après un AddOLEControl

7 réponses
Avatar
Alain
Bonjour à toutes et à tous.
Merci de bien vouloir jeter un coup d'oeil sur le petit problème suivant.
J'ai l'impression que c'est un bug de Word (je travaille avec Word 2003).

J'ai 3 boutons:
- un qui initialise une variable globale (une string);
- un qui ajoute "X" à ma variable globale et qui fait un AddOLEControl;
- un qui affiche la valeur actuelle de ma variable global.

Voici le code:

>Public v As String
>Sub initialise_Click()
> v = ""
>End Sub
>Sub affichage_Click()
> MsgBox "v=" & v
>End Sub
>Sub ajout_click()
> v = v & "X"
> Selection.InlineShapes.AddOLEControl ClassType:="Forms.TextBox.1"
>End Sub

Si je clique sur mes 3 boutons: initialise/ajout/affichage, ma variable
globale est vide alors qu'elle devrait contenir "X".
Si je supprime le AddOLEControl et que je clique sur mes 3 boutons, v
contient bien "X".

Qu'en pensez-vous?

Alain.

7 réponses

Avatar
Anacoluthe
Bonjour !

'Alain' nous a écrit ...
Si je clique sur mes 3 boutons: initialise/ajout/affichage, ma variable
globale est vide alors qu'elle devrait contenir "X".
Si je supprime le AddOLEControl et que je clique sur mes 3 boutons, v
contient bien "X".
Qu'en pensez-vous?


Vous ajoutez un ActiveX dans le projet donc le projet vba
est réinitialisé. Finalement ça semble assez normal.
Placez votre compteur public de contrôles en un lieu privé
hors-projet (le document par exemple).

Anacoluthe
« Dictature : un régime où l'opinion publique
ne peut s'exprimer qu'en privé. »
- Walter WINCHELL

Avatar
Alain
Merci pour votre réponse.
Malheureusement, j'ai trop peu de connaissance de l'environnement VBA pour
comprendre ce que vous m'expliquez.
Initialement, ma variable globale était dans la partie "ThisDocument" de mon
projet (là ça ne marche pas).
Je l'ai placée dans un nouveau module de mon projet (et là ça ne marche pas
non plus).
Je ne comprends pas ce que vous voulez dire par "hors projet".
Dans l'environnement VBA, j'ai mon projet et j'ai aussi "Normal" mais ça je
pense que c'est du code commun à tous les fichiers Word, je ne peux donc pas
y mettre ma variable globale.
Mais alors, où?

Merci d'avance pour votre assistance.
Alain.




"Anacoluthe" a écrit dans le message de
news:
Bonjour !

'Alain' nous a écrit ...
Si je clique sur mes 3 boutons: initialise/ajout/affichage, ma variable
globale est vide alors qu'elle devrait contenir "X".
Si je supprime le AddOLEControl et que je clique sur mes 3 boutons, v
contient bien "X".
Qu'en pensez-vous?


Vous ajoutez un ActiveX dans le projet donc le projet vba
est réinitialisé. Finalement ça semble assez normal.
Placez votre compteur public de contrôles en un lieu privé
hors-projet (le document par exemple).

Anacoluthe
« Dictature : un régime où l'opinion publique
ne peut s'exprimer qu'en privé. »
- Walter WINCHELL



Avatar
Anacoluthe
Bonjour !

'Alain' nous a écrit ...
Merci pour votre réponse.
Malheureusement, j'ai trop peu de connaissance de l'environnement VBA pour
comprendre ce que vous m'expliquez.


Dans ce cas il y a fort à parier que votre problème est mal posé
au départ. Car il est /très/ rare d'avoir besoin d'un programme qui
se modifie lui-même. C'est ce que vous faites avec ce document
contenant des contrôles où l'un d'entre eux (un bouton) crée
un /autre/ contrôle ! C'est de la haute voltige fortement déconseillée
pour un débutant. Il y a /sûrement/ un moyen plus orthodoxe de
s'y prendre. En modifiant votre projet (c'est tout le code de
votre document feuilles, modules etc) vous obligez vba à tout
recompiler. Quant à votre variable publique, l'exemple que vous
donniez ne permet pas d'en saisir le propos véritable.

Anacoluthe
« Dictature : un régime où l'opinion publique
ne peut s'exprimer qu'en privé. »
- Walter WINCHELL

Avatar
Alain
Merci pour votre réponse.

Il est vrai que je suis débutant mais il est vrai aussi qu'on me demande de
faire un formulaire Word qui servira de rapport et qui doit contenir un
nombre variable de zone TextBox. Le nombre de TextBox dépend d'un choix de
l'utilisateur dans une ListBox.
Par exemple, s'il sélectionne "Appareil X", il faut faire apparaitre
certains TextBox qui vont contenir les données qu'il est important de
stocker pour l'appareil X. Et il y a ainsi une dizaine de types d'appareils.
Pour chaque appareil, les données à stocker sont différentes.
Ce n'est pas tout!
Dans certains cas, pour certains appareils, je dois faire des calculs sur
certains TextBox et afficher les résultats dans d'autres TextBox.
Je dois donc avoir un document Word dynamique tant au niveau des TextBox que
du code VBA (il faut en effet créer certain événement pour les calculs
automatiques).
Voilà!
J'espère ne pas avoir été trop long.
Merci de m'avoir lu et , surtout, merci si vous acceptez de continuer à
m'aider.

Alain.
Avatar
Circé
Bonsoir Alain,

Encore une histoire de marteau et de clous (JièL vous en dira plus
longuement !).

Clairement, Word n'est pas fait pour ça.
Utilisez Infopath ou Access...

Circé
http://faqword.free.fr

Alain avait soumis l'idée :
Merci pour votre réponse.

Il est vrai que je suis débutant mais il est vrai aussi qu'on me demande de
faire un formulaire Word qui servira de rapport et qui doit contenir un
nombre variable de zone TextBox. Le nombre de TextBox dépend d'un choix de
l'utilisateur dans une ListBox.
Par exemple, s'il sélectionne "Appareil X", il faut faire apparaitre
certains TextBox qui vont contenir les données qu'il est important de
stocker pour l'appareil X. Et il y a ainsi une dizaine de types d'appareils.
Pour chaque appareil, les données à stocker sont différentes.
Ce n'est pas tout!
Dans certains cas, pour certains appareils, je dois faire des calculs sur
certains TextBox et afficher les résultats dans d'autres TextBox.
Je dois donc avoir un document Word dynamique tant au niveau des TextBox que
du code VBA (il faut en effet créer certain événement pour les calculs
automatiques).
Voilà!
J'espère ne pas avoir été trop long.
Merci de m'avoir lu et , surtout, merci si vous acceptez de continuer à
m'aider.

Alain.


Avatar
Anacoluthe
Bonjour !

'Alain' nous a écrit ...
Je dois donc avoir un document Word dynamique tant au niveau des TextBox que
du code VBA > Voilà!


En gros donc vous avez décidé qu'il fallait tout faire uniquement avec
des TextBox et vous avez décidé que le nombre de ces TextBox devait
être 'dynamique'. C'est vous qui décidez mais il me semble qu'avec juste
un marteau [ ;-) private joke ] il est bien compliqué de vouloir
fabriquer un violon... Bon courage !

Anacoluthe
« Il est très difficile d'imaginer quelque chose de simple. »
- Pierre MAC ORLAN

Avatar
Alain
Je viens de commencer une initiation à InfoPath.
Effectivement, ce produit semble correspondre parfaitement à mes besoins.
Je ne connaissais pas son existence.
Merci pour le conseil.

Alain.