<< Retour au sommaire

 

VBA, Les fichiers de données de type séquentiel

 

 

 

Table des matières

  1. Les fichiers texte ;
  2. Un exemple dans WORD.

 

 

Les fichiers texte

 

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 se nomme « Bonjour.txt » et il est situé dans la racine du disque dur « C ».

 

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 employer 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 permettent 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 VBA du programme, le fichier ouvert doit être sollicité à partir de son canal, et non plus à partir de 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 variableintitulée « 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 paramètre de « print » est le numéro du canal, précédé du signe dièse bien sûr, et le deuxième paramètre 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.

Puis, 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

' écriture 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 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.

 

 


Un exemple dans WORD

 

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, elle est assignée au raccourci clavier CTRL +F8, et elle permet d’enregistrer à n’importe quel moment un nouveau fonctionnaire dans le fichier texte fonctionnaires.txt.

 

La deuxième macro quant à elle, 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