Les
fichiers de données séquentiels
Le sommaire :
Les fichiers sont des documents textes que l’on peut manipuler à partir du code VISUAL BASIC.
Voici un exemple très simple qui va permettre l’ouverture d’un fichier texte.
Le mode d’accès qui va être utilisé et le mode séquentiel, c’est-à-dire que les lignes du fichier seront écrites et lues les unes à la suite des autres.
La première ligne de commande ouvre le fichier, la deuxième le ferme. Ce fichier s’appelle « Bonjour.txt » et il est situé dans la racine du disque dur.
Open
« c:\Bonjour.txt » For Output As #1
Close #1
Open est ‘l’instruction qui permet d’ouvrir le fichier.
«C:\ Bonjour.txt » est le fichier texte qui est ouvert avec son chemin.
Output signifie que le fichier est ouvert en mode création. Si le fichier existe déjà, son contenu est réinitialisé à zéro.
Pour ouvrir un fichier en mode ajout, il faut écrire Append à la place de Output. Quant à l’ouverture en lecture uniquement, vous devez utiliser Input.
Mais quoi qu’il en soit, Output, Append et Input permet d’accéder au fichier texte en mode séquentiel.
#1 est le numéro du canal. Chaque fichier ouvert doit être désigné par un canal, c’est à vous de déterminer la valeur du canal. Ultérieurement, dans le code du programme, le fichier ouvert doit être désigné à partir de son canal, et non plus son nom.
Le numéro du canal est toujours précédé du signe dièse, qui s’obtient par le raccourci clavier ALT GR +3 du pavé alphanumérique.
Si vous ouvrez plusieurs fichiers, vous ne devez pas leur donner le même numéro de canal.
Dans l’exemple qui suit, nous allons ouvrir le fichier « Bonjour.txt » pour y ajouter une ligne.
Cette ligne sera le contenu de la variable, LigneAjoute, et, l’instruction utilisée pour cette écriture sera Print.
‘ Déclaration de la variable LigneAjoute qui va contenir la ligne à ajouter
Dim LigneAjoute As String
‘ Affectation de la chaîne de caractères à ajouter
LigneAjoute = « Ceci va être ajouté »
‘ Ouverture du fichier Bonjour.txt en mode ajout
Open
« c:\Bonjour.txt » For Append As #1
‘ Écriture de la nouvelle ligne dans le fichier bonjour.txt
Print #1,LigneAjoute
‘Fermeture du fichier bonjour.txt
Close #1
Syntaxes de
l’instruction Print :
Print
Canal,Valeur
Le premier argument de « print » est le numéro du canal, précédé du signe dièse bien sûr, et le deuxième argument est la ligne à rajouter dans le fichier.
Voici maintenant un exemple qui propose la création du fichier « Notes.txt », l’écriture de 5 lignes et la fermeture du fichier.
Ensuite, un message annonce à l’écran la fin de l’écriture des 5 lignes dans le fichier.
Une boucle fait afficher à l’écran le contenu du fichier Notes.txt ligne par ligne.
Sub OuvertureFichier()
' Déclaration de la variable qui sera utilisée pour écrire et lire dans le fichier
Dim Ligne As String
' Ouverture et initialisation du fichier Notes.txt
Open
"c:\Notes.txt" For Output As #1
' Affectation de chaînes de caractères dans les 5 premières lignes du fichier
Ligne = "première ligne"
Print #1, Ligne
Ligne = "Deuxième ligne"
Print #1, Ligne
Ligne = "Troisième ligne"
Print #1, Ligne
Ligne = "Quatrième ligne"
Print #1, Ligne
Ligne = "Cinquième ligne"
Print #1, Ligne
' Fermeture du fichier
Close #1
MsgBox ("C'est terminé pour l'écriture du fichier ")
' Ouverture du fichier en lecture
Open
"C:\notes.txt" For Input As #1
' Tant que le fichier n'est pas fini
While Not EOF(1)
' Lecture de la ligne
Line Input #1, Ligne
' Affichage de la ligne courante qui vient d'être lue
MsgBox (Ligne)
Wend
' Fermeture du fichier
Close #1
End Sub
Vous remarquerez que pour la lecture, nous avons utilisé l’instruction :
Line Input suivie du numéro de canal et de la variable qui va recevoir le contenu de la ligne qui vient d’être lue dans le fichier.
Pour l’affichage des 5 lignes, nous avons utilisé une boucle qui vérifie si la fin du fichier est atteinte.
La fonction EOF avec le numéro du canal passé en paramètre, retourne la valeur vraie si la fin du fichier est atteinte.
Ici, comme nous souhaitions que la fin soit atteinte, nous avons placé l’opérateur Not devant la fonction EOF pour que le résultat soit inversé.
Dans la fonction EOF, le numéro de canal passé en paramètre ne doit pas être précédé du signe dièse.
Ici dans cet exemple, nous allons créer 2 macros.
Le but du jeu est de créer une note interne dans une collectivité, une convocation pour une réunion.
Il y aura autant de notes que de fonctionnaires enregistrés dans le fichier fonctionnaires.txt.
La première macro s’intitule Fonctionnaires, assignée au raccourci clavier CTRL +F8, elle permet d’enregistrer à n’importe quel moment un nouveau fonctionnaire dans le fichier texte fonctionnaires.txt.
La deuxième macro s’intitule Formulaire, assignée au raccourci clavier ALT +CTRL +F8, elle permet de créer autant de notes de services de convocations qu’il y a de fonctionnaires dans le fichier fonctionnaires.txt.
Les notes seront insérées dans le document ouvert et seront toutes séparées par un saut de page…
Sub Fonctionnaire()
'
' Fonctionnaire Macro
' Macro enregistrée le 21/03/2008 par BOULANGER
'
' déclarations des variables de saisie
Dim Titre As String * 25
Dim Prénom As String * 25
Dim Nom As String * 25
Dim Service As String * 25
' saisie d'un contact par l'utilisateur
Titre = InputBox("Veuillez saisir le titre", "Titre du fonctionnaire")
Prénom = InputBox("Veuillez saisir le prénom", "Prénom du contact")
Nom = InputBox("Veuillez saisir le prénom", "Nom du contact")
Service = InputBox("Veuillez saisir le service administratif du fonctionnaire", "Service administratif")
' Ajout du fonctionnaire dans le fichier texte fonctionnaires.txt
Open "c:\fonctionnaires.txt" For Append As #1
Print #1, Titre
Print #1, Prénom
Print #1, Nom
Print #1, Service
Close #1
MsgBox ("Enregistrement du fonctionnaire réalisé avec succès")
End Sub
Sub Formulaire()
'
' Formulaire Macro
' Macro enregistrée le 21/03/2008 par BOULANGER
'
' déclaration des variables nécessaires pour les données spécifiques au formulaires
Dim DateRéunion As String * 10
Dim HeureRéunion As String * 10
Dim SujetRéunion As String * 40
Dim LieuRéunion As String * 25
' Demande de renseignements à l'utilisateurs et affectations dans les variables
DateRéunion = InputBox("Veuillez saisir la date de la réunion", "Date")
HeureRéunion = InputBox("Veuillez saisir l'heure de la réunion", "Heure")
SujetRéunion = InputBox("Veuillez saisir le sujet de la réunion", "Sujet")
LieuRéunion = InputBox("Veuillez saisir le lieu de la réunion", "Lieu")
' Ouverture du fichier texte Fonctionnaires.txt
Open "c:\fonctionnaires.txt" For Input As #1
' boucle qui permet de lire et d'écrire tous les formulaires
While Not EOF(1)
' lecture du fichier et affectation dans les variables correspondantes
Line Input #1, Titre
Line
Input #1, Prénom
Line
Input #1, Nom
Line
Input #1, Service
' Création du formulaire pour le fonctionnaire courant
Ligne = Titre + " " + Prénom + " " + Nom
Selection.TypeText Text:=Ligne
Selection.TypeParagraph
Selection.TypeText Text:="Service : " + Service
Selection.TypeParagraph
Selection.TypeText Text:=Titre
Selection.TypeParagraph
Selection.TypeText Text:="J'ai le plaisir de vous convoquer à la réunion administrative qui aura lieue à " + HeureRéunion + " le " + DateRéunion + " à " + LieuRéunion + "."
Selection.TypeParagraph
Selection.TypeText Text:="Le sujet abordé portera sur " + SujetRéunion + "."
Selection.TypeParagraph
Selection.TypeText Text:="Merci de me faire part de vos observations au poste 29.945."
Selection.TypeParagraph
Selection.TypeParagraph
Selection.TypeText Text:="Philippe BOULANGER, responsable des supers réunion"
' Saut de ligne
Selection.InsertBreak Type:=wdPageBreak
Wend
' fermeture du fichier fonctionnaires.txt
Close #1
MsgBox ("Fusion terminée")
' Replace le curseur en haut du document
Selection.HomeKey unit:=wdStory
End Sub
Philippe BOULANGER