Lire un fichier .INI et stocker des paramètres

richert90

XLDnaute Occasionnel
Bonjour à tous,

Voici mon Problème: j'aimerais lire un fichier .ini sur Excel pour pouvoir ensuite stocker dans des variables sur VBA des paramètres enregistrés sur ce fichier INI.
Le fichier INI est de cette forme:
Code:
[DATABASE]
serverName=Server1
dataBaseName=ICSPARLA
tableName=T_ID
userName=linea
passWord=ok
authMode=sqlserver

Je veux donc lire ce fichier ini puis stocker les paramètres c'est à dire "Server1", "ICSPARLA", "T_ID", "linea", "ok","sqlserver" dans des variables Excel (en fait ce sont tous les mots à droite du "=" que je souhaite extraire du fichier Ini" mais je n'arrive pas à lire ce fichier ini (malgré des recherches sur différents forums) et je ne connais pas la syntaxe qui me permet de garder que les paramètres du fichier Ini).

Merci de m'aider
Cordialement,
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Lire un fichier .INI et stocker des paramètres

Bonjour Richert90

Voici le code que j'utilise pour récupérer ou écrire dans les fichiers INI
VB:
' Fonctions API pour lire et écrire dans les fichier INI
Public 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


Public 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


Public Function EcrireIni(stSection As String, stKey As String, stValeur As String)
' Ecriture d'une valeur dans un fichier INI
' stSection est le la partie designée entre crochets ([option] par exemple)
' stKey est le nom de la clé à récupérer (COULEUR=... par exemple)
' stValeur est la valeur à stocker
Dim FicIni As String, lgRep As Long
FicIni = "C:\MonChemin\NomFichier.ini"
' Mise en place du buffer de lecture
lgRep = WritePrivateProfileString(stSection, stKey, stValeur, FicIni)
If lgRep <= 0 Then
    ' Erreur au niveau du fichier INI
    EcrireIni = "Erreur"
    Exit Function
End If
End Function


Public Function LireIni(stSection As String, stKey As String)
' Lecture d'une valeur dans un fichier INI
' stSection est le la partie designée entre crochets ([option] par exemple)
' stKey est le nom de la clé à récupérer (COULEUR=... par exemple)
Dim stBuf As String, FicIni As String, lgBuf As Long, lgRep As Long
FicIni = "C:\MonChemin\NomFichier.ini"
' Mise en place du buffer de lecture
stBuf = Space$(255)
lgBuf = 255
lgRep = GetPrivateProfileString(stSection, stKey, "", stBuf, lgBuf, FicIni)
If lgRep <= 0 Then
    ' Erreur au niveau du fichier INI
    'LireIni = "Erreur"
    Exit Function
End If
LireIni = Trim$(Left$(stBuf, lgRep))
End Function

Ensuite pour récupérer les valeurs dans tes variables, il suffit d'appeler la fonction
Code:
MaVariable =  LireIni("DATABASE", "serverName")


A+
 

richert90

XLDnaute Occasionnel
Re : Lire un fichier .INI et stocker des paramètres

Merci beaucoup pour ta réponse BrunoM45.
Pour les 2 fonctions API (Public Declare Function....) je les place dans les modules ? D'ailleurs si je veux utiliser que la lecture je peux mettre que ça:

Code:
Public 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

Public Function LireIni(stSection As String, stKey As String)
' Lecture d'une valeur dans un fichier INI
' stSection est le la partie designée entre crochets ([option] par exemple)
' stKey est le nom de la clé à récupérer (COULEUR=... par exemple)
Dim stBuf As String, FicIni As String, lgBuf As Long, lgRep As Long
FicIni = "C:\MonChemin\NomFichier.ini"
' Mise en place du buffer de lecture
stBuf = Space$(255)
lgBuf = 255
lgRep = GetPrivateProfileString(stSection, stKey, "", stBuf, lgBuf, FicIni)
If lgRep <= 0 Then
    ' Erreur au niveau du fichier INI
   'LireIni = "Erreur"
   Exit Function
End If
LireIni = Trim$(Left$(stBuf, lgRep))
End Function

?
 
C

Compte Supprimé 979

Guest
Re : Lire un fichier .INI et stocker des paramètres

Re,

Il faut placer le code dans un module effectivement,
comme la fonction est déclarée "Public" tu peux l'appeler ensuite de n'importe où

Si tu ne veux utiliser que la lecture, tu as juste à prendre le code que tu as mis ;)

A+
 

richert90

XLDnaute Occasionnel
Re : Lire un fichier .INI et stocker des paramètres

Re

Encore une dernière question concernant ce sujet:
Comment peut-on afficher des messages d'erreurs explicite lorsque par exemple le nom de la base rentrée dans le fichier INI ne correspond pas aux bases présentes sur le serveur?

J'ai déjà pu "cacher" le message que me met Excel (car il est peu explicite) si un des paramètres ne correspond pas grâce à l'instruction:
Code:
On Error Resume Next
puis j'ai fait une condition avec un message d'erreur plus explicite pour dire qu'il y avait une erreur dans un des paramètres du fichier de configuration .ini mais le problème c'est que j'aimerais pouvoir dire quel(s) paramètre(s) ne correspond pas pour que l'utilisateur sache directement quel paramètre modifier.

Merci d'avance de m'aider
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Lire un fichier .INI et stocker des paramètres

Re,

Dans la fonction il faut enlever l’apostrophe d’annotation
Code:
'LireIni = "Erreur"
Comme ça quand tu vas chercher un paramètre, s'il est manquant tu as en retour "Erreur"
Tu peux donc ensuite indiquer à loisir quel paramètre est manquant

A+
 

richert90

XLDnaute Occasionnel
Re : Lire un fichier .INI et stocker des paramètres

Re

Oui d'accord si il manque un paramètre mais si un paramètre rentré dans le fichier .ini n'est pas bon?
Si par exemple dans le fichier ini j'ai :
Code:
[DATABASE]
serverName=Server1
et en fait le server1 n'existe pas sur le serveur, c'est la dessus que je bloque.
 

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 009
dernier inscrit
dede972