CathyAstuce

VBA

GEMCCAP CONSEIL INFORMATIQUE BUREAUTIQUE
Formation - Conception Sites Internet
Applications Informatiques Personnalisées
Communauté partenaire Microsoft

FICHIER SÉQUENTIEL

Dans un fichier séquentiel, vous stockez vos données un peu comme dans une liste ou une table. Il contient des enregistrements avec plusieurs champs (ou valeurs).
Les enregistrements sont écrits et lus ligne par ligne, ils n'ont pas forcément la même longueur, ni le même nombre de champ (bien que pour une meilleure gestion il soit préférable de les construire sur un même nombre de champ).
Vous ne pouvez pas vous placez sur un enregistrement précis, vous êtes obligé de lire tous les enregistrements du 1er à celui recherché.
Pour ouvrir un fichier en lecture ou écriture, vous devez connaître au préalable le prochain numéro de fichier libre, ce numéro permet ensuite de différencier les différents fichiers ouverts.
Lors de l'ouverture, si le fichier n'existe pas, il est créé.

'*****************
'sequentiel
'*****************

Public Sub AjoutDonnee(strContent As String, strChemFich As String)
     Dim F As Integer

     F = FreeFile '1er numéro libre
     Open strChemFich For Append As #F 'ouvert en ajout
     Print #F, strContent ' écrit dans le fichier dont le numéro est F
     Close #F
End Sub

Public Sub AjoutValeurs(Val1 As String, Val2 As Integer, Val3 As Date, strChemFich As String)
     Dim F As Integer

     F = FreeFile '1er numéro libre
     Open strChemFich For Append As #F 'ouvert en ajout
' écrit dans le fichier dont le numéro est F
' avec write (contrairement à Print) chaque valeur est séparée par une virgule,
' le texte est entouré de guillemets, les dates sont entouré par des #

     Write #F, Val1, Val2, Val3
     Close #F
End Sub

Sub EcritSequentiel()
' dans les lignes suivantes nous ajoutons des donnés à 2 fichiers seq1.txt et seq2.txt
' l'extension txt vous permet d'ouvrir les fichiers facilement pour vérifier le travail
' mais vous pouvez inventer n'importe quelle extension de 2 ou 3 lettres (cat par exemple)
' cela fonctionne de la même manière et personne ne saura ouvrir votre fichier (à par les petits futés)


     AjoutDonnee "Ceci est mon 1er essai d'écriture", "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq1.txt"
     AjoutDonnee "Ceci est ma 2ème ligne", "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq1.txt"
     AjoutValeurs "Monier", 1, Date - 2, "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq2.txt"
     AjoutValeurs "Cathy", 2, Date - 1, "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq2.txt"
     AjoutValeurs "Monier Cathy", 3, Date, "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq2.txt"
End Sub

Public Sub LitDonnee(strChemFich As String)
     Dim F As Integer
     Dim strLigne As String

     F = FreeFile '1er numéro libre
     Open strChemFich For Input As #F 'ouvert en lecture
     While Not EOF(F)
          Line Input #F, strLigne 'lit la ligne entière et l'attribue à la variable strLigne
          MsgBox strLigne
     Wend
     Close #F
End Sub

' Line Input est conseillé pour lire ce qui est écrit avec Print
' Pour lire les données séparées par des virgules écrites avec Write, vous devez utiliser Input


Public Sub LitValeurs(strChemFich As String)
     Dim F As Integer
     Dim Val1 As String, Val2 As Integer, Val3 As Date

     F = FreeFile '1er numéro libre
     Open strChemFich For Input As #F 'ouvert en lecture
     While Not EOF(F)
          Input #F, Val1, Val2, Val3 'lit chaque valeur de la ligne et les attribue aux variables correspondantes
          MsgBox Val1 & " - " & Val2 & " - " & Val3
     Wend
     Close #F
End Sub

Sub LitSequentiel()
     LitDonnee "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq1.txt"
     LitValeurs "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq2.txt"
End Sub

'le code suivant vous montre la complexité pour modifier un enregistrement,
' vous devez lire les enregistrements et les stocker dans un autre fichier
' jusqu'à celui que vous désirez remplacer

Sub RemplaceEnreg()
     Dim Fl As Integer, Fe As Integer
     Dim Val1 As String, Val2 As Integer, Val3 As Date
     Dim strChemFich As String, strChemFichTmp As String

     strChemFich = "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq2.txt"
     strChemFichTmp = "C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq2.tmp"
     Fl = FreeFile '1er numéro libre
     Open strChemFich For Input As #Fl 'ouvert en lecture
     While Not EOF(Fl)
          Input #Fl, Val1, Val2, Val3
          If Val2 = 2 Then 'on repère ici l'enregistrement à modifier
               Val1 = "Catherine" 'on modifie 2 valeurs
               Val3 = Date + 10
          End If
          Fe = FreeFile '2e numéro libre pour ouvrir le fichier temporaire
          Open strChemFichTmp For Append As #Fe 'ouvert en ajout
          Write #Fe, Val1, Val2, Val3 'on écrit puis on ferme
          Close #Fe
     Wend
     Close #Fl
' maintenant le fichier temporaire contient la copie du fichier d'origine
' avec 1 enregistrement modifié

     Kill strChemFich 'on supprime le fichier d'origine
     Name strChemFichTmp As strChemFich 'on renomme le fichier temporaire
End Sub

'l'exemple suivant écrit un contenu mais efface ce qui était écrit auparavent dans le fichier
' c'est pratique pour stocker une donnée et la mettre à jour

Sub EffaceContenu(strContent As String, Val1 As String, Val2 As Integer, Val3 As Date, strChemFich1 As String, strChemFich2 As String)
     Dim F As Integer

     F = FreeFile '1er numéro libre
     Open strChemFich1 For Output As #F 'ouvert en remplacement
     Print #F, strContent ' écrit dans le fichier dont le numéro est F
     Close #F
     F = FreeFile '1er numéro libre
     Open strChemFich2 For Output As #F 'ouvert en remplacement
     Write #F, Val1, Val2, Val3
     Close #F
End Sub

Sub EcritSeqRemplacement()
     EffaceContenu "Ceci est un remplacement", _
"TERRIER", 100, Date + 10, _
"C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq1.txt", _
"C:\Documents and Settings\Cathy\Mes documents\Formation\Internet\Vba\Seq2.txt"
End Sub

Après l'utilisation de ce dernier code, lancez LitSequentiel pour constater le changement

AccueilDébut de la page