Salut John;
Si tu as modifié la BDR à l'aide de macros contenues dans la première
instance, je
pense que fermer excel et le réouvrir devrait charger les add-ins dans
l'ordre que
tu as modifié lors de sa réouverture. Si tu as modifié l'ordre dans la
BDR, il n'y
a aucune raison que la BDR soit remodifiée.
MP
"John Fuss" a écrit dans le message de
news:brrrj8$j03$Si je comprend bien, à l'ouverture d'excel je modifie l'ordre
d'execution
des xla en BdR, je relance une instance d'Excel qui se charge avec les
xla
dans l'ordre voulut et je ferme la 1ère instance ?
c ça ?
John
"Michel Pierron" a écrit dans le message de
news:Bonjour Frédéric;
Si Excel est ouvert et que tu exécutes ton projet dans une autre
instance
aprèsmodif de la base de registre, il n'y a pas de problème et la fermeture
de
lapremière instance ne réinitialise pas les modifications effectuées.
MP
"Frédéric Sigonneau" a écrit dans le
message denews:Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès"
(qu'est-ce quine marche pas exatement ?). Mais je me permets de te rappeler la fin
de
maréponse à ta question du 1er décembre dernier (16:36), sur le même
sujet
:
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour
que la
macrocomplémentaire que tu veux lancer en premier soit dans la première
clé
OPEN(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les
clés duregistre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton
attention,
parcequ'elle peut expliquer ton échec : quelle que soit la méthode
utilisée
pouraccéder au registre (celle qu'Alain Cros t'a proposée comme les
fonctions del'API que tu as trouvées sur le site de Microsoft), *aucune
modification
duregistre* ne sera réellement effectuée si tu la fais depuis Excel
(par
du code,j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg,
ta
syntaxene convient pas pour une procédure (elle pourrait convenir pour une
fonction).Egalement le chemin d'accès à la clé Options n'est pas correct pour
la
fonctionRegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de
l'exécuter:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec
les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans
le
registre.D'une part, parce qu'elles sont beaucoup plus facile à utiliser que
les
fonctions API, et d'autre part parce que, si tu dois, ce que je
crois,
modifierles clés du registre en dehors d'Excel, tu pourrais le faire avec un
script .vbsqui accepte sans difficulté cet objet ("WScript.Shell") mais ignore
superbementles fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un
bout decode utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous
les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions"
pour
qu'Excel charge mes macros complémentaires dans l'ordre que je
veux.
Merci pour votre aide
John
"Alain CROS" a écrit dans le message de
news:%23%Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a
ce
que tufais.
Alain CROS.
"John Fuss" a écrit dans le message de
news:
br1pjq$s46$Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment
accèder àd'autres clefs ? API ?
Merci
John
Salut John;
Si tu as modifié la BDR à l'aide de macros contenues dans la première
instance, je
pense que fermer excel et le réouvrir devrait charger les add-ins dans
l'ordre que
tu as modifié lors de sa réouverture. Si tu as modifié l'ordre dans la
BDR, il n'y
a aucune raison que la BDR soit remodifiée.
MP
"John Fuss" <newskob650@yahoo.fr> a écrit dans le message de
news:brrrj8$j03$1@s1.read.news.oleane.net...
Si je comprend bien, à l'ouverture d'excel je modifie l'ordre
d'execution
des xla en BdR, je relance une instance d'Excel qui se charge avec les
xla
dans l'ordre voulut et je ferme la 1ère instance ?
c ça ?
John
"Michel Pierron" <mpierron@europtest.com> a écrit dans le message de
news:e8olCcUxDHA.1736@TK2MSFTNGP09.phx.gbl...
Bonjour Frédéric;
Si Excel est ouvert et que tu exécutes ton projet dans une autre
instance
après
modif de la base de registre, il n'y a pas de problème et la fermeture
de
la
première instance ne réinitialise pas les modifications effectuées.
MP
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le
message de
news:3FE0BE6E.CFB87635@wanadoo.fr...
Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès"
(qu'est-ce qui
ne marche pas exatement ?). Mais je me permets de te rappeler la fin
de
ma
réponse à ta question du 1er décembre dernier (16:36), sur le même
sujet
:
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour
que la
macro
complémentaire que tu veux lancer en premier soit dans la première
clé
OPEN
(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les
clés du
registre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton
attention,
parce
qu'elle peut expliquer ton échec : quelle que soit la méthode
utilisée
pour
accéder au registre (celle qu'Alain Cros t'a proposée comme les
fonctions de
l'API que tu as trouvées sur le site de Microsoft), *aucune
modification
du
registre* ne sera réellement effectuée si tu la fais depuis Excel
(par
du code,
j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg,
ta
syntaxe
ne convient pas pour une procédure (elle pourrait convenir pour une
fonction).
Egalement le chemin d'accès à la clé Options n'est pas correct pour
la
fonction
RegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de
l'exécuter
:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec
les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans
le
registre.
D'une part, parce qu'elles sont beaucoup plus facile à utiliser que
les
fonctions API, et d'autre part parce que, si tu dois, ce que je
crois,
modifier
les clés du registre en dehors d'Excel, tu pourrais le faire avec un
script .vbs
qui accepte sans difficulté cet objet ("WScript.Shell") mais ignore
superbement
les fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un
bout de
code utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous
les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions"
pour
qu'Excel charge mes macros complémentaires dans l'ordre que je
veux.
Merci pour votre aide
John
"Alain CROS" <Personne@ICI> a écrit dans le message de
news:%23%23RGxlbvDHA.2448@TK2MSFTNGP09.phx.gbl...
Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a
ce
que tu
fais.
Alain CROS.
"John Fuss" <newskob650@yahoo.fr> a écrit dans le message de
news:
br1pjq$s46$1@s1.read.news.oleane.net...
Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment
accèder à
d'autres clefs ? API ?
Merci
John
Salut John;
Si tu as modifié la BDR à l'aide de macros contenues dans la première
instance, je
pense que fermer excel et le réouvrir devrait charger les add-ins dans
l'ordre que
tu as modifié lors de sa réouverture. Si tu as modifié l'ordre dans la
BDR, il n'y
a aucune raison que la BDR soit remodifiée.
MP
"John Fuss" a écrit dans le message de
news:brrrj8$j03$Si je comprend bien, à l'ouverture d'excel je modifie l'ordre
d'execution
des xla en BdR, je relance une instance d'Excel qui se charge avec les
xla
dans l'ordre voulut et je ferme la 1ère instance ?
c ça ?
John
"Michel Pierron" a écrit dans le message de
news:Bonjour Frédéric;
Si Excel est ouvert et que tu exécutes ton projet dans une autre
instance
aprèsmodif de la base de registre, il n'y a pas de problème et la fermeture
de
lapremière instance ne réinitialise pas les modifications effectuées.
MP
"Frédéric Sigonneau" a écrit dans le
message denews:Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès"
(qu'est-ce quine marche pas exatement ?). Mais je me permets de te rappeler la fin
de
maréponse à ta question du 1er décembre dernier (16:36), sur le même
sujet
:
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour
que la
macrocomplémentaire que tu veux lancer en premier soit dans la première
clé
OPEN(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les
clés duregistre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton
attention,
parcequ'elle peut expliquer ton échec : quelle que soit la méthode
utilisée
pouraccéder au registre (celle qu'Alain Cros t'a proposée comme les
fonctions del'API que tu as trouvées sur le site de Microsoft), *aucune
modification
duregistre* ne sera réellement effectuée si tu la fais depuis Excel
(par
du code,j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg,
ta
syntaxene convient pas pour une procédure (elle pourrait convenir pour une
fonction).Egalement le chemin d'accès à la clé Options n'est pas correct pour
la
fonctionRegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de
l'exécuter:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec
les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans
le
registre.D'une part, parce qu'elles sont beaucoup plus facile à utiliser que
les
fonctions API, et d'autre part parce que, si tu dois, ce que je
crois,
modifierles clés du registre en dehors d'Excel, tu pourrais le faire avec un
script .vbsqui accepte sans difficulté cet objet ("WScript.Shell") mais ignore
superbementles fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un
bout decode utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous
les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions"
pour
qu'Excel charge mes macros complémentaires dans l'ordre que je
veux.
Merci pour votre aide
John
"Alain CROS" a écrit dans le message de
news:%23%Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a
ce
que tufais.
Alain CROS.
"John Fuss" a écrit dans le message de
news:
br1pjq$s46$Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment
accèder àd'autres clefs ? API ?
Merci
John
Pourrais-tu me dire prkoi ma syntaxe ne convient pas pour un procédure ?
En abusant, pourrais-tu me dire qq trucs sur les .vbs ? Comment ça s'utilise
? Comment peux t'on les créer ? Comment se déclenche un .vbs ? Merci.
Effectivement la syntaxe de l'accès au registre est plus simple par
WScript.Shell que par les API, je vais de ce pas les remplacer...
Merci bcp pour ta réponse.
John
"Frédéric Sigonneau" a écrit dans le message
de news:Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès" (qu'est-ce
quine marche pas exatement ?). Mais je me permets de te rappeler la fin de ma
réponse à ta question du 1er décembre dernier (16:36), sur le même sujet :
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour que la
macrocomplémentaire que tu veux lancer en premier soit dans la première clé
OPEN(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les clés
duregistre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton attention,
parcequ'elle peut expliquer ton échec : quelle que soit la méthode utilisée
pouraccéder au registre (celle qu'Alain Cros t'a proposée comme les fonctions
del'API que tu as trouvées sur le site de Microsoft), *aucune modification
duregistre* ne sera réellement effectuée si tu la fais depuis Excel (par du
code,j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg, ta
syntaxene convient pas pour une procédure (elle pourrait convenir pour une
fonction).Egalement le chemin d'accès à la clé Options n'est pas correct pour la
fonctionRegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de
l'exécuter:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans le
registre.D'une part, parce qu'elles sont beaucoup plus facile à utiliser que les
fonctions API, et d'autre part parce que, si tu dois, ce que je crois,
modifierles clés du registre en dehors d'Excel, tu pourrais le faire avec un
script .vbsqui accepte sans difficulté cet objet ("WScript.Shell") mais ignore
superbementles fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un bout
decode utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions" pour
qu'Excel charge mes macros complémentaires dans l'ordre que je veux.
Merci pour votre aide
John
"Alain CROS" a écrit dans le message de
news:%23%Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a ce que
tufais.
Alain CROS.
"John Fuss" a écrit dans le message de news:
br1pjq$s46$Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment accèder
àd'autres clefs ? API ?
Merci
John
Pourrais-tu me dire prkoi ma syntaxe ne convient pas pour un procédure ?
En abusant, pourrais-tu me dire qq trucs sur les .vbs ? Comment ça s'utilise
? Comment peux t'on les créer ? Comment se déclenche un .vbs ? Merci.
Effectivement la syntaxe de l'accès au registre est plus simple par
WScript.Shell que par les API, je vais de ce pas les remplacer...
Merci bcp pour ta réponse.
John
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le message
de news:3FE0BE6E.CFB87635@wanadoo.fr...
Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès" (qu'est-ce
qui
ne marche pas exatement ?). Mais je me permets de te rappeler la fin de ma
réponse à ta question du 1er décembre dernier (16:36), sur le même sujet :
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour que la
macro
complémentaire que tu veux lancer en premier soit dans la première clé
OPEN
(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les clés
du
registre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton attention,
parce
qu'elle peut expliquer ton échec : quelle que soit la méthode utilisée
pour
accéder au registre (celle qu'Alain Cros t'a proposée comme les fonctions
de
l'API que tu as trouvées sur le site de Microsoft), *aucune modification
du
registre* ne sera réellement effectuée si tu la fais depuis Excel (par du
code,
j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg, ta
syntaxe
ne convient pas pour une procédure (elle pourrait convenir pour une
fonction).
Egalement le chemin d'accès à la clé Options n'est pas correct pour la
fonction
RegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de
l'exécuter
:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans le
registre.
D'une part, parce qu'elles sont beaucoup plus facile à utiliser que les
fonctions API, et d'autre part parce que, si tu dois, ce que je crois,
modifier
les clés du registre en dehors d'Excel, tu pourrais le faire avec un
script .vbs
qui accepte sans difficulté cet objet ("WScript.Shell") mais ignore
superbement
les fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un bout
de
code utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions" pour
qu'Excel charge mes macros complémentaires dans l'ordre que je veux.
Merci pour votre aide
John
"Alain CROS" <Personne@ICI> a écrit dans le message de
news:%23%23RGxlbvDHA.2448@TK2MSFTNGP09.phx.gbl...
Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a ce que
tu
fais.
Alain CROS.
"John Fuss" <newskob650@yahoo.fr> a écrit dans le message de news:
br1pjq$s46$1@s1.read.news.oleane.net...
Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment accèder
à
d'autres clefs ? API ?
Merci
John
Pourrais-tu me dire prkoi ma syntaxe ne convient pas pour un procédure ?
En abusant, pourrais-tu me dire qq trucs sur les .vbs ? Comment ça s'utilise
? Comment peux t'on les créer ? Comment se déclenche un .vbs ? Merci.
Effectivement la syntaxe de l'accès au registre est plus simple par
WScript.Shell que par les API, je vais de ce pas les remplacer...
Merci bcp pour ta réponse.
John
"Frédéric Sigonneau" a écrit dans le message
de news:Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès" (qu'est-ce
quine marche pas exatement ?). Mais je me permets de te rappeler la fin de ma
réponse à ta question du 1er décembre dernier (16:36), sur le même sujet :
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour que la
macrocomplémentaire que tu veux lancer en premier soit dans la première clé
OPEN(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les clés
duregistre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton attention,
parcequ'elle peut expliquer ton échec : quelle que soit la méthode utilisée
pouraccéder au registre (celle qu'Alain Cros t'a proposée comme les fonctions
del'API que tu as trouvées sur le site de Microsoft), *aucune modification
duregistre* ne sera réellement effectuée si tu la fais depuis Excel (par du
code,j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg, ta
syntaxene convient pas pour une procédure (elle pourrait convenir pour une
fonction).Egalement le chemin d'accès à la clé Options n'est pas correct pour la
fonctionRegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de
l'exécuter:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans le
registre.D'une part, parce qu'elles sont beaucoup plus facile à utiliser que les
fonctions API, et d'autre part parce que, si tu dois, ce que je crois,
modifierles clés du registre en dehors d'Excel, tu pourrais le faire avec un
script .vbsqui accepte sans difficulté cet objet ("WScript.Shell") mais ignore
superbementles fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un bout
decode utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions" pour
qu'Excel charge mes macros complémentaires dans l'ordre que je veux.
Merci pour votre aide
John
"Alain CROS" a écrit dans le message de
news:%23%Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a ce que
tufais.
Alain CROS.
"John Fuss" a écrit dans le message de news:
br1pjq$s46$Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment accèder
àd'autres clefs ? API ?
Merci
John
Bonjour Frédéric;
Si Excel est ouvert et que tu exécutes ton projet dans une autre instance après
modif de la base de registre, il n'y a pas de problème et la fermeture de la
première instance ne réinitialise pas les modifications effectuées.
MP
"Frédéric Sigonneau" a écrit dans le message de
news:Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès" (qu'est-ce qui
ne marche pas exatement ?). Mais je me permets de te rappeler la fin de ma
réponse à ta question du 1er décembre dernier (16:36), sur le même sujet :
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour que la macro
complémentaire que tu veux lancer en premier soit dans la première clé OPEN
(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les clés du
registre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton attention, parce
qu'elle peut expliquer ton échec : quelle que soit la méthode utilisée pour
accéder au registre (celle qu'Alain Cros t'a proposée comme les fonctions de
l'API que tu as trouvées sur le site de Microsoft), *aucune modification du
registre* ne sera réellement effectuée si tu la fais depuis Excel (par du code,
j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg, ta syntaxe
ne convient pas pour une procédure (elle pourrait convenir pour une fonction).
Egalement le chemin d'accès à la clé Options n'est pas correct pour la fonction
RegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de l'exécuter
:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans le registre.
D'une part, parce qu'elles sont beaucoup plus facile à utiliser que les
fonctions API, et d'autre part parce que, si tu dois, ce que je crois, modifier
les clés du registre en dehors d'Excel, tu pourrais le faire avec un script .vbs
qui accepte sans difficulté cet objet ("WScript.Shell") mais ignore superbement
les fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un bout de
code utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions" pour
qu'Excel charge mes macros complémentaires dans l'ordre que je veux.
Merci pour votre aide
John
"Alain CROS" a écrit dans le message de
news:%23%Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a ce que tu
fais.
Alain CROS.
"John Fuss" a écrit dans le message de news:
br1pjq$s46$Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment accèder à
d'autres clefs ? API ?
Merci
John
Bonjour Frédéric;
Si Excel est ouvert et que tu exécutes ton projet dans une autre instance après
modif de la base de registre, il n'y a pas de problème et la fermeture de la
première instance ne réinitialise pas les modifications effectuées.
MP
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le message de
news:3FE0BE6E.CFB87635@wanadoo.fr...
Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès" (qu'est-ce qui
ne marche pas exatement ?). Mais je me permets de te rappeler la fin de ma
réponse à ta question du 1er décembre dernier (16:36), sur le même sujet :
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour que la macro
complémentaire que tu veux lancer en premier soit dans la première clé OPEN
(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les clés du
registre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton attention, parce
qu'elle peut expliquer ton échec : quelle que soit la méthode utilisée pour
accéder au registre (celle qu'Alain Cros t'a proposée comme les fonctions de
l'API que tu as trouvées sur le site de Microsoft), *aucune modification du
registre* ne sera réellement effectuée si tu la fais depuis Excel (par du code,
j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg, ta syntaxe
ne convient pas pour une procédure (elle pourrait convenir pour une fonction).
Egalement le chemin d'accès à la clé Options n'est pas correct pour la fonction
RegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de l'exécuter
:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans le registre.
D'une part, parce qu'elles sont beaucoup plus facile à utiliser que les
fonctions API, et d'autre part parce que, si tu dois, ce que je crois, modifier
les clés du registre en dehors d'Excel, tu pourrais le faire avec un script .vbs
qui accepte sans difficulté cet objet ("WScript.Shell") mais ignore superbement
les fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un bout de
code utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions" pour
qu'Excel charge mes macros complémentaires dans l'ordre que je veux.
Merci pour votre aide
John
"Alain CROS" <Personne@ICI> a écrit dans le message de
news:%23%23RGxlbvDHA.2448@TK2MSFTNGP09.phx.gbl...
Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a ce que tu
fais.
Alain CROS.
"John Fuss" <newskob650@yahoo.fr> a écrit dans le message de news:
br1pjq$s46$1@s1.read.news.oleane.net...
Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment accèder à
d'autres clefs ? API ?
Merci
John
Bonjour Frédéric;
Si Excel est ouvert et que tu exécutes ton projet dans une autre instance après
modif de la base de registre, il n'y a pas de problème et la fermeture de la
première instance ne réinitialise pas les modifications effectuées.
MP
"Frédéric Sigonneau" a écrit dans le message de
news:Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès" (qu'est-ce qui
ne marche pas exatement ?). Mais je me permets de te rappeler la fin de ma
réponse à ta question du 1er décembre dernier (16:36), sur le même sujet :
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour que la macro
complémentaire que tu veux lancer en premier soit dans la première clé OPEN
(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les clés du
registre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton attention, parce
qu'elle peut expliquer ton échec : quelle que soit la méthode utilisée pour
accéder au registre (celle qu'Alain Cros t'a proposée comme les fonctions de
l'API que tu as trouvées sur le site de Microsoft), *aucune modification du
registre* ne sera réellement effectuée si tu la fais depuis Excel (par du code,
j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg, ta syntaxe
ne convient pas pour une procédure (elle pourrait convenir pour une fonction).
Egalement le chemin d'accès à la clé Options n'est pas correct pour la fonction
RegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de l'exécuter
:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans le registre.
D'une part, parce qu'elles sont beaucoup plus facile à utiliser que les
fonctions API, et d'autre part parce que, si tu dois, ce que je crois, modifier
les clés du registre en dehors d'Excel, tu pourrais le faire avec un script .vbs
qui accepte sans difficulté cet objet ("WScript.Shell") mais ignore superbement
les fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un bout de
code utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions" pour
qu'Excel charge mes macros complémentaires dans l'ordre que je veux.
Merci pour votre aide
John
"Alain CROS" a écrit dans le message de
news:%23%Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a ce que tu
fais.
Alain CROS.
"John Fuss" a écrit dans le message de news:
br1pjq$s46$Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment accèder à
d'autres clefs ? API ?
Merci
John
Bonsoir Michel,
Je peux me tromper, mais voilà comment je comprends le fonctionnement d'Excel
avec ses clés dans le registre :
1 - A l'ouverture d'Excel, lecture des clés et enregistrement de leurs valeurs
dans un espace verrouillé en mémoire vive
2- Après l'ouverture, toutes modifications dans l'interface d'Excel (par exemple
avec la boite de dialogue des Macros complémentaires) sont enregistrées en
mémoire vive mais ne sont pas automatiquement répercutées dans le registre,
certaines clés oui, d'autres non (ce comportement peut se vérifier, cas par cas,
dans regedit)
3- A la fermeture les valeurs enregistrées en mémoire vive sont transférées sur
le disque dur, dans le registre.
Les modifications effectuées par du code VBA directement dans le registre sont
écrasées (du moins les valeurs de clés de même nom) par celles qui étaient
stockées en mémoire vive, lors de la fermeture d'Excel. C'est la raison pour
laquelle j'ai écrit qu'Excel doit être fermé lorsque l'on veut modifier ses clés
dans la base de registre.
Ajouter qu'une telle modification était de toute façon impossible amène à
montrer une fois de plus qu'impossible n'est pas Excel :-))
L'utilisation de deux instances d'Excel (que je n'avais jamais tentée :) semble
une approche intéressante à explorer pour contourner ce comportement , et pour
certaines clés. Mais je serais néanmoins très prudent sur cette méthode
concernant les clés OPEN du fait que le demandeur cherche à leur donner un ordre
particulier de lancement. La numérotation donnée en VBA dans l'instance 1 aux
macros complémentaires installées ne me semble pas assurée d'être conservée
après fermeture de l'instance 2. Je n'ai testé que légèrement mais un script vbs
me semble malgré tout plus sûr...
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric;
Si Excel est ouvert et que tu exécutes ton projet dans une autre instance
après
modif de la base de registre, il n'y a pas de problème et la fermeture de la
première instance ne réinitialise pas les modifications effectuées.
MP
"Frédéric Sigonneau" a écrit dans le message
de
news:Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès" (qu'est-ce
qui
ne marche pas exatement ?). Mais je me permets de te rappeler la fin de ma
réponse à ta question du 1er décembre dernier (16:36), sur le même sujet :
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour que la
macro
complémentaire que tu veux lancer en premier soit dans la première clé OPEN
(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les clés du
registre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton attention,
parce
qu'elle peut expliquer ton échec : quelle que soit la méthode utilisée pour
accéder au registre (celle qu'Alain Cros t'a proposée comme les fonctions de
l'API que tu as trouvées sur le site de Microsoft), *aucune modification du
registre* ne sera réellement effectuée si tu la fais depuis Excel (par du
code,
j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg, ta
syntaxe
ne convient pas pour une procédure (elle pourrait convenir pour une
fonction).
Egalement le chemin d'accès à la clé Options n'est pas correct pour la
fonction
RegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de
l'exécuter
:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans le
registre.
D'une part, parce qu'elles sont beaucoup plus facile à utiliser que les
fonctions API, et d'autre part parce que, si tu dois, ce que je crois,
modifier
les clés du registre en dehors d'Excel, tu pourrais le faire avec un script
.vbs
qui accepte sans difficulté cet objet ("WScript.Shell") mais ignore
superbement
les fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un bout de
code utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions" pour
qu'Excel charge mes macros complémentaires dans l'ordre que je veux.
Merci pour votre aide
John
"Alain CROS" a écrit dans le message de
news:%23%Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a ce que tu
fais.
Alain CROS.
"John Fuss" a écrit dans le message de news:
br1pjq$s46$Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment accèder à
d'autres clefs ? API ?
Merci
John
Bonsoir Michel,
Je peux me tromper, mais voilà comment je comprends le fonctionnement d'Excel
avec ses clés dans le registre :
1 - A l'ouverture d'Excel, lecture des clés et enregistrement de leurs valeurs
dans un espace verrouillé en mémoire vive
2- Après l'ouverture, toutes modifications dans l'interface d'Excel (par exemple
avec la boite de dialogue des Macros complémentaires) sont enregistrées en
mémoire vive mais ne sont pas automatiquement répercutées dans le registre,
certaines clés oui, d'autres non (ce comportement peut se vérifier, cas par cas,
dans regedit)
3- A la fermeture les valeurs enregistrées en mémoire vive sont transférées sur
le disque dur, dans le registre.
Les modifications effectuées par du code VBA directement dans le registre sont
écrasées (du moins les valeurs de clés de même nom) par celles qui étaient
stockées en mémoire vive, lors de la fermeture d'Excel. C'est la raison pour
laquelle j'ai écrit qu'Excel doit être fermé lorsque l'on veut modifier ses clés
dans la base de registre.
Ajouter qu'une telle modification était de toute façon impossible amène à
montrer une fois de plus qu'impossible n'est pas Excel :-))
L'utilisation de deux instances d'Excel (que je n'avais jamais tentée :) semble
une approche intéressante à explorer pour contourner ce comportement , et pour
certaines clés. Mais je serais néanmoins très prudent sur cette méthode
concernant les clés OPEN du fait que le demandeur cherche à leur donner un ordre
particulier de lancement. La numérotation donnée en VBA dans l'instance 1 aux
macros complémentaires installées ne me semble pas assurée d'être conservée
après fermeture de l'instance 2. Je n'ai testé que légèrement mais un script vbs
me semble malgré tout plus sûr...
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric;
Si Excel est ouvert et que tu exécutes ton projet dans une autre instance
après
modif de la base de registre, il n'y a pas de problème et la fermeture de la
première instance ne réinitialise pas les modifications effectuées.
MP
"Frédéric Sigonneau" <frederic.sigonneau@wanadoo.fr> a écrit dans le message
de
news:3FE0BE6E.CFB87635@wanadoo.fr...
Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès" (qu'est-ce
qui
ne marche pas exatement ?). Mais je me permets de te rappeler la fin de ma
réponse à ta question du 1er décembre dernier (16:36), sur le même sujet :
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour que la
macro
complémentaire que tu veux lancer en premier soit dans la première clé OPEN
(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les clés du
registre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton attention,
parce
qu'elle peut expliquer ton échec : quelle que soit la méthode utilisée pour
accéder au registre (celle qu'Alain Cros t'a proposée comme les fonctions de
l'API que tu as trouvées sur le site de Microsoft), *aucune modification du
registre* ne sera réellement effectuée si tu la fais depuis Excel (par du
code,
j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg, ta
syntaxe
ne convient pas pour une procédure (elle pourrait convenir pour une
fonction).
Egalement le chemin d'accès à la clé Options n'est pas correct pour la
fonction
RegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de
l'exécuter
:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans le
registre.
D'une part, parce qu'elles sont beaucoup plus facile à utiliser que les
fonctions API, et d'autre part parce que, si tu dois, ce que je crois,
modifier
les clés du registre en dehors d'Excel, tu pourrais le faire avec un script
.vbs
qui accepte sans difficulté cet objet ("WScript.Shell") mais ignore
superbement
les fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un bout de
code utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions" pour
qu'Excel charge mes macros complémentaires dans l'ordre que je veux.
Merci pour votre aide
John
"Alain CROS" <Personne@ICI> a écrit dans le message de
news:%23%23RGxlbvDHA.2448@TK2MSFTNGP09.phx.gbl...
Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a ce que tu
fais.
Alain CROS.
"John Fuss" <newskob650@yahoo.fr> a écrit dans le message de news:
br1pjq$s46$1@s1.read.news.oleane.net...
Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment accèder à
d'autres clefs ? API ?
Merci
John
Bonsoir Michel,
Je peux me tromper, mais voilà comment je comprends le fonctionnement d'Excel
avec ses clés dans le registre :
1 - A l'ouverture d'Excel, lecture des clés et enregistrement de leurs valeurs
dans un espace verrouillé en mémoire vive
2- Après l'ouverture, toutes modifications dans l'interface d'Excel (par exemple
avec la boite de dialogue des Macros complémentaires) sont enregistrées en
mémoire vive mais ne sont pas automatiquement répercutées dans le registre,
certaines clés oui, d'autres non (ce comportement peut se vérifier, cas par cas,
dans regedit)
3- A la fermeture les valeurs enregistrées en mémoire vive sont transférées sur
le disque dur, dans le registre.
Les modifications effectuées par du code VBA directement dans le registre sont
écrasées (du moins les valeurs de clés de même nom) par celles qui étaient
stockées en mémoire vive, lors de la fermeture d'Excel. C'est la raison pour
laquelle j'ai écrit qu'Excel doit être fermé lorsque l'on veut modifier ses clés
dans la base de registre.
Ajouter qu'une telle modification était de toute façon impossible amène à
montrer une fois de plus qu'impossible n'est pas Excel :-))
L'utilisation de deux instances d'Excel (que je n'avais jamais tentée :) semble
une approche intéressante à explorer pour contourner ce comportement , et pour
certaines clés. Mais je serais néanmoins très prudent sur cette méthode
concernant les clés OPEN du fait que le demandeur cherche à leur donner un ordre
particulier de lancement. La numérotation donnée en VBA dans l'instance 1 aux
macros complémentaires installées ne me semble pas assurée d'être conservée
après fermeture de l'instance 2. Je n'ai testé que légèrement mais un script vbs
me semble malgré tout plus sûr...
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
Bonjour Frédéric;
Si Excel est ouvert et que tu exécutes ton projet dans une autre instance
après
modif de la base de registre, il n'y a pas de problème et la fermeture de la
première instance ne réinitialise pas les modifications effectuées.
MP
"Frédéric Sigonneau" a écrit dans le message
de
news:Bonsoir,
Je ne sais pas ce que tu veux dire exactement par "sans succès" (qu'est-ce
qui
ne marche pas exatement ?). Mais je me permets de te rappeler la fin de ma
réponse à ta question du 1er décembre dernier (16:36), sur le même sujet :
'========début
Tu peux essayer de les renommer, dans l'éditeur du registre, pour que la
macro
complémentaire que tu veux lancer en premier soit dans la première clé OPEN
(celle qui n'a pas de numéro).
*Excel doit être fermé pour cette manip*.
(...)Il est impossible en effet, Excel étant ouvert, de modifier les clés du
registre qu'il utilise.
'========fin
C'est la dernière phrase, bien sûr, sur laquelle j'attire ton attention,
parce
qu'elle peut expliquer ton échec : quelle que soit la méthode utilisée pour
accéder au registre (celle qu'Alain Cros t'a proposée comme les fonctions de
l'API que tu as trouvées sur le site de Microsoft), *aucune modification du
registre* ne sera réellement effectuée si tu la fais depuis Excel (par du
code,
j'entends).
D'autre part, pour lire dans le registre avec la procédure LireReg, ta
syntaxe
ne convient pas pour une procédure (elle pourrait convenir pour une
fonction).
Egalement le chemin d'accès à la clé Options n'est pas correct pour la
fonction
RegRead.
Essaye plutôt de copier/coller ce code dans un module standard et de
l'exécuter
:
Sub LireReg()
Dim ObjShell As Object, Clé$
Set ObjShell = CreateObject("WScript.Shell")
Clé = "HKCUSoftwareMicrosoftOffice9.0ExcelOptionsOPEN"
On Error Resume Next
MsgBox ObjShell.RegRead(Clé)
Set ObjShell = Nothing
End Sub
Je te conseille, mais tu en fais ce que tu veux, de persévérer avec les
méthodes/fonctions de l'objet "WScript.Shell" pour travailler dans le
registre.
D'une part, parce qu'elles sont beaucoup plus facile à utiliser que les
fonctions API, et d'autre part parce que, si tu dois, ce que je crois,
modifier
les clés du registre en dehors d'Excel, tu pourrais le faire avec un script
.vbs
qui accepte sans difficulté cet objet ("WScript.Shell") mais ignore
superbement
les fonctions API.
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !
J'ai essayé en utilisant
msgbox(LireReg("HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOption
sOPEN"))
Mais sans succès, ou est-ce que je me trompe ? Sinon si qq'un a un bout de
code utilisant les API je suis preneur....
Sachant que le but de mon opération est de classer à ma guise tous les
"OPEN*" de la clef
"HKEY_CURRENT_USERSoftwareMicrosoftOffice9.0ExcelOptions" pour
qu'Excel charge mes macros complémentaires dans l'ordre que je veux.
Merci pour votre aide
John
"Alain CROS" a écrit dans le message de
news:%23%Bonjour.
Il y a moyen de passer par un objet Shell.
Sub EcrireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
ObjShell.RegWrite "HKCUJohnFuzzTonic", 5
Set ObjShell = Nothing
End Sub
Sub LireReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
MsgBox ObjShell.RegRead("HKCUJohnFuzzTonic")
Set ObjShell = Nothing
End Sub
Sub EffaceReg()
Dim ObjShell As Object
Set ObjShell = CreateObject("WScript.Shell")
On Error Resume Next
ObjShell.RegDelete "HKCUJohnFuzz"
Set ObjShell = Nothing
End Sub
C'est faisable par les API avec les fonctions :
RegCloseKey
RegCreateKeyEx
RegDeleteKey
mais c'est un peu plus compliqué.
Un petit conseil, si tu manipule la bdr, fais bien attention a ce que tu
fais.
Alain CROS.
"John Fuss" a écrit dans le message de news:
br1pjq$s46$Bonjour,
SaveSetting, GetSetting & co sont bien gentils mais comment accèder à
d'autres clefs ? API ?
Merci
John
Bonjour.
Il me semble que le plus simple dans ton cas serait non pas d'aller
bricoler la bdr mais d'ouvrir tes xla dans l'ordre que tu le
souhaite par un simple Workbook.Open.
Pour cela, tu ne les référence pas en tant que macro complémentaire mais
tu les ouvre dans le Workbook.Open du fichier qui doit les
utiliser.
Alain CROS.
Bonjour.
Il me semble que le plus simple dans ton cas serait non pas d'aller
bricoler la bdr mais d'ouvrir tes xla dans l'ordre que tu le
souhaite par un simple Workbook.Open.
Pour cela, tu ne les référence pas en tant que macro complémentaire mais
tu les ouvre dans le Workbook.Open du fichier qui doit les
utiliser.
Alain CROS.
Bonjour.
Il me semble que le plus simple dans ton cas serait non pas d'aller
bricoler la bdr mais d'ouvrir tes xla dans l'ordre que tu le
souhaite par un simple Workbook.Open.
Pour cela, tu ne les référence pas en tant que macro complémentaire mais
tu les ouvre dans le Workbook.Open du fichier qui doit les
utiliser.
Alain CROS.