Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
AutoCAD et VBA
15 avril 2010

Sauvegarder les valeurs d'un formulaire en vba

Aujourd'hui, je vous propose une série de fonctions très utiles pour sauvegarder un formulaire : ainsi, la prochaine fois que vous l'ouvrirez, vous retrouverez toutes vos valeurs, sans devoir les retaper.

Pour se faire, les valeurs des textbox, combobox et optionbuttons sont écrites dans un fichier ini stocké dans le répertoire temporaire  :
C:\Documents and Settings\<<NOM UTILISATEUR>>\Local Settings\Temp

Ce fichier ini se présentera sous la forme suivante :

[NomDuFormulaire]
optionbutton1=Vrai
textbox1=Valeur de la textbox1
combobox1=Valeur de la combobox1
etc.

Si dans votre programme, vous avez plusieurs formulaires, le fichier ini rajoutera à la suite les autres formulaires sauvegardés :

[NomDuFormulaire_1]
optionbutton1=Vrai
textbox1=Valeur de la textbox1
combobox1=Valeur de la combobox1
[NomDuFormulaire_2]
optionbutton1=Vrai
textbox1=Valeur de la textbox1
combobox1=Valeur de la combobox1
etc.

Je n'ai pas implémenté la sauvegarde des listbox, mais elle se fait de la même manière que les autres contrôles.

Voici donc les fonctions, qui sont à copier dans un module à part, par exemple FichierIni.

La constante NomFichierIni à la 3e ligne indique le nom du fichier ini à sauvegarder. Je vous conseille d'y mettre le nom de votre application, vous le retrouverez plus facilement dans le répertoire temp si par hasard vous deviez intervenir dedans (le fichier ini est éditable avec le bloc note de Windows).


Option Explicit

'Nom du fichier ini à écrire :
    '---------------------------------
Const NomFichierIni = "Nom_du_fichier.ini"
    '---------------------------------
   
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Function EcrireFichierIni(Entete As String, Cle As String, Valeur As String)
    WritePrivateProfileString Entete, Cle, Valeur, RepTemp & NomFichierIni
End Function

Function LireFichierIni(Entete As String, Cle As String) As String
Dim Ret As String, NC As Long
    Ret = String(255, 0)
    NC = GetPrivateProfileString(Entete, Cle, "Default", Ret, 255, RepTemp & NomFichierIni)
    If NC <> 0 Then Ret = Left$(Ret, NC)
    LireFichierIni = Ret

   On Error GoTo 0
   Exit Function

LireFichierIni_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") dans la procédure LireFichierIni du Module FichierIni"
End Function

'Repertoire temporaire sous Local Settings :
Private Function RepTemp() As String
Dim Buf As String * 128
Dim Value As Integer

Value = GetTempPath(128, Buf)
RepTemp = Left(Buf, Value)

End Function

'Function SauverFormulaire(formulaire As UserForm) As Boolean
Function SauverFormulaire(formulaire As UserForm, NomForm As String) As Boolean
Dim ctrl As Control

    'Mise en mémoire de chaque valeurs du formulaire
    For Each ctrl In formulaire.Controls
    If TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Or TypeOf ctrl Is OptionButton Then
        EcrireFichierIni NomForm, ctrl.Name, ctrl.Value
    End If
    Next ctrl
End Function

Function InitialiserFormulaire(formulaire As UserForm, NomForm As String) As Boolean
Dim ctrl As Control
Dim Valeur As String

    'Mise en mémoire de chaque valeurs du formulaire
    For Each ctrl In formulaire.Controls
    If TypeOf ctrl Is TextBox Or TypeOf ctrl Is ComboBox Or TypeOf ctrl Is OptionButton Then
        Valeur = LireFichierIni(NomForm, ctrl.Name)
        If Valeur <> "Default" Then
            If Valeur = "Vrai" Then
                ctrl.Value = True
            ElseIf Valeur = "Faux" Then
                ctrl.Value = False
            Else
                ctrl.Value = Valeur
            End If
        Else
            Exit Function
        End If
    End If
    Next ctrl
End Function



L'utilisation de ces fonctions est très simple :

Pour charger dans un formulaire les valeurs sauvegardées, il faut rajouter telle quelle dans la procédure d'initialisation du formulaire cette ligne :


Private Sub UserForm_Initialize()
    InitialiserFormulaire Me, Me.Name
End Sub


Pour sauvegarder les valeurs du formulaire, il faut rajouter cette ligne dans la procédure de fermeture du formulaire :


Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    SauverFormulaire Me, Me.Name
End Sub


Ces fonctions sont utilisables pour n'importe quel type d'application utilisant le vba : Excel, Word, AutoCAD etc.

Publicité
Publicité
Commentaires
AutoCAD et VBA
Publicité
Derniers commentaires
Publicité