Sauvegarde d'un tableau pour le récupérer [Résolu]

Signaler
Messages postés
44
Date d'inscription
mardi 16 février 2010
Statut
Membre
Dernière intervention
28 juillet 2010
-
Messages postés
44
Date d'inscription
mardi 16 février 2010
Statut
Membre
Dernière intervention
28 juillet 2010
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Messages postés
44
Date d'inscription
mardi 16 février 2010
Statut
Membre
Dernière intervention
28 juillet 2010

Merci,

mais comment fait-on ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
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)
Messages postés
44
Date d'inscription
mardi 16 février 2010
Statut
Membre
Dernière intervention
28 juillet 2010

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

Messages postés
31
Date d'inscription
mardi 12 septembre 2006
Statut
Membre
Dernière intervention
5 mai 2011

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
Messages postés
44
Date d'inscription
mardi 16 février 2010
Statut
Membre
Dernière intervention
28 juillet 2010

merci beaucoup, tout cela marche ! merci encore.
Messages postés
44
Date d'inscription
mardi 16 février 2010
Statut
Membre
Dernière intervention
28 juillet 2010

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