CathyAstuce

VBA

GEMCCAP CONSEIL INFORMATIQUE BUREAUTIQUE
Formation - Conception Sites Internet
Applications Informatiques Personnalisées
Communauté partenaire Microsoft

FICHIER INI

Dans un fichier INI, les données sont rangées par section, dans chaque section, vous avez 1 ou plusieurs données (appelé également Clé) qui ont une valeur. Cela se présente ainsi :

[section1]
Cle1=valeur
Cle2=valeur
[section2]
Cle1=valeur
Cle2=valeur

Pour lire une donnée appartient donc à un clé qui appartient à une section.
Pour travailler avec ce type de fichier, j'utilises les API (ce sont des fonctions qui permettent de travailler directement avec Windows). Ce système est un peu compliqué, mais si vous respectez bien la déclaration de ces API, vous pouvez travailler avec sans problème.
Lors de l'ouverture, si le fichier n'existe pas, il est créé.

'*****************
'Déclaration des API à retranscrire sans erreur
'*****************

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
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 String, _
ByVal lpString As Any, _
ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection& Lib "kernel32" Alias "GetPrivateProfileSectionA" _
(ByVal lpAppName As String, _
ByVal lpReturnedString As String, _
ByVal nSize As Long, _
ByVal lpFileName As String)

'*****************
'les procédures et fonctions
'*****************

Public Function ExisteSectionIni(Section As String, Fich As String) As Boolean
     Dim Retour As Long
     Dim Valeur As String

     Valeur = String(32767, 0) '32767 est la longueur maxi que peut avoir une section
' Retour représente la longueur de la section, donc si elle est supérieure à 0, elle existe

     Retour = GetPrivateProfileSection(Section, Valeur, 32766, Fich)
     If Retour > 0 Then ExisteSectionIni = True
End Function

Public Function LireCleIni(Section As String, Cle As String, Fich As String) As String
     Dim Retour As Long
     Dim Valeur As String

     Valeur = String(256, 0) 'ici on considère qu'une valeur ne sera pas de longueur supérieur à 256
' si vous travaillez avec des valeurs de grandes longueur augmentez ce chiffre.
     Retour = GetPrivateProfileString(Section, Cle, "", Valeur, 255, Fich)
     If Retour > 0 Then 'renvoie la longueur de la valeur
          Valeur = Left(Valeur, Retour) 'enlève les caractères en trop
     Else
          Valeur = "" 'elle n'existe pas
     End If
     LireCleIni = Valeur
End Function


Public Function EcrireCleIni(Section As String, Cle As String, Valeur As String, Fich As String) As Boolean
     Dim Retour As Long

     Retour = WritePrivateProfileString(Section, Cle, Valeur, Fich)
' en cas de succès, retour <> 0, en cas d'erreur, retour = 0
' hors toute valeur différente de 0 est considéré comme true par VBA

     EcrireCleIni = Retour
End Function

Sub EcrireDonnee()
     EcrireCleIni "Personne", "Nom", "MONIER", "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Monini.ini"
     EcrireCleIni "Personne", "Prénom", "Cathy", "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Monini.ini"
End Sub

Sub LireDonnee()
     Dim strNom As String, strPrenom As String

     strNom = LireCleIni("Personne", "Nom", "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Monini.ini")
     strPrenom = LireCleIni("Personne", "Prénom", "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Monini.ini")
     MsgBox strNom & " " & strPrenom
End Sub

Public Sub ListSectionIni(Section As String, Fich As String)
     Dim Retour As Long
     Dim ListValeur As String, UneVal As String
     Dim iPos As Integer

     ListValeur = String(32767, 0)'32767 est la longueur maxi que peut avoir une section
     Retour = GetPrivateProfileSection(Section, ListValeur, 32766, Fich)
     If Retour > 0 Then 'longueur de la section
          For iPos = 1 To Retour 'on parcourt toute la variable depuis le 1er caractère au dernier
               If Mid(ListValeur, iPos, 1) = Chr(0) Then 'si le caractère est un caractère nul alors on est à la fin d'une clef
                    MsgBox UneVal
                    UneVal = "" 'on réinitialise la variable
               Else
                    UneVal = UneVal & Mid(ListValeur, iPos, 1) 'on ajoute à la variable chaque caractère lu
               End If
          Next
     End If
End Sub

Sub LireSection()
     ListSectionIni "Personne", "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Monini.ini"
End Sub

AccueilDébut de la page