Médiaforma

All posts in VBAExcel

Pour stocker du texte dans un fichier texte, vous ouvrirez ce fichier avec la méthode Open, puis vous écrirez une ou plusieurs fois dedans avec la méthode Print. Lorsque la totalité du texte aura été écrite, vous fermerez le fichier avec la méthode Close.

La méthode Open peut ouvrir le fichier selon trois modes :

  • Input : lecture seule.
  • Output : écriture avec effacement du fichier à chaque ouverture.
  • Append : écriture avec ajout après la dernière ligne du fichier.

Voici la syntaxe de l’instruction Open :

Open Fichier For Input|Output|Append As #f

Où :

  • Fichier est le chemin complet du fichier à ouvrir.
  • Input, Output et Append sont les trois modes d’ouverture du fichier.
  • f est un numéro de fichier, compris entre 1 et 511.

Le numéro du fichier ne doit pas être pris par un autre programme. Pour obtenir le premier numéro disponible, vous utiliserez la méthode FreeFile :

Dim f As Integer

f = FreeFile

Open Fichier For Output As #f

Un premier exemple

Dans ce premier exemple, une ligne de texte est sauvegardée dans le fichier c:\data\fichiertexte.txt. Une gestion d’erreur est mise en place à l’aide de l’instruction On Error GoTo. Si la création du fichier est impossible (par exemple parce que le dossier destination n’existe pas), un message d’erreur sera affiché :

Sub Macro1()

    On Error GoTo Erreur

    Dim Chaine As String

    Dim Fichier As String

    Chaine = "Le texte à sauvegarder"

    Fichier = "c:\data\fichiertexte.txt"

    Dim f As Integer

    f = FreeFile

    Open Fichier For Output As #f

    Print #f, Chaine

    Close #f

    MsgBox "Le texte a été sauvegardé dans: " & Fichier

    Exit Sub

Erreur:

    MsgBox "Le fichier de sortie est inaccessible"

End Sub

Voici le message affiché lorsque l’écriture a eu lieu dans le fichier c:\data\fichiertexte.txt :

Si l’écriture est impossible, un message d’erreur s’affiche :

Copie de la plage A1:A5 dans un fichier texte

Vous allez aller un peu plus loin en copiant dans le fichier texte le contenu des cellules A1 à A5 de la feuille de calcul active. La copie se fera à raison d’une cellule par ligne. Nous allons partir de ces données :

Voici le code utilisé :

Sub Macro1()

    On Error GoTo Erreur

    Dim Chaine As String

    Dim Fichier As String

    Fichier = "c:\data\sauvegarde.txt"

    Dim f As Integer

    f = FreeFile

    Open Fichier For Output As #f

    For i = 1 To 5

      Print #f, Cells(i, 1)

    Next

    Close #f

    MsgBox "Les cellules ont été sauvegardées dans " & Fichier

    Exit Sub

Erreur:

    MsgBox "Le fichier de sortie est inaccessible"

End Sub

Ici, une simple boucle For Next a été utilisée pour parcourir les cellules de la feuille active (Cells(i,1)) et les stocker dans le fichier texte (Print). Voici le fichier texte résultant :


Cet article va vous montrer comment tester si un fichier quelconque existe.

Vous utiliserez la fonction Dir(). Passez-lui le chemin complet du fichier dont vous voulez tester l’existence. Elle retournera :

  • Une chaîne vide si le fichier n’est pas trouvé.
  • Le nom du fichier (sans son dossier) si le fichier est trouvé.

Voici le code utilisé :

Dim Fichier As String

Fichier = Dir("c:\data\A lire.txt")

If Fichier <> "" Then

    MsgBox "Le fichier '" & Fichier & "' existe"

Else

    MsgBox "Le fichier n'a pas été trouvé"

End If

Et voici les boîtes de dialogue affichées selon si le fichier existe ou s’il n’existe pas :

  


Vous voulez savoir combien de fichiers se trouvent dans un dossier de vos unités de masse ? Vous êtes au bon endroit.

Pour parcourir un dossier, nous affecteront la fonction Dir() à une variable String, en précisant le chemin du dossier à examiner en paramètre de la fonction. Dir() retourne le nom du premier fichier du dossier parcouru. Tant que la valeur retournée n’est pas vide, cela signifie que tous les fichiers n’ont pas été passés en revue. Dans ce cas, vous incrémenterez une variable compteur et vous passerez au fichier suivant en affectant la fonction Dir sans paramètre à la variable String. Lorsque la variable String sera vide, tous les fichiers auront été parcourus et la variable compteur contiendra le nombre de fichiers du dossier.

Voici le code utilisé :

Dim Fichier As String, NbFic As Integer

NbFic = 0

Fichier = Dir("c:\data\encours\")

Do While Fichier <> ""

  NbFic = NbFic + 1

  Fichier = Dir

Loop

MsgBox NbFic

Et voici un exemple d’exécution :


Cet article va vous montrer comment lister les fichiers contenus dans un dossier quelconque dans une feuille de calcul. Ici, les fichiers seront listés dans les cellules de la colonne A de la feuille de calcul Feuil1.

Pour cela, nous utiliserons la fonction Dir() pour parcourir le dossier :

Dim Fichier As String

Fichier = Dir("chemin")

chemin représente le chemin du dossier à examiner. Par exemple c:\dossier\sous-dossier\.

Si nécessaire, vous pouvez préciser le modèle des fichiers recherchés à la suite du chemin. Par exemple, c:\dossier\sous-dossier\*.docx recherchera les fichiers d’extension docx dans le dossier c:\dossier\sous-dossier.

Voici le code utilisé :

Dim Dossier As String, Fichier As String, i As Integer

Dossier = "C:\data\encours\"

i = 0

Fichier = Dir(Dossier)

Do While Fichier <> ""

  i = i + 1

  Sheets("Feuil1").Range("A" & i) = Fichier

  Fichier = Dir

Loop

La première ligne définit les variables utilisées dans le programme.

Dim Dossier As String, Fichier As String, i As Integer

La deuxième ligne affecte le dossier dont on désire lister les fichiers à la variable Dossier :

Dossier = "C:\data\encours\"

La troisième ligne initialise la variable compteur qui sera utilisée pour copier le nom des fichiers dans la feuille de calcul :

i = 0

La quatrième ligne utilise la fonction Dir() pour rechercher les fichiers dans le dossier spécifié en argument :

Fichier = Dir(Dossier)

Une boucle Do While parcourt les fichiers listés dans la variable Fichier jusqu’au dernier :

Do While Fichier <> ""

La variable compteur est incrémentée, puis le nom du fichier courant est copié dans la cellule de colonne A et de ligne i :

  i = i + 1

  Sheets("Feuil1").Range("A" & i) = Fichier

Pour passer au fichier suivant, il suffit d’affecter la fonction Dir à la variable Fichier :

  Fichier = Dir

Loop

Voici un exemple d’exécution :


VBA est en mesure d’effectuer des opérations élémentaires sur des fichiers. Cet article va vous montrer comment copier, renommer et supprimer un fichier.

Copier un fichier

Pour copier un fichier, vous utiliserez l’instruction FileCopy :

FileCopy "source", "destination"

source est le chemin complet du fichier à copier et destination est le chemin complet de la copie.

Par exemple, pour copier le fichier Paye.xlsm qui se trouve dans le dossier c:\data\encours\ dans le fichier Paye-Janvier.xlsm du même dossier, vous utiliserez l’instruction suivante :

FileCopy "c:\data\encours\Paye.xlsm", "c:\data\encours\Paye-Janvier.xlsm"

Renommer un fichier

Pour renommer un fichier, vous utiliserez l’instruction Name As :

Name "ancien" as "nouveau"

ancien est le chemin complet du fichier à renommer et nouveau est le chemin complet du fichier renommé.

Par exemple, pour renommer le fichier Paye-Janvier.xlsm qui se trouve dans le dossier c:\data\encours\ en Paye-Fevrier.xlsm, vous utiliserez l’instruction suivante :

Name "c:\data\encours\Paye-Janvier.xlsm" As "c:\data\encours\Paye-Fevrier.xlsm"

Supprimer un fichier

Pour supprimer un fichier, vous utiliserez l’instruction Kill :

Kill "fichier"

fichier est le chemin complet du fichier à supprimer.

Par exemple, pour supprimer le fichier Paye-Fevrier.xlsm qui se trouve dans le dossier c:\data\encours\, vous utiliserez l’instruction suivante :

Kill "c:\data\encours\Paye-Fevrier.xlsm"

VBA est en mesure d’exécuter une procédure lorsque l’utilisateur appuie sur une touche ou une combinaison de touches. Pour cela, vous utiliserez la procédure Application.OnKey :

Application.OnKey "touche", "proc"

touche est la touche ou la combinaison de touches qui déclenche l’exécution de la procédure proc.

Le tableau ci-après donne un aperçu de la syntaxe à utiliser.

Touche Code de la touche
Majuscule +
Contrôle ^
Alt %
Suppr {DELETE}
Retour Arrière {BACKSPACE}
Verr Num {NUMLOCK}
Verr Maj {CAPSLOCK}
Arrêt Defil {SCROLLLOCK}
Page Suivante {PGDN}
Page précédente {PGUP}
Haut {UP}
Bas {DOWN}
Gauche {LEFT}
Droite {RIGHT}
Origine {HOME}
Fin {END}
F1 à F12 {F1} à {F12}
Entrée {ENTER}
Echap {ESC}
Insertion {INSERT}
Impr écran {PRTSC}
Tabulation {TAB}

 

Vous appellerez la méthode Application.OnKey dans la procédure Workbook_Open().

Ouvrez la fenêtre Microsoft Visual Basic pour Applications du classeur concerné. Double-cliquez sur ThisWorkbook dans la fenêtre Projet (1) et sélectionnez Workbook dans la liste déroulante Objet (2). La procédure Workbook_Open() est automatiquement créée. Il ne vous reste plus qu’à la compléter (3). Ici par exemple, la procédure raccourci() est exécutée lorsque l’utilisateur appuie sur Contrôle + Alt + j :

Voici le code utilisé :

Private Sub Workbook_Open()

  Application.OnKey "^%j", "raccourci"

End Sub

Il ne reste plus qu’à définir la procédure raccourci(). Sous Module, double-cliquez sur Module1 et définissez la procédure raccourci() :

Sub raccourci()

  MsgBox "Vous avez appuyé sur Contrôle + Alt + J"

End Sub

Chaque fois que l’utilisateur appuie simultanément sur les touches Contrôle, Alt et j, une boîte de dialogue s’affiche :


Vous pouvez demander à VBA d’exécuter une procédure à une heure donnée en utilisant la méthode Application.OnTime :

Application.OnTime heure, "proc"

heure est un objet Time qui définit l’heure d’exécution de la procédure proc.

Exécuter une procédure à une heure fixe

Vous appellerez la méthode Application.OnTime dans la procédure Workbook_Open().

Ouvrez la fenêtre Microsoft Visual Basic pour Applications du classeur concerné. Double-cliquez sur ThisWorkbook dans la fenêtre Projet (1) et sélectionnez Workbook dans la liste déroulante Objet (2). La procédure Workbook_Open() est automatiquement créée. Il ne vous reste plus qu’à la compléter (3) :

Lorsque vous ouvrirez le classeur, le code placé dans la procédure Workbook_Open() sera automatiquement exécuté. Voici le code utilisé :

Private Sub Workbook_Open()

  Application.OnTime TimeValue("12:30:00"), "manger"

End Sub

Ici, nous utilisons la fonction TimeValue() pour obtenir un objet Time à partir d’une chaîne au format hh:mm:ss. Cet objet définit l’heure d’exécution de la procédure manger().

Il ne reste plus qu’à définir la procédure manger(). Sous Module, double-cliquez sur Module1 et définissez la procédure manger() :

Sub manger()

  MsgBox "Il faudrait peut-être penser à aller manger !"

End Sub

A 12 heures 30, une boîte de message rappellera que c’est l’heure du repas :

Exécuter une procédure un certain laps de temps après l’ouverture du classeur

En utilisant la procédure Application.OnTime, vous pouvez également exécuter une procédure un certain laps de temps après l’ouverture du classeur.

La procédure Workbook.Open() est la très proche de celle utilisée dans l’exemple précédent, si ce n’est qu’ici, on ajoute le délai (TimeValue) à l’heure actuelle (Now). Dans cet exemple, la procédure alerte() s’exécutera une minute après l’ouverture du classeur :

Private Sub Workbook_Open()

  Application.OnTime Now + TimeValue("00:01:00"), "alerte"

End Sub

Voici le code de la fonction alerte() :

Sub alerte()

  MsgBox "Le classeur est ouvert depuis une minute."

End Sub