Sauvegarde d'une combobox dans un fichier

Résolu
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010 - 3 févr. 2007 à 00:39
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010 - 8 févr. 2007 à 09:05
Hello,

J'ai utilisé le code suivant disponible sur le forum pour sauvegarder ma listbox:

<li>PrivateSub Command1_Click()
</li><li>Call Ouvreliste(Me.ListBox1)
</li><li>EndSub</li><li>
</li><li>PrivateSub Command2_Click()
</li><li>Call Sauveliste(Me.ListBox1)
</li><li>EndSub</li><li>
</li><li>PrivateSub Sauveliste(LaListe As ListBox)
</li><li>Open App.Path & "" & "laliste.lst" For Output As 1
</li><li>For i = 0 To List1.ListCount - 1
</li><li> LaListe.ListIndex = i
</li><li>Print #1, LaListe.Text
</li><li>Next</li><li>Close 1
</li><li>EndSub</li><li>PrivateSub Ouvreliste(LaListe As ListBox)
</li><li>Open App.Path & "" & "laliste.lst" For Input As 1
</li><li>Do Until EOF(1)
</li><li>Line Input #1, Str
</li><li> LaListe.AddItem Str
</li><li>Loop</li><li>Close 1
</li><li>EndSub</li>

Je voudrais appeler cette procédure d'une autre form.
Mais lorsque je tape
Call frmAutreForm.Sauveliste(Me.ListBox1) , il y a erreur.
Comment faire ?

9 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 févr. 2007 à 14:37
salut,
ce n'est pas parce que tu appelles une_autre_form.fonction que la fonction se copie miraculeusement dans l'autre form....

le code est correct, il faut juste mettre les sub en public et les préfixer de la form propriétaire, ou copier les sub dans un module (déclarées tout de même en public)

nb : on met "option explicit" en début de chaque fichier (.frm, .bas, etc...), çà force à déclarer les variables...

pour dire de coupler tout çà, çà donne ...

'FORM
Option Explicit

Private Sub Command1_Click()
'  
CHARGE
    Call ListBoxResource(Me.List1, LA_Read)
End Sub

Private Sub Command2_Click()
'  
SAUVE
    Call ListBoxResource(Me.List1, LA_Write)
End Sub

'MODULE
Option Explicit
Public Enum ListAction
    LA_Read
    LA_Write
End Enum

Public Sub ListBoxResource(ByRef oList As ListBox, eAction As ListAction)
    On Error GoTo Lbl_Exit
    Dim sPath As String, FF As Integer

'   chemin fichier
    sPath =  App.Path
    If RightB$(sPath, 2) <> "" Then sPath = sPath & ""
    sPath = sPath & "laliste.lst"

'   numéro
libre
    FF = FreeFile
    
    If eAction = LA_Read Then
'       charge la listbox à partir du
fichier
        Dim sLine As String
        oList.Clear
        Open sPath For Input As #FF
            Do Until EOF(FF)
                Line Input #FF, sLine
                oList.AddItem sLine
            Loop
        Close #FF
    Else
'       charge le fichier à partir de la
listbox
        Dim i As Integer
        Open sPath For Output As #FF
            For i = 0 To oList.ListCount - 1
                Print #FF, oList.List(i)
            Next
        Close #FF
    End If

Lbl_Exit:
    If Err.Number <> 0 Then Err.Clear
End Sub

<small>Coloration
syntaxique automatique [AFCK] </small>
       

++
PCPT  [AFCK]
<hr size ="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 févr. 2007 à 00:53
Salut,

rajoute le paramètre Form dans la sub, et modifie aussi l'appel :

Private Sub Sauveliste(oForm As Form, LaListe As ListBox)
    Open App.Path & "" & "laliste.lst" For Output As 1
        For i = 0 To oForm.List1.ListCount - 1
            LaListe.ListIndex = i
            Print #1, LaListe.Text
        Next
    Close 1
End Sub

' puis, quand t'as besoins :

Call frmAutreForm.Sauveliste(Me, ListBox1)

~ <small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 févr. 2007 à 00:55
Arf, je suis allez trop vite, j'en ai oublié un :
change
        For i = 0 To oForm.<strike>List1</strike>.ListCount - 1
pour
        For i = 0 To oForm.LaListe.ListCount - 1

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010
3 févr. 2007 à 01:54
J'ai fait ce que tu m'as conseillé

Call frmAutreForm.Sauveliste(Me, ListBox1)

Mais il ne reconnait pas la variable ListBox1 (variable not defined !)

Pour le chargemebt pas de probleme.

Bizarre !

même en codant: Call frmAutreForm.Sauveliste(Me. ListBox1)

Que faire ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 févr. 2007 à 04:16
Remplace peut-être ListBox1 par List1. C'est le nom de ta ListBox que tu dois mettre.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
3 févr. 2007 à 16:33
tu pouvais regrouper tes 2 topics....
0
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010
4 févr. 2007 à 13:17
Hello,

J'ai pris note de ce que vous me proposez.
Peut-être que Call frmAutreForm.Sauveliste(Me. ListBox1
)ne fonctionne pas parce que ma feuille n'est pas "loadée". qu'en pensez-vous ?

Je vais la "loader", et si toujours un bug, je vais faire cue que tu me proposes PCPT
Merci et à bientot
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 févr. 2007 à 14:21
si elle n'est pas loadée, l'appel de la fonction (rappel : qui n'existe pas!!!!!) loaderait alors la form sans l'afficher (load, pas show)
0
nono78220 Messages postés 181 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 28 octobre 2010
8 févr. 2007 à 09:05
Hello,

En créant le module cela fonctionne.
Pour appeler la fonction "enregistrer" d'une autre form, j'ai tout simplement remplacé

Call ListBoxResource(Me.List1, LA_Write)

par

Call ListBoxResource(form.list1, LA_Write)

Merci à toi PCPT pour ton code.
Nono
0
Rejoignez-nous