Bonjour     visiteurs jour : 21     Total clics   :   1169538       Sites associés 

Les joies de l'informatique et de l'internet !





Coucou et merci


 
Clics 1346

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





Fichiers text

Vos messages sont modérés.   Les visiteurs non inscrits ont leur pseudo préfixé par x_.   Merci de respecter la loi et les personnes.

Votre message -->

Classement
par date
croissante.
décroissante.
Vous
inaugurez
ce forum,
félicitations.
Pseudo     Le 17-8-2017.   Titre  

 

Total des visiteurs  :    470687   dont aujourd'hui :   21    En ligne actuellement :  2      Total des clics   1169538