Sauvegarde d'un tableau pour le récupérer

Résolu
Ackby Messages postés 44 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 28 juillet 2010 - 27 févr. 2010 à 13:24
Ackby Messages postés 44 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 28 juillet 2010 - 28 févr. 2010 à 11:45
Bonjour,

j'ai constitué un tableau sous vb, je lui affecte une valeur pour une ligne donnée (cf. programme joint), Je voudrais maintenant le sauvegarder pour le récupérer dans la prochaine séquence. Or, lorsuqe je relance le programme, il est recréé à nouveau avec toutes les valeurs à 0.
Comment faire pour :
1. sauvegarder le tableau (sous le disque C par exemple)
2. le récupérer
Merci d'avance de votre aide.


Dim tabaht(6720) As Integer
If tabaht(iddeb) = 1 Then
MsgBox ("Réservation impossible car la plage est déjà réservée !")
Else
MsgBox ("Le créneau vous est réservé.")
tabaht(iddeb) = 1
End If

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 févr. 2010 à 08:57
Bonjour, Ackby,
te rends-tu compte de la lourdeur évitable de tous tes select case ?
Je m'attaque par exemple au plus long des deux, à savoir :
Select Case List1(0)
  Case "00:00": hdeb = 1
  Case "00:30": hdeb = 2
  Case "01:00": hdeb = 3
........
end select

Bé ! ===>> au bout du comùpte, on voit que tu incrémente d'une unité à chaque période de 30 minutes, c'est tout !
Dans ce cas, tout bêtement et directement :
hdeb = (DateDiff("n", TimeValue("00:00"), List1(0)) \ 30) + 1

tu n'aurais par ailleurs même pas besoin de ce calcul si, dans ta liste, les heures étaient triées par ordre croissant, car il te suffirait alors de donner à ta variable hdeb la valeur + 1 de l'indice sélectionné dans ta liste ! (idem pour tes jours, dans ton autre liste)
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 févr. 2010 à 14:22
Bonjour,

VB6 ne garde pas "en son sein" les valeurs affectées dynamiquement aux variables.
Si tu veux les sauvegarder et les réutiliser, il te faut nécessairement les stocker en dur ailleurs (dans un fichier texte, par exemple ===>> stockage en écriture ===>> réutilisation/affectation après lecture)

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Ackby Messages postés 44 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 28 juillet 2010
27 févr. 2010 à 14:32
Merci,

mais comment fait-on ?
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 févr. 2010 à 14:35
Salut
Une solution peut consister à stocker ces valeurs dans un fichier.
Un exemple tout simple :
Private Sub Sauver()
    Dim ff As Long
    Dim r As Long
    ff = FreeFile
    Open App.Path & "\sauvegarde.txt" For Output As #ff
        For r = 0 To 6720
            Print #ff, Str(tabaht(r))
        Next r
    Close #ff
End Sub

Private Sub Rappeler()
    Dim ff As Long
    Dim r As Long
    Dim sTemp As String
    ff = FreeFile
    Open App.Path & "\sauvegarde.txt" For Input As #ff
        For r = 0 To 6720
            Line Input #ff, sTemp
            tabaht(r) = CInt(sTemp)
        Next r
    Close #ff
End Sub

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
Ackby Messages postés 44 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 28 juillet 2010
27 févr. 2010 à 14:54
merci beaucoup, voici mon code, comment dois-je insérer les deux procédures proposées (si je les mets à la suite, elles ne sont pas prises en compte) ?

Merci d'avance.





Private Sub Picture8_Click()
                                            ' calcul du numéro
Dim jour As Integer
Dim hdeb As Integer
Dim semaine As Integer
Dim iddeb As Integer
Select Case Combo15(0)
Case "Lu": jour = 1
Case "Mar": jour = 2
Case "Mer": jour = 3
Case "Jeu": jour = 4
Case "Ven": jour = 5
Case "Sam": jour = 6
Case "Dim": jour = 7
End Select
Select Case List1(0)
Case "00:00": hdeb = 1
Case "00:30": hdeb = 2
Case "01:00": hdeb = 3
Case "01:30": hdeb = 4
Case "02:00": hdeb = 5
Case "02:30": hdeb = 6
Case "03:00": hdeb = 7
Case "03:30": hdeb = 8
Case "04:00": hdeb = 9
Case "04:30": hdeb = 10
Case "05:00": hdeb = 11
Case "05:30": hdeb = 12
Case "06:00": hdeb = 13
Case "06:30": hdeb = 14
Case "07:00": hdeb = 15
Case "07:30": hdeb = 16
Case "08:00": hdeb = 17
Case "08:30": hdeb = 18
Case "09:00": hdeb = 19
Case "09:30": hdeb = 20
Case "10:00": hdeb = 21
Case "10:30": hdeb = 22
Case "11:00": hdeb = 23
Case "11:30": hdeb = 24
Case "12:00": hdeb = 25
Case "12:30": hdeb = 26
Case "13:00": hdeb = 27
Case "13:30": hdeb = 28
Case "14:00": hdeb = 29
Case "14:30": hdeb = 30
Case "15:00": hdeb = 31
Case "15:30": hdeb = 32
Case "16:00": hdeb = 33
Case "16:30": hdeb = 34
Case "17:00": hdeb = 35
Case "17:30": hdeb = 36
Case "18:00": hdeb = 37
Case "18:30": hdeb = 38
Case "19:00": hdeb = 39
Case "19:30": hdeb = 40
Case "20:00": hdeb = 41
Case "20:30": hdeb = 42
Case "21:00": hdeb = 43
Case "21:30": hdeb = 44
Case "22:00": hdeb = 45
Case "22:30": hdeb = 46
Case "23:00": hdeb = 47
Case "23:30": hdeb = 48
End Select
semaine = Combo16(0)
iddeb = 336 * (semaine - 1) + 48 * (jour - 1) + hdeb
                                                                                ' fin du numéro
Dim tabaht(6720) As Integer
MsgBox (iddeb)

MsgBox (tabaht(iddeb))
If tabaht(iddeb) = 1 Then
MsgBox ("Réservation impossible car la plage " & List1(0) & " du " & Combo15(0) & " de la semaine " & Combo16(0) & " est déjà réservée !")
Else
MsgBox ("Le créneau " & List1(0) & " du " & Combo15(0) & " de la semaine " & Combo16(0) & " vous est réservé.")
tabaht(iddeb) = 1
MsgBox (tabaht(iddeb))
End If

End Sub

0
ouat19 Messages postés 31 Date d'inscription mardi 12 septembre 2006 Statut Membre Dernière intervention 5 mai 2011
27 févr. 2010 à 15:53
cree un nouveau module et insert ce code:

Public Sub Sauver()
Dim ff As Long
Dim r As Long
ff = FreeFile
Open App.Path & "\sauvegarde.txt" For Output As #ff
For r = 0 To 6720
Print #ff, Str(tabaht(r))
Next r
Close #ff
End Sub

Public Sub Rappeler()
Dim ff As Long
Dim r As Long
Dim sTemp As String
ff = FreeFile
Open App.Path & "\sauvegarde.txt" For Input As #ff
For r = 0 To 6720
Line Input #ff, sTemp
tabaht(r) = CInt(sTemp)
Next r
Close #ff
End Sub



Ensuite tu pourra faire appel au différentes procédure inscrite dans ton module
exemple pour la sauvegarde voici le code

Private Sub Picture8_Click()
' calcul du numéro
Dim jour As Integer
Dim hdeb As Integer
Dim semaine As Integer
Dim iddeb As Integer
Select Case Combo15(0)
Case "Lu": jour = 1
Case "Mar": jour = 2
Case "Mer": jour = 3
Case "Jeu": jour = 4
Case "Ven": jour = 5
Case "Sam": jour = 6
Case "Dim": jour = 7
End Select
Select Case List1(0)
Case "00:00": hdeb = 1
Case "00:30": hdeb = 2
Case "01:00": hdeb = 3
Case "01:30": hdeb = 4
Case "02:00": hdeb = 5
Case "02:30": hdeb = 6
Case "03:00": hdeb = 7
Case "03:30": hdeb = 8
Case "04:00": hdeb = 9
Case "04:30": hdeb = 10
Case "05:00": hdeb = 11
Case "05:30": hdeb = 12
Case "06:00": hdeb = 13
Case "06:30": hdeb = 14
Case "07:00": hdeb = 15
Case "07:30": hdeb = 16
Case "08:00": hdeb = 17
Case "08:30": hdeb = 18
Case "09:00": hdeb = 19
Case "09:30": hdeb = 20
Case "10:00": hdeb = 21
Case "10:30": hdeb = 22
Case "11:00": hdeb = 23
Case "11:30": hdeb = 24
Case "12:00": hdeb = 25
Case "12:30": hdeb = 26
Case "13:00": hdeb = 27
Case "13:30": hdeb = 28
Case "14:00": hdeb = 29
Case "14:30": hdeb = 30
Case "15:00": hdeb = 31
Case "15:30": hdeb = 32
Case "16:00": hdeb = 33
Case "16:30": hdeb = 34
Case "17:00": hdeb = 35
Case "17:30": hdeb = 36
Case "18:00": hdeb = 37
Case "18:30": hdeb = 38
Case "19:00": hdeb = 39
Case "19:30": hdeb = 40
Case "20:00": hdeb = 41
Case "20:30": hdeb = 42
Case "21:00": hdeb = 43
Case "21:30": hdeb = 44
Case "22:00": hdeb = 45
Case "22:30": hdeb = 46
Case "23:00": hdeb = 47
Case "23:30": hdeb = 48
End Select
semaine = Combo16(0)
iddeb = 336 * (semaine - 1) + 48 * (jour - 1) + hdeb
' fin du numéro
Dim tabaht(6720) As Integer
MsgBox (iddeb)

MsgBox (tabaht(iddeb))
If tabaht(iddeb) = 1 Then
MsgBox ("Réservation impossible car la plage " & List1(0) & " du " & Combo15(0) & " de la semaine " & Combo16(0) & " est déjà réservée !")
Else
MsgBox ("Le créneau " & List1(0) & " du " & Combo15(0) & " de la semaine " & Combo16(0) & " vous est réservé.")
tabaht(iddeb) = 1
MsgBox (tabaht(iddeb))
End If

call sauver()

End Sub


pour le rappeler voici ce que tu dois faire

soit au chargement de ton formulaire tu fais appel à ta procédure rappeler
ou bien tu met un bouton de commande qui va faire appel a ta procédure
0
Ackby Messages postés 44 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 28 juillet 2010
27 févr. 2010 à 23:34
merci beaucoup, tout cela marche ! merci encore.
0
Ackby Messages postés 44 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 28 juillet 2010
28 févr. 2010 à 11:45
Bonjour,

je débute ! Merci beaucoup pour ce truc qui va singulièrement alléger mes programmes (ce d'autant que j'en ai une dizaine de ce type). Merci encore.

Cordialement
0
Rejoignez-nous