Médiaforma

posts

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"

Pour appliquer une couleur, un dégradé, une image, un motif ou des hachures à l’arrière-plan d’un document, lancez la commande Page dans le menu Format. La boîte de dialogue Style de page s’affiche. Basculez sur l’onglet Arrière-plan :

En cliquant sur les boutons, vous pouvez choisir d’affecter aucun arrière-plan, une couleur uniforme, un dégradé de couleurs, une image, un motif ou des hachures à l’arrière-plan de toutes les pages du document. Cet arrière-plan s’étend également sur les en-têtes et les pieds de page s’ils sont présent, mais il ne couvre pas les marges gauche, droite, supérieure, inférieure et de reliure du document. Voici un exemple dans lequel une image bitmap en mosaïque a été appliquée à l’arrière-plan. Ici, il s’agit d’une image fournie avec Writer, mais bien entendu, vous pouvez utiliser vos propres images pour l’arrière-plan. Comme vous pouvez le constater, l’arrière-plan  s’applique à toute la page, hors marges :

Voici un exemple de paramétrage. Ici, on clique sur le bouton Couleur et on choisit une couleur assez claire pour l’arrière-plan :

Voici le résultat :

Excel est en mesure de trier des données en se basant sur le type (numérique, date et heure, listes personnalisées) et/ou le format (couleur d’arrière-plan, couleur du texte et jeux d’icônes) des cellules.

  1. Cliquez sur une cellule dans la colonne que vous voulez trier.
  2. Sélectionnez l’onglet Accueil dans le ruban.
  3. Cliquez sur l’icône Trier et filtrer dans le groupe Edition et choisissez la façon de trier la colonne. Les options proposées changent en fonction du contenu de la cellule sélectionnée.

Pour trier les données en utilisant plusieurs critères, sélectionnez le bloc à trier, cliquez sur l’icône Trier et filtrer, puis choisissez Tri personnalisé dans le menu. A titre d’exemple, nous allons trier les données par nom, puis par prénom dans la feuille suivante :

Le bloc à sélectionner est donc A2:D12.

Lorsque vous cliquez sur la commande Tri personnalisé, la boîte de dialogue Tri est affichée. Déroulez la liste déroulante Trier par et définissez la colonne à trier (ici, la colonne B). Le tri se fera par ordre alphabétique sur les valeurs des cellules. Cliquez sur Ajouter un niveau pour définir un deuxième critère de tri. Sélectionnez Colonne A dans la liste Puis par. Ici encore, le tri se fera par ordre alphabétique sur les valeurs des cellules.

Un clic sur OK et les données sont réorganisées alphabétiquement par noms, puis par prénoms.

Pour trier les données par couleurs ou par icônes, cliquez sur l’icône Trier et filtrer, puis choisissez Tri personnalisé dans le menu. Sélectionnez une colonne dans la liste déroulante Trier par puis un critère dans la liste déroulante Trier sur. Ici, par exemple, nous allons trier les données par couleur de cellule sur la colonne A. Cliquez sur OK pour trier les données.

Ca y est, vous allez enfin écrire votre premier snippet dans Script Lab. Je sais que vous êtes impatient, alors, commençons tout de suite. Rassurez-vous, vous n’éprouverez aucune difficulté à écrire ce premier code, je vous le promets.

Après l’installation de Script Lab et le clic sur l’icône Code du ruban, un exemple de code simpliste s’affiche. Il s’agit d’un simple Hello World. Je vous l’avais dit, aucune difficulté pour écrire ce code … puisqu’il est déjà écrit.

Nous allons décortiquer ce code en détail. Cette étape est très importante. Elle conditionne toute la suite du livre. Passez le temps nécessaire pour bien l’assimiler.

Dans la partie supérieure du volet Code, remarquez les onglets Script, HTML, CSS et Libraries. Ils contiennent respectivement le code JavaScript/TypeScript, le code HTML et CSS de l’interface et les bibliothèques utilisées par le snippet.

Commençons par l’onglet HTML. Il contient les balises HTML de l’interface homme-machine (IHM) du snippet. C’est ce code qui s’affiche dans le volet Run lorsque vous cliquez sur l’icône Run du ruban. Dans cet exemple, l’interface comporte un texte dans un paragraphe (balise <p>)et un bouton (balise <button>) sont le label a été placé dans une balise <span> :

Remarquez les attributs class et id. Il vous permettront de styler les éléments en CSS et d’y faire référence en JavaScript/TypeScript.

L’onglet CSS ne contient aucune instruction. Libre à vous de compléter cet onglet pour styler l’interface.

L’onglet Libraries fait référence aux bibliothèques JavaScript, TypeScript et jQuery utilisées par le snippet. Pour l’instant, vous n’aurez aucune action dans cet onglet :

Enfin, l’onglet Script contient le code JavaScript/TypeScript du snippet. C’est dans cet onglet que vous passerez le plus de temps. Décortiquons le code qui se trouve dans cet onglet.

$("#run").click(() => tryCatch(run));




async function run() {

  console.log("Hello World");

}

/** Default helper for invoking an action and handling errors. */

async function tryCatch(callback) {

  try {

    await callback();

  } catch (error) {

    OfficeHelpers.UI.notify(error);

    OfficeHelpers.Utilities.log(error);

  }

}

La première instruction est écrite en jQuery. Elle associe un gestionnaire évènementiel au clic sur le bouton de l’interface HTML. La notation ES6 (arrow function) est utilisée pour simplifier l’écriture :

$("#run").click(() => tryCatch(run));

La function tryCatch() s’exécute de façon asynchrone. La structure try catch tente d’exécuter la fonction passée en argument (ici, la fonction run()). La fonction tryCatch() retourne une promesse (grâce au mot-clé async). Le mot-clé await attend la résolution de cette promesse. Si une erreur est retournée, le bloc catch est exécuté pour afficher un message d’erreur.

La fonction run() est également asynchrone (async). Elle se contente d’afficher un message Hello World dans la console.

Exécution du premier snippet

Pour exécuter ce premier snippet, cliquez sur l’icône Run de l’onglet Script Lab du ruban. Le volet Run s’affiche à droite du volet Code. Cliquez sur le bouton Run Code. Le résultat s’affiche dans la console :

Vous savez maintenant comment créer et exécuter un snippet élémentaire qui se content d’afficher Hello World dans la console. Dans la section suivante, vous allez en apprendre un peu plus sur la programmation asynchrone en JavaScript. Plusieurs techniques seront abordées, de la plus ancienne à la plus moderne. Chacune vous permettra de mieux comprendre les instructions async et await utilisées aujourd’hui.

Dans une section précédente, nous avions calculé un prix TTC dans la cellule D2 avec la formule suivante :

=B2*(1+C2)

Ici, la référence aux cellules B2 et C2 est faite de façon relative.

Si vous copiez la cellule D2 dans la cellule D3 avec un simple copier-coller, la formule s’adaptera pour faire référence à la ligne 3. Cliquez sur la cellule D2 et lancez la commande Copier dans le menu Edition. Cliquez dans la cellule D3 et lancez la commande Coller dans le menu Edition. Comme vous le voyez, la formule s’adapte à la ligne 3 : les cellules B2 et C2 sont transformées en B3 et C3 :

Dans certains cas, il est important qu’une formule fasse référence aux cellules de façon absolue. Si cette formule est déplacée dans une autre cellule, elle restera inchangée. Pour cela, il suffit d’insérer un $ devant les noms de colonnes et de lignes dans la formule.

Raisonnons sur la formule relative de l’exemple précédent :

=B2*(1+C2)

Pour faire référence de façon absolue aux cellules dans la formule, vous utiliserez cette syntaxe :

=$B$2*(1+$C$2)

Remarque

Lorsque vous utilisez une référence absolue dans une formule, vous pouvez cliquer sur la cellule concernée puis appuyer sur la touche de fonction F4. Les signes $ seront automatiquement ajoutés à la formule. Par exemple, pour saisir la formule absolue de la cellule D2, vous pourriez taper sur =, cliquer sur la cellule B2, appuyer sur F4, taper *(1+, cliquer sur la cellule C2, appuyer sur F4 et enfin taper ). Avec un peu d’habitude, vous trouverez certainement la touche F4 très pratique.

Comme vous le voyez, le résultat du calcul est le même que précédemment :

Par contre, si vous copiez-collez la formule de la cellule D2 dans la cellule D3, elle ne s’adapte pas à la ligne 3. Le résultat est donc bien différent :

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 :

En utilisant un dossier de recherche, vous pouvez filtrer les messages de votre boîte de réception pour n’afficher que ceux dont le poids dépasse une certaine valeur. Ceci vous permettra d’alléger facilement votre boîte de réception.

Dans le volet des dossiers, sélectionnez la boîte de réception concernée. Basculez sur l’onglet Dossier du ruban puis cliquez sur l’icône Dossier de recherche du groupe Nouveau. La boîte de dialogue Nouveau dossier de recherche s’affiche. Sous Organisation du courrier, sélectionnez Courrier volumineux. Cliquez sur le bouton Choisir, dans la partie inférieure de la boîte de dialogue et indiquez la taille au-dessus de laquelle un courrier sera considéré comme volumineux :

Validez en cliquant sur OK puis sur OK. Tous les « gros » messages de la boîte aux lettres où le dossier de recherche a été créé sont maintenant accessibles en cliquant sur Plus grand que 1000 KB :