Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modification d'une constante en VBA

12 réponses
Avatar
ThierryP
Bonjour le forum,

Je vais essayer d'=C3=AAtre clair (court, ce ne sera pas possible !) !

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

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

et dans mon Workbook_Open, je fais =C3=A7=C3=A0 :
MsgBox Lecteur ' pour test
Call Change_Drive '------> je change la lettre
MsgBox Lecteur ' pour test
If Lecteur =3D "I:" Then
If InStr(ThisWorkbook.Path, "00 - A Transf=C3=A9rer") <> 0 Then
fais ci, fais =C3=A7a
Else
fais autre chose
End If
End If

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

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

D'avance merci,

ThierryP

10 réponses

1 2
Avatar
JièL
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é
Avatar
JièL
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é
Avatar
ThierryP
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é
Avatar
ThierryP
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é
Avatar
News.aioe.org
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
Avatar
News.aioe.org
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
Avatar
ThierryP
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
Avatar
ThierryP
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
Avatar
News.aioe.org
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
Avatar
News.aioe.org
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
1 2