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

[VBA] Exécuter un fichier reg

7 réponses
Avatar
HD
Bonjour,

En VBA, je voudrais exécuter un fichier << .reg >> afin de modifier la
base de registre pour l'utilisateur. Sur la session de l'utilisateur, si
je double-clique sur le fichier .reg en question, il s'exécute bien et
demande une confirmation.

Lorsque je tente de le lancer via le VBA il m'affiche une erreur
d'exécution 5. Argument ou appel de procédure incorrect.

J'ai testé :
Shell ("D:\prog\GIEO1.reg"), vbNormalFocus

Et :
Shell "regedit /s ""D:\prog\GIEO1.reg""", 0

Je ne cherche pas forcément à lancer le reg et qu'il s'exécute sans
boite de dialogue. Si il se lance avec demande de confirmation (comme
lorsque l'on clique dessus) cela me conviendra parfaitement.

Merci d'avance pour votre aide,

@+
HD

7 réponses

Avatar
Geo
Bonjour
Shell ("D:progGIEO1.reg"), vbNormalFocus

Je mettrais plutôt la parenthèse à la fin :
Shell ("D:progGIEO1.reg", vbNormalFocus)
vous pouvez aussi essayer sans le deuxième argument qui est facultatif
:
Shell ("D:progGIEO1.reg")
Avatar
HD
Shell ("D:progGIEO1.reg"), vbNormalFocus

Je mettrais plutôt la parenthèse à la fin :
Shell ("D:progGIEO1.reg", vbNormalFocus)
vous pouvez aussi essayer sans le deuxième argument qui est facultatif
Shell ("D:progGIEO1.reg")

J'ai toujours le même message d'erreur.
@+
HD
Avatar
DanielCo
Bonjour,
Peut-être :
Rep=Shell("D:progGIEO1.reg", vbNormalFocus)
Cordialement.
Daniel
Shell ("D:progGIEO1.reg"), vbNormalFocus

Je mettrais plutôt la parenthèse à la fin :
Shell ("D:progGIEO1.reg", vbNormalFocus)
vous pouvez aussi essayer sans le deuxième argument qui est
facultatif Shell ("D:progGIEO1.reg")

J'ai toujours le même message d'erreur.
@+
HD
Avatar
HB
Bonjour,
1) Puisque la fonction SHELL prévoit un retour
(qui est l'ID du processus, je crois)
il faut aussi le prévoir.
2) La commande REG est bien plus riche et pratique que regedit.
3) On peut mettre le chemin vers l'extrait (*.reg) en argument
de cette sub ... Ainsi, cela peut servir à plusieurs choses.
Testé et qui marche :
Sub MetREG(CheminREG As String)
Dim LIGNECOMMANDE As String
Dim Bidon As Variant
LIGNECOMMANDE = "REG import " & Chr(34) & CheminREG & Chr(34)
Bidon = Shell(LIGNECOMMANDE, vbNormalNoFocus)
End Sub
Sub TEST()
MetREG "D:TempTruc Bidon.reg"
End Sub
Cordialement,
HB
Le 12/10/2016 à 14:25, HD a écrit :
Shell ("D:progGIEO1.reg"), vbNormalFocus

Je mettrais plutôt la parenthèse à la fin :
Shell ("D:progGIEO1.reg", vbNormalFocus)
vous pouvez aussi essayer sans le deuxième argument qui est facultatif
Shell ("D:progGIEO1.reg")

J'ai toujours le même message d'erreur.
@+
HD

---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
HD
Rep=Shell("D:progGIEO1.reg", vbNormalFocus)

Cela ne change rien. D'après mes recherches, cela pourrait être lié au
fait qu'en ligne de commande regedit aurait besoin d'une élévation de
privilège... Lorsque l'on
Shell("regedit.exe")
ne fonctionne pas alors que
Shell("notepad.exe")
fonctionne parfaitement.
@+
HD
Avatar
HD
Parfait !!!
Si regedit ne fonctionne pas en VBA... REG lui permet effectivement de
fonctionner et ce sans aucun message de confirmation.
Merci à vous tous pour votre aide,
@+
HD
Avatar
MichD
Bonjour,
Je crois qu'il y a aussi ceci, évidemment je n'ai pas testé!
'----------------------------------------------------------
Sub test()
Dim X As WshShell.Shell
Dim MyFile As String
Dim WshShell As Object
MyFile = "C:UsersMichDDocumentsMyFile.Reg"
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "Regedit.exe /s "" & MyFile & """, 0, True
'OU
WshShell.Run "regedit /s C:UsersMichDDocumentsMyFile.Reg", 0, True
End Sub
'----------------------------------------------------------
MichD