Clics 2187 |
VBA
Simuler les touches du clavier senkeys
Traitement des fichiers et gestion des erreurs
Cours VBA - Gestion des erreurs - Débogage -
http://jml85.pagesperso-orange.fr/Pages/Excel/Cours/Ecrit/Cours14.html
changer les attributs d'un fichier
Sub ChangeAttributAlternatif()
SetAttr "F:AtelierTest.txt", vbReadOnly + vbHidden
End Sub
Fichier WRITE
Tabulation dans un fichier texte = variable vba = vbTab
On Error Resume Next
Kill sRepertoire & sNomFichier '// effacer le fichier existant
iFile = FreeFile
Open sRepertoire & sNomFichier For Output As #iFile '// crée le fichier texte
ar = Sheets(1).Cells(1).CurrentRegion.Value '// valeurs dans un array (plus rapide)
For i = 1 To UBound(ar, 1) '// boucle sur les lignes
str = ""
For j = 1 To UBound(ar, 2)'// boucle sur les colonnes
str = str & ar(i, j) & vbTab'// valeurs séparées par tabulations dans une seule variable
Next j
Write #iFile, str '// écrire de la variable dans le fichier une ligne entre «« avec tabulation entre les données
Next i
Close #iFile '// Fermer le fichier
On Error GoTo 0
For i = 1 To UBound(ar, 1) '// boucle sur les lignes
dDateNaissance = ar(i, 1)
sNom = ar(i, 2)
sPrenom = ar(i, 3)
sAdresse = ar(i, 4)
sVille = ar(i, 5)
Write #iFile, dDateNaissance, sNom, sPrenom, sAdresse, sVille '// écrire dans le fichier
'Une ligne avec chaque données entre «« et éparées par une virgule et la date enter ##
Next i
|
|
|
Fichier PRINT
les & s’écrivent & pas de
««
For j = 1 To UBound(ar, 2)'// boucle sur les colonnes
str = str & ar(i, j) & vbTab'// valeurs séparées
par tabulations
Next j
Print #iFile, str '// écrire dans le fichier
Print #iFile, str;
'// écrire dans le fichier à la suite (sans saut de
ligne entre les enregistrements)
lire des fichiers binaires
la méthode ReadAllBytes
Dim bytes = My.Computer.FileSystem.ReadAllBytes(
"C:/Documents and Settings/selfportrait.jpg")
PictureBox1.Image = Image.FromStream(New IO.MemoryStream(bytes))
https://msdn.microsoft.com/fr-fr/library/9tk3bdxw.aspx
Les
fichiers Texte
Ouvrez
le bloc-notes (NotePad) et écrivez quelques mots.
C'est
laid, du texte triste noir sur blanc sans aucun format.
Mais
c'est aussi extremement utile !
Visual Basic vous permet
de créer un fichier texte et d'y écrire n'importe quoi.
On peut donc écrire un texte, une chaine de caractères
dans un fichier.
Sachant qu'avec les 256 (= 2 puissance 8)
caractères disponibles, on peut représenter toutes les
valeurs prises par un octet, on comprend qu'on peut ainsi créer
n'importe quel type de fichier en créant un fichier vide et en
y inscrivant des caractères ascii. Cela mérite
quelqu'intérêt !
Ouvrir un fichier,
créer un nouveau fichier
Ouvrir un fichier, cela
signifie le rendre disponible soit pour la lecture, soit pour
l'écriture.
Pour ouvrir ou créer un fichier, une
seule fonction, Open.
>Quand on
manipule des fichiers texte, on les ouvre généralement
en mode "séquentiel", avec trois possibilités,
lecture, écriture ou ajouts.
>Open
"c:zaza.txt" For Input As #2
>va
ouvrir le fichier c:zaza.txt >en
mode lecture>
et lui affecter le numéro d'ordre 2. Ce numéro va nous
servir pour manipuler le fichier.
(Il est important d'utiliser
un numéro qui ne correspond à aucun fichier déjà
ouvert. Dans le doute, il est conseillé de recourrir à
FreeFile qui renvoie un numéro de fichier utilisable :
>num
= FreeFile
Open "c:rien.xls" For Input As #num>).
Pour lire dans le fichier ainsi ouvert en séquentiel en
mode lecture, on utilise >Input
# >:
Pour lire les 5 premiers caractères du fichier #2, on
écrit :
>txt
= Input(5, #2) >
La
variable txt contient les 5 premiers caractères.
Pour
lire les 30 suivants, il suffit d'écrire
>txt2
= Input(30, #2)>.
Pour savoir si on approche de la fin du fichier, on peut
utiliser >EOF(2)
>qui
va renvoyer False tant que l'on n'aura pas atteint la fin du fichier
2.
On peut aussi compter le nombre de caractères lus
(5+30 dans notre exemple) et le comparer à la longueur du
fichier, qui est mesurée soit par LOF(2), soit par
FileLen("c:rien.xls").
Quand on a lu tout ce qu'on
souhaite, il convient de fermer le fichier par :
>Close
#2>.
Un exemple : lire les 7 derniers octets du fichier
zaza.htm (on lit en fait la balise </HTML> qui ferme la page
html) :
>Open
"c:zaza.htm" For Input As #3
txt = Input(LOF(3) - 7,
#3)
txt = Input(7, #3)
Close #3
MsgBox txt
End
Sub >
On
peut aussi lire le fichier ligne par ligne avec Line Input :
>Open
"c:zaza.txt" For Input As #1
For nb = 1 To 3
Line
Input #1, txt
Next
Close #1
MsgBox txt
End
Sub >
La
macro lit successivement les 3 premières lignes du fichier
zaza.txt, et les place dans la variable txt. L'instruction Msgbox txt
va donc renvoyer le contenu de la troisième ligne.
Pour
ouvrir un fichier >en
écriture>,
on utilise
>Open
"c:zaza.txt" For Output As #2
>
Si
zaza.txt n'existe pas, cette instruction le crée avant de
l'ouvrir.
Pour écrire dans un fichier texte ouvert en
écriture, on dispose de deux instructions, Print # et Write #
:
>Open
"c:rien.txt" For Output As #1
For nb = 1 To 3
Print
#1, "toto " & nb
Next
Close #1
ThisWorkbook.FollowHyperlink "c:rien.txt", , True
End Sub >
La
macro ouvre le fichier c:rien.txt en écriture (ou le crée
s'il n'existe pas), y inscrit toto 1, toto 2 et toto 3, ferme le
fichier, puis vous montre le résultat. S'il y a déjà
des données dans le fichier, elles sont écrasées
par cette procédure.
On peut aussi utiliser
l'instruction Write qui inscrit une ligne de données séparées
par des virgules :
>Open
"c:rien.txt" For Output As #1
For lin = 1 To 20
txt
= ""
For col = 1 To 9
txt = txt & ","
& lin * col
Next col
txt = Right(txt, Len(txt) - 1)
Write #1, txt
Next lin
Close #1
ThisWorkbook.FollowHyperlink "c:rien.txt", , True
>
La
macro écrit un tableau représentant les tables de
multiplication de 1 à 20. Chaque ligne est encadrée de
guillemets, chaque nombre est séparé du suivant par une
virgule.
Si maintenant on veut ajouter du texte au bas
d'un fichier existant, on doit l'ouvrir >en
mode "ajouts">
(Append) :
>Open
"c:rien.txt" For Append As #1
Write #1, "fin de
la table de multiplication"
Close #1
ThisWorkbook.FollowHyperlink "c:rien.txt", , True
>
La
macro va ajouter au bas de la table de multiplication précédente,
une ligne de texte.
>Plutôt
que d'ouvrir les fichiers en mode séquentiel, on peut les
ouvrir en mode binaire et manipuler les octets.
Dans ce cas, on
utilise get pour lire et put pour écrire :
>Dim
txt As String ‘ß
>il
faut déclarer la variable as string c’est
obligatoire>
Open
"c:rien.txt" For Binary As #1
txt = String(20, "
") ‘><-
il faut placer autant de caractères espaces que d’octets
à récupérer>
Get
#1, 10, txt
Close #1
MsgBox txt
>
La
macro place, dans la variable txt, 20 octets à partir du
dixième.
On peut utiliser Get sans préciser la
position du premier octet. Dans ce cas, la lecture se fera à
partir de la position courante du pointeur (qu'on peut trouver par
seek(1) qui renvoie la position de l'octet à partir duquel la
prochaine opération doit avoir lieu, ou Loc(1) qui renvoie la
position du dernier octet lu ou écrit).
En utilisant
plusieurs fois >Get
#1,,txt>,
on va lire les octets du fichier par paquets de 20.
On peut
aussi imposer la position du pointeur avec >Seek
#1,20 >(place
le pointeur sur le 20ème octet).
On utilise de
même Put pour écrire dans le fichier :
>Dim
txt As String
Open "c:rien.txt" For Binary As #1
txt = "bonjour"
Put #1, 10, txt
Close #1
ThisWorkbook.FollowHyperlink "c:rien.txt", , True
>
La
macro remplace 7 octets à partir du 10 ème par
"bonjour".
>Plutôt
que de manipuler les fichiers par Open, on peut le faire par
l'intermédiaire de l'objet >Scripting.FileSystemObject
>:
Les deux lignes suivantes créent cet objet et
l'utilisent pour créer un nouveau fichier :
>Set
Fs = CreateObject("Scripting.FileSystemObject")
Set
fich = Fs.CreateTextFile("c:zaza.txt", False, False)
>
(le
deuxième paramètre à False empêche
d'écraser le fichier zaza s'il existe déjà, le
troisième permet de créer un fichier au format ASCII,
au format UNICODE si True).
Pour ouvrir un fichier on utilise
OpenTextFile :
>Set
fich = fs.OpenTextFile("c:zaza.txt", 1, False)
>Le
deuxième paramètre vaut 1 pour ouvrir le fichier en
lecture, 2 en écriture, et 8 en "appending"
(ajouts), le troisième à True entraine la création
du fichier zaza s'il n'existe pas).
Pour lire dans un fichier
ouvert en mode lecture, on utilise Read (pour un certain nombre de
caractères), ReadLine pour lire une ligne complète ou
ReadAll pour lire tout le fichier :
>Set
fich = fs.OpenTextFile("c:zaza.txt", 1, False)
Msgbox
fich.Readline
Msgbox fich.Read(10) >
La
macro ouvre le fichier zaza.txt en lecture, lit la première
ligne, puis lit les 10 premiers caractères qui suivent.
Pour
écrire dans un fichier ouvert en écriture ou en
appending, on peut utiliser Write : >fich.Write
"texte">.
Pour écrire une ligne, on utilise WriteLine :
>fich.WriteLine
"bonjour tout le monde"
>(on
passe à la ligne en fin d'écriture).
Pour
parcourir le fichier texte, on utilise >fich.AtEndOfLine
>(true
en bout de ligne), >fich.AtEndOfStream
>(true
en fin de fichier), >fich.Line
>(numéro
de ligne) et >fich.Column>.
Enfin, ne pas oublier de refermer le fichier en utilisant
fich.Close (et de faire le ménage dans la mémoire en
supprimant les objets devenus inutiles) :
L'exemple qui suit
montre comment lire les 5 premiers caractères de la huitième
ligne du fichier zaza.txt : >
Sub
truc()
Set fs = CreateObject("Scripting.FileSystemObject")
Set fich = fs.OpenTextFile("c:zaza.txt", 1, False)
Do While fich.Line <= 7
txt = fich.readline
Loop
MsgBox fich.read(5)
fich.Close
Set fich = Nothing
Set fs = Nothing
End Sub
>Ces
bases simples permettent de créer et manipuler n'importe quel
type de fichier.
Plusieurs exemples sont notamment présentés
avec des fichiers html, des fichiers MP3 et des fichiers bmp :
>construire
un plan de site Web >
>éditer
un organigramme en html >
>créer
un moteur de recherche javascript
>
>recopier
in classeur Excel sur une page Web
>
>un
questionnaire QCM en ASP >
>Inclure
un fichier quelconque dans un fichier Excel puis le récupérer
>
>le
dicton du jour dans votre page Web (JavaScript mis à jour par
VBA) >
>un
trombinoscope html >
>Les
dates d'anniversaires proches dans votre page Web (JavaScript mis à
jour par VBA) >
>modifier
les informations contenues dans un fichier MP3 (auteur, nom,
album...) par VBA >
>Créer
un raccourci Internet par VBA
Total des visiteurs : 503803
dont aujourd'hui : 29 En ligne actuellement : 1 Total des clics 1285140
|