OVH Cloud OVH Cloud

Accès au registre

18 réponses
Avatar
John Fuss
Bonjour,

SaveSetting, GetSetting & co sont bien gentils mais comment accèder à
d'autres clefs ? API ?

Merci

John

8 réponses

1 2
Avatar
John Fuss
Ok, je vais essayé ça

merci pour l'info

John le chatteur parait-il !

"Michel Pierron" a écrit dans le message de
news:uWuf%
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è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

























Avatar
Frédéric Sigonneau
Bonsoir,

Pourrais-tu me dire prkoi ma syntaxe ne convient pas pour un procédure ?


Tout d'abord, tu passes à une procédure qui n'en demande pas (LireReg) un
paramètre (le nom de la clé Open à lire). J'avais oublié de te signaler ce point
hier, mais ça pose bien sûr problème :)
Sur ta syntaxe elle-même, tu utilises MsgBox, fonction qui affiche une
information. Et tu demandes cette information à une procédure, ce qu'une
procédure ne sait pas faire (sauf à utiliser un petit artifice). Par contre une
fonction peut renvoyer une information (son résultat), c'est même à ça qu'elle
sert :)
D'ailleurs, lorsque tu essayes d'exécuter cette instruction (débarrassée du
paramètre non programmé)

MsgBox LireReg

tu obtiens un message d'erreur explicite : fonction ou variable attendue.

Sur les fichiers .vbs, un petit tour à cette adresse devrait t'ouvrir des
horizons :

http://www.bellamyjc.org/fr/getindex.html

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 !

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
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















Avatar
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.
Avatar
Frédéric Sigonneau
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















Avatar
Michel Pierron
Bonjour Frédéric;
Je souscris pleinement à tes arguments et pour être honnête, je n'ais pas fait de
test avec 2 instances Excel sur la modification de l'ordre de chargement des
Add-ins, mais seulement sur l'ensemble des paramètres de sécurité et bien sur, par
script vbs.
MP

"Frédéric Sigonneau" a écrit dans le message de
news:
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


















Avatar
John Fuss
Mais je me retrouve donc avec des macros à activer ce qui était la condition
de choix des macros complémentaires.

John

"Alain CROS" a écrit dans le message de
news:
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.




Avatar
Alain CROS
Bonjour.

Tu peux essayer comme ça qui fonctionne sur Win98 et XL97.

1 premier xla nommé MonXla1.xla avec dans un module
Sub Test()
MsgBox ThisWorkbook.Name
End Sub
1 second xla nommé MonXla2.xla avec dans un module
Sub Test()
MsgBox ThisWorkbook.Name
End Sub
Ces 2 xla dans le répertoire par défaut d'XL :
Application.DefaultFilePath

Dans ton fichier qui doit utiliser ces xla.
Private Sub Workbook_Open()
Dim TxtStream
If Dir("MonVBS.vbs") = "" Then
Set TxtStream = CreateObject
("Scripting.FileSystemObject").CreateTextFile("MonVBS.vbs")
With TxtStream
.WriteLine "Dim OXL"
.WriteLine "Set OXL = CreateObject
(""Excel.application"")"
.WriteLine "With OXL.Workbooks"
.WriteLine ".Open ""MonXla1.xla"""
.WriteLine ".Open ""MonXla2.xla"""
.WriteLine ".Open " & Chr$(34) &
ThisWorkbook.FullName & Chr$(34)
.WriteLine "End With"
.WriteLine "OXL.Visible = True"
.WriteLine "Set OXL = Nothing"
End With
Set TxtStream = Nothing
Shell "WScript MonVBS.vbs"
Application.Quit
Else
Kill ("MonVBS.vbs")
Run ("monxla1.xla!test")
Run ("monxla2.xla!test")
End If
End Sub

Alain CROS.
Avatar
John Fuss
C'est royal ! Merci bcp je vais m'y remettre.

John

"Alain CROS" a écrit dans le message de
news:0b5801c3c659$2b10b4d0$
Bonjour.

Tu peux essayer comme ça qui fonctionne sur Win98 et XL97.

1 premier xla nommé MonXla1.xla avec dans un module
Sub Test()
MsgBox ThisWorkbook.Name
End Sub
1 second xla nommé MonXla2.xla avec dans un module
Sub Test()
MsgBox ThisWorkbook.Name
End Sub
Ces 2 xla dans le répertoire par défaut d'XL :
Application.DefaultFilePath

Dans ton fichier qui doit utiliser ces xla.
Private Sub Workbook_Open()
Dim TxtStream
If Dir("MonVBS.vbs") = "" Then
Set TxtStream = CreateObject
("Scripting.FileSystemObject").CreateTextFile("MonVBS.vbs")
With TxtStream
.WriteLine "Dim OXL"
.WriteLine "Set OXL = CreateObject
(""Excel.application"")"
.WriteLine "With OXL.Workbooks"
.WriteLine ".Open ""MonXla1.xla"""
.WriteLine ".Open ""MonXla2.xla"""
.WriteLine ".Open " & Chr$(34) &
ThisWorkbook.FullName & Chr$(34)
.WriteLine "End With"
.WriteLine "OXL.Visible = True"
.WriteLine "Set OXL = Nothing"
End With
Set TxtStream = Nothing
Shell "WScript MonVBS.vbs"
Application.Quit
Else
Kill ("MonVBS.vbs")
Run ("monxla1.xla!test")
Run ("monxla2.xla!test")
End If
End Sub

Alain CROS.
1 2