Microsoft 365 Petit soucis avec la Base de Registre en VBA.

DenisHen

XLDnaute Nouveau
Bonjour à la communauté.
J'ai un petit soucis avec la Base de Ragistre Windows.
Je stocke quelques variables dans cette BD pour les retrouver ansuite sans problème, sachant que mes fichiers Excels sont sur le réseau et que les utilisateurs ont des "configuration" différentes.
J'ai donc ça lors du lancement de mon UserForm :
VB:
    Set WshShell = CreateObject("WScript.Shell")     
    TxtRepLocal.Value = WshShell.Regread("HKCU\Software\Bidule\RepLocal")
Mais si la Clef de Registre n'existe pas, le WshShell.Regread plante.
Comment faire pour créer cette clef si elle n'existe pas ?

Sachant que j'ai plusieurs WshShell.Regread :
VB:
    TxtRepLocal.Value = WshShell.Regread("HKCU\Software\Bidule\RepLocal")
    TxtRepReseau.Value = WshShell.Regread("HKCU\Software\Bidule\RepReseau")
    TxtFichBase.Value = WshShell.Regread("HKCU\Software\Bidule\FichBase")
 
Dernière édition:

wDog66

XLDnaute Occasionnel
Bonjour DenisHen,

Il faut mettre une gestion d'erreur pour moi
VB:
On Error Resume Next
Set WshShell = CreateObject("WScript.Shell")     
TxtRepLocal.Value = WshShell.Regread("HKCU\Software\Bidule\RepLocal")
If Err.Number <> 0 then
  ' La clé n'existe pas, l'écrire ou les écrires
  WshShell. RegWrite"HKCU\Software\Bidule\RepLocal\", "MonRépertoire", "REG_SZ"
End IF
On Error Goto 0

A+
 

jurassic pork

XLDnaute Occasionnel
vous savez que pour ça vous avez getsetting et savesetting
ce qui permet de se passer du shell si le pc est configurer avec le blocage de celui ci
Hello,
Le souci c'est qu'avec GetSetting et SaveSetting, on accède qu'à une petite partie de la base de registres.
Par exemple pour Excel 2021 c'est :
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\

Ami calmant, J.P
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
et il y a 7 ans je disais le contraire ici

diabolo.gif
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

[Suggestion en passant]
Si TxtRepLocal est le chemin d'un dossier qui change selon l'utilisateur, on peut ne pas passer par la base de registre et utiliser Environ et ou SpecialFolders
Sub ListEnvironVariables()
Dim strEnviron As String
Dim i As Long
For i = 1 To 255
strEnviron = Environ(i)
If LenB(strEnviron) = 0& Then Exit For
With Worksheets(1)
.Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1).Value = strEnviron
End With
Next
End Sub
et
Sub Specialfolders()
For Each strFolder In CreateObject("Wscript.Shell").Specialfolders
With Worksheets(1)
.Range("B" & Range("B" & Rows.Count).End(xlUp).Row + 1).Value = strFolder
End With
Next
End Sub
 

DenisHen

XLDnaute Nouveau
Bonjour à la communauté.
Un super grand merci à vous, je testerais ça dès que je le pourrais...
Et pour à jurassic pork, oui, c'est moi qui maitrise Bidule, j'y accède via Excel et aussi AutoCAD (via du LISP), parfois Word et je compte le faire plustard via Visual Studio...
Dommage que VBA n'a pas la fonction Excel "SiErreur"...
Raison pour laquelle j'évite d'utiliser HKEY_CURRENT_USER\Software\VB and VBA Program Settings\.
Encore un grand merci ! ! !
 

DenisHen

XLDnaute Nouveau
Ben finalement, j'ai trouvé 5 minutes... Et impécable ! ! !
VB:
  Dim WshShell As Object
  Set WshShell = CreateObject("WScript.Shell")  
  On Error Resume Next
  TxtRepLocal.Value = WshShell.Regread("HKCU\Software\Bidule\RepLocal")
  If Err.Number <> 0 Then WshShell.RegWrite "HKCU\Software\Bidule\RepLocal\", ThisWorkbook.Path, "REG_SZ"
  On Error Resume Next
  TxtRepLocal.Value = WshShell.Regread("HKCU\Software\Bidule\RepReseau")
  If Err.Number <> 0 Then WshShell.RegWrite "HKCU\Software\Bidule\RepReseau\", ThisWorkbook.Path, "REG_SZ"
  On Error Resume Next
  TxtRepLocal.Value = WshShell.Regread("HKCU\Software\Bidule\FichBase")
  If Err.Number <> 0 Then WshShell.RegWrite "HKCU\Software\Bidule\FichBase\", ThisWorkbook.Path, "REG_SZ"
Encore un MERCI ! ! !
 

patricktoulon

XLDnaute Barbatruc
re
Attention les gestion d'erreur c'est bien mais loin d'être suffisant
surtout sur W10 et 11 tu pourrais très bien rencontrer l'erreur tout simplement par ce qu'une mise a jour a bloqué l'accès au registre par robot et retour à la case départ

donc non perso je ne pense pas que une gestion d'erreur suffise
perso je préfèrerais gérer cela avec WMI
 

Statistiques des forums

Discussions
314 708
Messages
2 112 097
Membres
111 416
dernier inscrit
philipperoy83