Salut,
Ben mon petit Louis (tu permets que je t'appelle Louis ?), on n'a pas fini... mais on va essayer quand même ! Je vais citer un certains nombre de termes (simples) qu'il te faut connaître. Ils seront entre doubles guillemets (ou doubles quotes, en rosbeef...). Si tu maîtrises pas, il faut te renseigner...
Premier chapitre : Les radiosButtons
- Les radiosButtons (ou Boutons d'option) ont un fonctionnement particulier. Ils réagissent par groupe à l'intérieur d'un "conteneur", à l'inverse des "checkboxes", qui ont un fonctionnement indépendant les unes des autres. Ces conteneurs peuvent être des "Frames", des "Forms" (guillemets un peu osés, là), "PictureBoxes", etc...
- Cela veut dire que si l'un d'eux est "coché" ("VBChecked") par l'utilisateur, c'est à dire qu'il prend la valeur "True", les autres RadiosButtons seront tous "non cochés" ("VBUnchecked"), et si l'un deux l'était avant l'action utilisateur, il passera de "VBChecked" à "VBUnchecked" avec déclenchement de son propre "événement Click" correspondant.
Ce fonctionnement est vrai dans le "conteneur" quelque soit le nom ("Name") des RadiosButtons, qu'ils fassent ou non partie d'un "groupe de contrôles". De même, ou plutôt à contrario, des radiosButtons de même nom (du même "groupe"), répartis dans des "conteneurs" différents, auront des comportements liés dans chaque conteneur, mais indépendants d'un conteneur à l'autre.
Enfin, pour des raisons de clareté et de traitement informatique (simplifié ?), il est indispensable de rassembler logiquement les radiosButtons liés à des valeurs différentes d'un même concept non seulement dans une "Frame" particulière, mais aussi sous un même nom, et à les différencier avec un "index différent.
Exemple : Dans la "Form" Individu, on trouve deux "Frames", la Frame 'Etat Civil', qui contient 4 radioButtons, de libellés 'Célibataire', 'Marié(e)', 'Veuf(ve)' et 'Divorcé(e)', dont les noms sont OptEtatCivil(0) à OptEtatCivil(3), et la Frame 'Genre', contenant deux RadiosButtons 'Masculin' et 'Féminin', appelés OptSexe(0) et OptSexe(1).
C'est clair ?
Deuxième chapitre : Ton problème de sauvegarde
Avant d'attaquer, on supposera que :
1 - tu as choisi le type de fichier de stockage et le mode d'accès (voir discussions précédentes entre Base de registre, fichier .ini, ...). De ce que je comprend, on travaille ici avec de simples fichiers .txt, séquentiels Ascii.
2 - tu sais comment choisir un fichier par le composant CommonDialog ou autre, que tu sais où stocker ce fichier, vérifier que tu n'écrases pas un autre fichier déjà présent, etc... Bref, tout ça pour dire que, pour la suite de ma (longue) réponse, le fichier s'appelera MesOpt.dat et sera stocké dans le répertoire courant de l'application ("app.path"). Tu feras attention aux différences entre le mode "Run-Time" et le mode "Design".
3 - Les options sont lues dans le "Load" de la première Form, (Form1) et sauvegardées dans l' "unload" de la même. Il y a deux groupes d'options, correspondants, à l'exemple cité en 1 (Etat civil et Genre).
4 - Saches que, dans ce contexte, en environnement multi-utilisateur, si l'application est sur un serveur ou si le poste de travail sert à plusieurs personnes de logins différents, il y aura UN SEUL FICHIER commun a TOUS LES UTILISATEURS. On préfèrera dans ce cas un stockage dans la base de registre, clé HKEY_CURRENT_USER, voir pour cela SaveSettings et GetSettings (c'est une autre histoire).
5 - Un petit exemple, (enfin ! diras-tu...)
Attention, les contrôles effectués et la gestion d'erreurs sont minimalistes.
Tu peux, après avoir fais tourner le programme, retrouver et éditer le fichier des options via Vindoz, avec son éditeur (Notepad, Write, etc...)
Option Explicit
Private Sub cmdQuitter_Click()
' pour quitter l'application
Unload Me
End Sub
Private Sub Form_Load()
Dim strFichierOption As String, intNoFichier As Integer, strNomFichier As String
Dim strOpt As String, intNoOpt As Integer
On Error GoTo Erreur_Load
strNomFichier = "MesOpt.dat"
strFichierOption = App.Path & "" & strNomFichier
' on regarde si le fichier de sauvegarde n'existe pas
If Dir(strFichierOption) = "" Then
' il existe pas, alors on prévient
MsgBox "Fichier d'option " & strNomFichier & " introuvable dans " & App.Path & " Il sera créé par ce programme"
intNoFichier = FreeFile
' on cree le fichier avec les options par défaut, à savoir Célibataire, masculin
Open strFichierOption For Output As #intNoFichier
Write #intNoFichier, "EtatCivil", 0 'on aurait pu utiliser Input #intNoFichier
Write #intNoFichier, "Genre", 0
Close #intNoFichier
End If
' on est sûr qu'il existe, donc on le lit...
intNoFichier = FreeFile
Open strFichierOption For Input As #intNoFichier
Input #intNoFichier, strOpt, intNoOpt
' Traitement du résultat la lecture
Call pcdTraiterLectureOption(strOpt, intNoOpt)
Input #intNoFichier, strOpt, intNoOpt
' Traitement du résultat la lecture
Call pcdTraiterLectureOption(strOpt, intNoOpt)
Resume_Load:
Close #intNoFichier
Exit Sub
Erreur_Load:
MsgBox "Erreur au chargement de l'application : " & Err & "- " & Error
GoTo Resume_Load
End Sub
Private Sub pcdTraiterLectureOption(ByVal pstrOpt As String, ByVal pintNoOpt As Integer)
Select Case pstrOpt
Case "EtatCivil"
If pintNoOpt < 0 Or pintNoOpt > 3 Then
' valeur incorrecte !!!
MsgBox "Paramètre Etat Civil " & pintNoOpt & " en dehors des bornes autorisées"
Exit Sub
Else
' on positionne le bon radioButton
' dans notre cas, l'index du radioButton est egal à la valeur de l'option correspondante
' ca aide bien mais c'est pas obligatoire !
OptEtatCivil(pintNoOpt).Value = True
End If
Case "Genre"
If pintNoOpt < 0 Or pintNoOpt > 1 Then
' valeur incorrecte !!!
MsgBox "Paramètre Genre " & pintNoOpt & " en dehors des bornes autorisées"
Exit Sub
Else
' on positionne le bon radioButton
OptSexe(pintNoOpt).Value = True
End If
Case Else 'on trouve un autre parametre que le genre ou l'état civil...
MsgBox "Paramètre " & pstrOpt & " non traité"
End Select
End Sub
Private Sub Form_Unload(Cancel As Integer)
' sauvegarde des options
Dim strFichierOption As String, intNoFichier As Integer, strNomFichier As String
On Error GoTo Erreur_UnLoad
strNomFichier = "MesOpt.dat"
strFichierOption = App.Path & "" & strNomFichier
intNoFichier = FreeFile
' on se fout de savoir si le fichier existe encore ou pas (on peut l'avoir supprimé entre temps)
' car on recree tout systématiquement
Open strFichierOption For Output As #intNoFichier
Write #intNoFichier, "EtatCivil", fctEtatCivil
Write #intNoFichier, "Genre", fctSexe
Resume_UnLoad:
Close #intNoFichier
Exit Sub
Erreur_UnLoad:
MsgBox "Erreur à la fin de l'application : " & Err & "- " & Error
GoTo Resume_UnLoad
End Sub
Private Function fctEtatCivil() As Integer
Dim intBoucle As Integer
For intBoucle = 0 To 3 fctEtatCivil fctEtatCivil - intBoucle * (OptEtatCivil(intBoucle).Value True)
Next intBoucle
End Function
Private Function fctSexe() As Integer
Dim intBoucle As Integer
For intBoucle = 0 To 1 fctSexe fctSexe - intBoucle * (OptSexe(intBoucle).Value True)
Next intBoucle
End Function
Voilà, c'était un peu long. J'espère que ca te va !!!
Amitiés - Renaud -