Modification d'une constante en VBA

Le
ThierryP
Bonjour le forum,

Je vais essayer d'être clair (court, ce ne sera pas possible !) !

J'ai créé un classeur modèle qui est installé sur des P=
C. L'utilisateur crée un classeur qui est enregistré sur un disqu=
e local : D, E ou autre.

Après transfert sur mon serveur (Lecteur I), je souhaite modifier le c=
omportement du fichier. Donc, grâce aux macros magiques de Denis (qu'i=
l en soit une fois de plus remercié !!!), je sais changer par VBA le c=
ode du classeur pour remplacer la lettre du disque par I :
Public Const Lecteur As String = "D:" devient
Public Const Lecteur As String = "I:"

et dans mon Workbook_Open, je fais çà :
MsgBox Lecteur ' pour test
Call Change_Drive '> je change la lettre
MsgBox Lecteur ' pour test
If Lecteur = "I:" Then
If InStr(ThisWorkbook.Path, "00 - A Transférer") <> 0 Then
fais ci, fais ça
Else
fais autre chose
End If
End If

En théorie, tout est bon.. Sauf qu'à la première ouvertur=
e sur le serveur, il se passe ceci :
le premier msgbox me donne bien "D", puis je change la lettre, le deuxi=
me msgbox me donne bien "I", donc en théorie je dois passer dans mo=
n test; sauf que non ! Si je sauvegarde et réouvre le fichier tout est=
OK.

Ouf, enfin la question :
Comment forcer la macro à prendre en compte la modif en "direct live" =
?

D'avance merci,

ThierryP
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JièL
Le #26427990
Le 03/03/2017 à 11:02, ThierryP a écrit :
Bonjour le forum,

Hello tout seul
Comment forcer la macro à prendre en compte la modif en "direct live" ?

Je n'ai pas la réponse mais je propose de lancer la compilation du VBA...
Je sais le faire via une méthode dégueu de sendkeys (qui ne fonctionne
pas à tous les coups bien entendu) mais je serais intéressé si une
fonctionnalité plus propre existait
--
JièL 1 ter et sé
JièL
Le #26428080
Le 03/03/2017 à 11:02, ThierryP a écrit :
Bonjour le forum,

Hello tout seul
Comment forcer la macro à prendre en compte la modif en "direct live" ?

Je n'ai pas la réponse mais je propose de lancer la compilation du VBA...
Je sais le faire via une méthode dégueu de sendkeys (qui ne fonctionne
pas à tous les coups bien entendu) mais je serais intéressé si une
fonctionnalité plus propre existait
--
JièL 1 ter et sé
ThierryP
Le #26427996
Bonjour JiéL,
Je crois que je vais éviter la méthode dégueu..... Ce modà ¨le va être installé sur des portables différents, avec pe ut-être des Windows différents, voire des versions d'Office diff érentes...... et ces portables vont être portés partout en F rance !!
Alors on va sagement attendre la méthode propre :-))
ThierryP
Hello tout seul
Comment forcer la macro à prendre en compte la modif en "direct li ve" ?

Je n'ai pas la réponse mais je propose de lancer la compilation du V BA...
Je sais le faire via une méthode dégueu de sendkeys (qui ne fon ctionne
pas à tous les coups bien entendu) mais je serais intéressà © si une
fonctionnalité plus propre existait
--
JièL 1 ter et sé
ThierryP
Le #26428078
Bonjour JiéL,
Je crois que je vais éviter la méthode dégueu..... Ce modà ¨le va être installé sur des portables différents, avec pe ut-être des Windows différents, voire des versions d'Office diff érentes...... et ces portables vont être portés partout en F rance !!
Alors on va sagement attendre la méthode propre :-))
ThierryP
Hello tout seul
Comment forcer la macro à prendre en compte la modif en "direct li ve" ?

Je n'ai pas la réponse mais je propose de lancer la compilation du V BA...
Je sais le faire via une méthode dégueu de sendkeys (qui ne fon ctionne
pas à tous les coups bien entendu) mais je serais intéressà © si une
fonctionnalité plus propre existait
--
JièL 1 ter et sé
News.aioe.org
Le #26427995
Bonjour,
Si tu utilises une constante, par définition, tu ne peux pas modifier par
"code" la valeur de cette constante. Ceci étant, emploie une variable et là
tout est possible... voici un exemple :
Dans un module standard, tu déclares la variable "Lecteur" comme suit :
Public Lecteur As String
'-----------------------------------------------
Private Sub Workbook_Open()
With ThisWorkbook
'Dans le cas où tu ouvres un classeur émanant d'un modèle,
'le fichier n'a pas de chemin... on doit faire ce test.
'La variable Lecteur représente toujours le chemin où est
'situé le fichier.
If .Saved = True Then
Lecteur = Left(.FullName, 1)
End If
End With
'.../etc...
End Sub
'-----------------------------------------------
Tu peux utiliser d'autres événements si tu veux définir cette variable lors
d'un enregistrement...
'------------------------------------------------
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Lecteur = Left(ThisWorkbook.FullName, 1)
End Sub
'------------------------------------------------
MichD
News.aioe.org
Le #26428077
Bonjour,
Si tu utilises une constante, par définition, tu ne peux pas modifier par
"code" la valeur de cette constante. Ceci étant, emploie une variable et là
tout est possible... voici un exemple :
Dans un module standard, tu déclares la variable "Lecteur" comme suit :
Public Lecteur As String
'-----------------------------------------------
Private Sub Workbook_Open()
With ThisWorkbook
'Dans le cas où tu ouvres un classeur émanant d'un modèle,
'le fichier n'a pas de chemin... on doit faire ce test.
'La variable Lecteur représente toujours le chemin où est
'situé le fichier.
If .Saved = True Then
Lecteur = Left(.FullName, 1)
End If
End With
'.../etc...
End Sub
'-----------------------------------------------
Tu peux utiliser d'autres événements si tu veux définir cette variable lors
d'un enregistrement...
'------------------------------------------------
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Lecteur = Left(ThisWorkbook.FullName, 1)
End Sub
'------------------------------------------------
MichD
ThierryP
Le #26428010
Bonjour Denis,
Quand j'ai lu ta première phrase.... je suis devenu rouge de honte. Ef fectivement, une constante est destinée à rester constante !!! En fait comme tu le dis, je pars d'un modèle, donc à l'ouverture, i l n'y a pas de chemin, et donc je pensais m'en sortir avec une constante qu e je modifiais au transfert du classeur.
Mais Isabelle m'a donné il y a quelques jours une piste pour trouver m on modèle, et partant de là, je pourrai initialiser ma variable.
Encore un peu de boulot en perspective !
Merci,
ThierryP
ThierryP
Le #26428072
Bonjour Denis,
Quand j'ai lu ta première phrase.... je suis devenu rouge de honte. Ef fectivement, une constante est destinée à rester constante !!! En fait comme tu le dis, je pars d'un modèle, donc à l'ouverture, i l n'y a pas de chemin, et donc je pensais m'en sortir avec une constante qu e je modifiais au transfert du classeur.
Mais Isabelle m'a donné il y a quelques jours une piste pour trouver m on modèle, et partant de là, je pourrai initialiser ma variable.
Encore un peu de boulot en perspective !
Merci,
ThierryP
News.aioe.org
Le #26428012
Quand tu enregistres ton classeur comme modèle, tu peux toujours créer un
"NOM" de la collection "NAMES" ayant comme valeur la lettre du lecteur que
tu prends le temps de masquer où tu sauvegardes ton fichier. Dans le
Thisworkbook :
'-------------------------
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
ThisWorkbook.Names.Add "Lecteur", Left(ThisWorkbook.FullName, 1),
Visible:úlse
End Sub
'-------------------------
Pour retrouver la lettre représentant ce lecteur :
x = Left(Replace(Names("Lecteur").Value, "=""", ""), 1)
De toute manière, tu as déjà une solution...
MichD
News.aioe.org
Le #26428070
Quand tu enregistres ton classeur comme modèle, tu peux toujours créer un
"NOM" de la collection "NAMES" ayant comme valeur la lettre du lecteur que
tu prends le temps de masquer où tu sauvegardes ton fichier. Dans le
Thisworkbook :
'-------------------------
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
ThisWorkbook.Names.Add "Lecteur", Left(ThisWorkbook.FullName, 1),
Visible:úlse
End Sub
'-------------------------
Pour retrouver la lettre représentant ce lecteur :
x = Left(Replace(Names("Lecteur").Value, "=""", ""), 1)
De toute manière, tu as déjà une solution...
MichD
Publicité
Poster une réponse
Anonyme