Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
issue89:libreoffice [2015/02/06 15:12] – d52fr | issue89:libreoffice [2015/02/07 11:25] (Version actuelle) – andre_domenech |
---|
In time, I decided, since I was such a fallible, flawed human being, I needed to reduce the number of steps necessary to complete this task in order to lessen my chances for mistakes. The result was a macro where all I have to do is give the sheet a new name. The macro handles all the rest, making sure it is copied and placed at the end of the tab list. The task fits perfectly into the idea behind macros, a repeatable process that automation can speed up, or prevent mistakes. Today, I share it with you.** | In time, I decided, since I was such a fallible, flawed human being, I needed to reduce the number of steps necessary to complete this task in order to lessen my chances for mistakes. The result was a macro where all I have to do is give the sheet a new name. The macro handles all the rest, making sure it is copied and placed at the end of the tab list. The task fits perfectly into the idea behind macros, a repeatable process that automation can speed up, or prevent mistakes. Today, I share it with you.** |
| |
Retour en arrière sur les parties 8 à 12 (FCM numéros, 53, 55-58) : Je vous ai amené d'une feuille de tableau blanc à un tableau de budget pleinement opérationnel. J'utilise quelque chose de similaire 2 fois par mois pour faire mon budget familial. Je garde une année complète de feuilles de budget dans un document, ce qui signifie que deux fois par mois je copie la feuille, je la renomme et je m'assure que tous les réglages sont bons pour mettre une copie de la feuille courante à la fin des onglets. Croyez-moi, des erreurs ont été commises. Des jurons ont été crachés. Des ordinateurs innocents ont été menacés. | Retour en arrière sur les parties 8 à 12 (FCM numéros, 53, 55-58) : je vous ai amené d'une feuille de tableau blanc à un tableau de budget pleinement opérationnel. J'utilise quelque chose de similaire deux fois par mois pour mon budget familial. Je garde une année complète de feuilles de budget dans un document, ce qui signifie que deux fois par mois je copie la feuille, je la renomme et je m'assure que tous les réglages sont bons pour mettre une copie de la feuille courante à la fin des onglets. Croyez-moi, des erreurs ont été commises. Des jurons ont été crachés. Des ordinateurs innocents ont été menacés. |
| |
A temps, j'ai décidé, puisque j'étais un être humain faillible et imparfait, que je devais réduire le nombre d'étapes nécessaires à la réalisation de cette tache, de façon à réduire les risques d'erreur. Le résultat a été une macro où tout ce que j'ai à faire est de donner un nouveau nom à la feuille. La macro gère tout le reste, s'assurant de la copie et du positionnement après le dernier onglet. La tache colle parfaitement à l'idée de macro : un processus répétitif que l'automatisation peut accélérer tout en évitant les erreurs. Je vous en fait part. | En temps voulu et puisque je suis un être humain faillible et imparfait, j'ai décidé que je devais réduire le nombre d'étapes nécessaires à la réalisation de cette tâche, de façon à réduire les risques d'erreur. Le résultat fut une macro où tout ce que j'ai à faire est de donner un nouveau nom à la feuille. La macro gère tout le reste, s'assurant de la copie et du positionnement à la fin de la liste des onglets. La tâche colle parfaitement à l'idée des macro : un processus répétitif que l'automatisation peut accélérer tout en évitant les erreurs. Aujourd'hui, je vous les présente. |
| |
**The Manual Method | **The Manual Method |
La méthode manuelle | La méthode manuelle |
| |
De façon à apprécier la macro, vous devez bien comprendre ce que vous avez à faire et quelles erreurs sont possibles. Par conséquent, je commencerai par la description du déroulement manuel que la macro simplifie. Il y a réellement plus d'une façon de copier une feuille dans Calc, mais je vous montrerai la méthode interactive avec toutes les options. | Pour pouvoir apprécier une macro, vous devez bien comprendre ce qu'elle va faire pour vous et quelles erreurs sont possibles. Par conséquent, je commencerai par la description du déroulement manuel que la macro simplifie. Il y a réellement plus d'une façon de copier une feuille dans Calc, mais je vous montrerai la méthode interactive avec toutes les options. |
| |
Faites un clic droit sur l'onglet de la feuille que vous voulez copier et sélectionnez Déplacer/Copier la feuille... La boîte de dialogue Déplacer/copier la feuille apparaît. Ensuite, sélectionnez Copier. Une des erreurs que j'ai commises a justement été d'oublier ceci. A la fin, j'avais seulement renommé ma feuille. Dans « Insérer avant », choisissez la dernière option « - placer en dernière position - ». Si j'oublie ce point, la feuille est insérée avant la feuille active au lieu d'être placée en dernière position, comme je le souhaite. Enfin, j'ai renommé la feuille. Il y a eu des fois où je faisais tellement attention de bien mettre correctement les autres réglages que j'oubliais de changer le nom. Dans ce cas, le nom de la feuille copiée prend un « _2 » à la fin. Cliquez sur OK pour appliquer les réglages. | Faites un clic droit sur l'onglet de la feuille que vous voulez copier et sélectionnez Déplacer/Copier la feuille... La boîte de dialogue Déplacer/Copier la feuille apparaît. Ensuite, sélectionnez Copier. Une des erreurs que j'ai commises a justement été d'oublier ceci. À la fin, j'avais seulement renommé ma feuille. Dans « Insérer avant », choisissez la dernière option « placer en dernière position ». Si j'oublie celui-ci, la feuille est insérée avant la feuille active au lieu d'être placée en dernière position, comme je le souhaite. Enfin, je dois renommer la feuille. Il y a eu des fois où je faisais tellement attention de bien faire les autres réglages que j'oubliais de changer le nom. Dans ce cas, le nom de la feuille copiée prend un « _2 » à la fin. Cliquez sur OK pour appliquer les réglages. |
| |
Je sais ; vous allez dire que tout ne va pas si mal, mais après quelques temps à vous tromper, votre nature brute ressort et vous voulez tout balancer. D'accord, ce n'est peut-être que moi. La mise en équilibre du budget familial est suffisamment pénible sans ajouter le surplus des erreurs lors de la copie des tableaux. | Je sais ; vous allez dire que ce n'est pas si dur, mais après vous être trompé plusieurs fois, votre nature brute ressort et vous voulez tout balancer. D'accord, ce n'est peut-être que moi. La mise en équilibre du budget familial est suffisamment pénible sans ajouter en prime des erreurs lors de la copie des tableaux. |
| |
| |
Doc = ThisComponent | Doc = ThisComponent |
| |
ThisComponent est le document courant actif dans LibreOffice. Dans ce cas, la macro pointe vers un tableur Calc. | ThisComponent est le document courant actif dans LibreOffice. Dans ce cas, la macro cherchera un tableur Calc. |
| |
If NOT Doc.supportsService("com.sun.star.sheet.SpreadsheetDocument") then | If NOT Doc.supportsService("com.sun.star.sheet.SpreadsheetDocument") then |
• The default text (it just uses the name of the current sheet [Sheet1] as the default text).** | • The default text (it just uses the name of the current sheet [Sheet1] as the default text).** |
| |
Le test « If » s'assure que le document courant est bien un tableur Calc. Il vérifie si le document supporte le service SpeadsheetDocument, l'identifiant comme un tableur Calc et non comme un autre type de document. Si ce n'est pas un tableur, la macro ouvre une fenêtre de message pour prévenir l'utilisateur que la macro ne fonctionne que pour un tableur. Ensuite, la macro exécute un « Exit Sub » qui termine la macro sans exécuter d'autre code. | L'argument « If » s'assure que le document courant est bien un tableur Calc. Il vérifie si le document supporte le service SpeadsheetDocument, l'identifiant comme un tableur Calc et non comme un autre type de document. Si ce n'est pas un tableur, la macro ouvre une fenêtre de message pour prévenir l'utilisateur que la macro ne fonctionne que pour un tableur. Ensuite, la macro exécute un « Exit Sub » qui termine la macro sans exécuter d'autre code. |
| |
Sheet1 = Doc.CurrentController.ActiveSheet.Name | Sheet1 = Doc.CurrentController.ActiveSheet.Name |
| |
La macro utilise l'objet Doc pour extraire le nom de la feuille courante. La notation avec une ribambelle de points marque une progression vers plus de détail. CurrentController est est un appel au service qui contrôle le document. ActiveSheet est un appel à la feuille active du document. Enfin, Name donne le nom du document qui est affecté à la variable Sheet1. | La macro utilise l'objet Doc pour extraire le nom de la feuille courante. La notation avec une ribambelle de points marque une progression vers plus de détail. CurrentController fait référence au service qui contrôle le document. ActiveSheet se réfère à la feuille active du document. Enfin, Name récupère le nom de la feuille actuelle et celui-ci est affecté à la variable Sheet1. |
| |
Sheet2 = InputBox("Enter Name for Copied Sheet:", "Copy Sheet", Sheet1) | Sheet2 = InputBox("Enter Name for Copied Sheet:", "Copy Sheet", Sheet1) |
| |
Pour recevoir le nom de la nouvelle feuille, la macro utilise la fonction IputBox. InputBox contient 3 arguments : | Pour récupérer le nom de la nouvelle feuille, la macro utilise la fonction InputBox. InputBox contient 3 arguments : |
• Un message de demande à l'utilisateur (« Enter Name for Copied Sheet: »)[Entrez le nom de la feuille copiée : ] | • Une invite destinée à l'utilisateur (« Enter Name for Copied Sheet: »)[Entrez le nom de la feuille copiée : ] |
• Le titre de la fenêtre InputBox (« CopySheet »). | • Le titre de la fenêtre InputBox (« CopySheet »). |
• Le texte par défaut (c'est le nom de la feuille courante [Sheet1] qui est le texte par défaut). | • Le texte par défaut (le nom de la feuille courante [Sheet1] est le texte par défaut). |
| |
**If the user clicks the OK button, the InputBox will return the string entered in the text box or the default text when no changes are made. If the user clicks the Cancel button, a blank string is returned. | **If the user clicks the OK button, the InputBox will return the string entered in the text box or the default text when no changes are made. If the user clicks the Cancel button, a blank string is returned. |
Loop | Loop |
| |
Maintenant, la macro doit utiliser un raisonnement logique pour déterminer comment procéder. Le « If » teste si la chaîne de caractères est vide. Si c'est le cas, ça signifie que le bouton Annuler a été pressé, donc la commande Exit Sub est exécutée. Exit Sub termine la macro sans exécution de code supplémentaire. | Maintenant, la macro doit utiliser un raisonnement logique pour déterminer comment procéder. Le « If » teste si la chaîne de caractères est vide. Si c'est le cas, ça signifie que le bouton Annuler a été cliqué, donc la commande Exit Sub est exécutée. Exit Sub termine la macro sans exécution de code supplémentaire. |
| |
**The Do While...Loop checks to see if another sheet in the Calc document has the same name. The hasByName method checks the supplied name against the names of all the sheets in the collection. If a match is detected, the macro uses an InputBox to prompt the user for a new, unmatched name. The Do While...Loop will loop until the name in Sheet2 does not match the name of any other sheet. The “If” inside the loop exits the macro if Cancel is pressed. If the name is unmatched from the start, the loop never runs. This prevents two sheets from having the same name. | **The Do While...Loop checks to see if another sheet in the Calc document has the same name. The hasByName method checks the supplied name against the names of all the sheets in the collection. If a match is detected, the macro uses an InputBox to prompt the user for a new, unmatched name. The Do While...Loop will loop until the name in Sheet2 does not match the name of any other sheet. The “If” inside the loop exits the macro if Cancel is pressed. If the name is unmatched from the start, the loop never runs. This prevents two sheets from having the same name. |
Doc.Sheets.CopyByName(Sheet1, Sheet2, Doc.Sheets.Count)** | Doc.Sheets.CopyByName(Sheet1, Sheet2, Doc.Sheets.Count)** |
| |
La boucle Do While ... vérifie si une autre feuille du document Calc a le même nom. La méthode hasByName compare le nom aux noms des autres feuilles du classeur. Si une identité est détectée, la macro utilise une fonction InputBox pour demander un nouveau nom différent à l'utilisateur. La boucle Do While ... tournera jusqu'à ce que la nom dans Sheet2 soit différent des autres noms de feuilles. Le test « If » dans la boucle provoque une sortie de la macro si la touche Annuler est pressée. Si le nom n'est jamais modifié, la boucle continue indéfiniment. Ceci évite que 2 feuilles puissent avoir le même nom. | La boucle Do While... vérifie si une autre feuille du document Calc a le même nom. La méthode hasByName compare le nom aux noms des autres feuilles du classeur. Si une correspondance est détectée, la macro utilise une fonction InputBox pour demander un nouveau nom différent à l'utilisateur. La boucle Do While... tournera jusqu'à ce que le nom dans Sheet2 soit différent des autres noms de feuilles. Le test « If » dans la boucle provoque une sortie de la macro si vous cliquez sur Annuler. Si, dès le départ, le nom est sans correspondance, la boucle ne se lance pas. Ceci évite que deux feuilles puissent avoir le même nom. |
| |
NOTE : Le trait de soulignement (_) dans la déclaration InputBox est utilisé pour couper une longue ligne de texte en morceaux plus courts. Le Basic LibreOffice exige que le trait de soulignement soit le dernier caractère de la ligne. Rien, pas même un espace, ne peut le suivre. Quand des lignes sont reliées par ce biais, LibreOffice les considère comme une seule ligne. | NOTE : Le trait de soulignement (_) dans la déclaration InputBox est utilisé pour couper une longue ligne de texte en morceaux plus courts. Le Basic de LibreOffice exige que le trait de soulignement soit le dernier caractère de la ligne. Rien, pas même une espace, ne peut le suivre. Quand des lignes sont reliées par ce biais, LibreOffice les considère comme une seule ligne. |
| |
Doc.Sheets.CopyByName(Sheet1, Sheet2, Doc.Sheets.Count) | Doc.Sheets.CopyByName(Sheet1, Sheet2, Doc.Sheets.Count) |
When I developed and wrote the CopySheet macro, I created a macro module for Calc. Here I could store this macro as well as any future macros designed for the Calc program. It's a good idea to group like macros together.** | When I developed and wrote the CopySheet macro, I created a macro module for Calc. Here I could store this macro as well as any future macros designed for the Calc program. It's a good idea to group like macros together.** |
| |
La dernière ligne de la macro regroupe tout le travail préparatoire pour au final exécuter la copie. Sheets est un appel à l'ensemble des feuilles du classeur. CopyByName est la méthode qui exécute vraiment la copie de feuille et qui la place à la fin des onglets. La fonction CopyByName a 3 paramètres : | La dernière ligne de la macro regroupe tout le travail préparatoire pour enfin exécuter la copie. Sheets est un appel à l'ensemble des feuilles du classeur. CopyByName est la méthode qui exécute la copie de feuille et qui la place à la fin des onglets. La fonction CopyByName a 3 paramètres : |
• Le nom de la feuille à copier (Sheet1) | • Le nom de la feuille à copier (Sheet1) ; |
• Le nom de la feuille copiée (Sheet2) | • Le nom de la feuille copiée (Sheet2) ; |
• La position de la nouvelle feuille (Doc.Sheets.Count) | • La position de la nouvelle feuille (Doc.Sheets.Count). |
| |
Count est le nombre total de feuilles du classeur (Sheets). Comme les feuilles sont comptées à partir de 0, l'utilisation faite ici de Count met la nouvelle feuille à la fin. | Count est le nombre total de feuilles du classeur (Sheets). Comme les feuilles sont comptées à partir de 0, l'utilisation faite ici de Count met la nouvelle feuille à la fin. |
Créer le module de macro Calc | Créer le module de macro Calc |
| |
Quand j'ai développé et écrit la macro CopySheet, J'ai créé un module de macro dans Calc. Ici je peux sauvegarder la macro ainsi que toute autre macro que je développerai pour le programme Calc. C'est une bonne pratique de regrouper les macros ainsi. | Quand j'ai développé et écrit la macro CopySheet, j'ai créé un module de macro dans Calc. Ici je pouvais sauvegarder la macro ainsi que toute autre macro que je développerai pour le programme Calc. C'est une bonne pratique de regrouper les macros ainsi. |
| |
**To create the module, Tools > Macros > Organize Macros > LibreOffice Basic. The LibreOffice Basic Macros dialog opens. Click Organizer to get the LibreOffice Basic Macro Organizer dialog. Under My Macros > Standard, there is a default module named Module 1. Select it and click Delete. With Standard selected, click New. Name the new Module “Calc” and click OK. Click Close. | **To create the module, Tools > Macros > Organize Macros > LibreOffice Basic. The LibreOffice Basic Macros dialog opens. Click Organizer to get the LibreOffice Basic Macro Organizer dialog. Under My Macros > Standard, there is a default module named Module 1. Select it and click Delete. With Standard selected, click New. Name the new Module “Calc” and click OK. Click Close. |
Now back in the LibreOffice Basic Macros dialog, select the new “Calc” module you just created and click Edit, opening the LibreOffice Macro Editor. Delete the automatically created “Sub Main” and “End Sub”. Type in or copy and paste the SheetCopy macro into the editor. Save the module and close the editor.** | Now back in the LibreOffice Basic Macros dialog, select the new “Calc” module you just created and click Edit, opening the LibreOffice Macro Editor. Delete the automatically created “Sub Main” and “End Sub”. Type in or copy and paste the SheetCopy macro into the editor. Save the module and close the editor.** |
| |
Pour créer le module, Outils > Macros > Gérer les macros > LibreOffice Basic ... La boîte de dialogue Macros LibreOffice Basic s'ouvre. Cliquez sur Gérer... pour ouvrir la boîte de dialogue Gestion des macros de LibreOffice Basic. Sous Mes macros > Standard, il y a un module par défaut appelé Module 1. Sélectionnez -le et supprimez-le. Sélectionnez Standard et cliquez sur Nouveau... Appelez "Calc" ce nouveau module et cliquez sur OK. Puis cliquez sur Fermer. | Pour créer le module Outils > Macros > Gérer les macros > LibreOffice Basic... La boîte de dialogue Macros LibreOffice Basic s'ouvre. Cliquez sur Gérer... pour ouvrir la boîte de dialogue Gestion des macros de LibreOffice Basic. Sous Mes macros > Standard, il y a un module par défaut appelé Module 1. Sélectionnez-le et supprimez-le. Sélectionnez Standard et cliquez sur Nouveau... Appelez « Calc » ce nouveau module et cliquez sur OK. Puis cliquez sur Fermer. |
| |
De retour dans la boîte de dialogue LibreOffice Basic, sélectionnez le module « Calc » juste créé et cliquez sur Éditer, ce qui ouvre l'éditeur de LibreOffice Basic. Effacez les lignes « Sub Main » et « End Sub » créées automatiquement. Saisissez ou copiez/collez la macro CopySheet dans l'éditeur. Sauvegardez le module et fermez l'éditeur. | De retour dans la boîte de dialogue LibreOffice Basic, sélectionnez le module « Calc » que vous venez de créer et cliquez sur Éditer, ce qui ouvre l'éditeur de LibreOffice Basic. Effacez les lignes « Sub Main » et « End Sub » créées automatiquement. Saisissez ou copiez/collez la macro CopySheet dans l'éditeur. Sauvegardez le module et fermez l'éditeur. |
| |
**Test The Macro | **Test The Macro |
Tester la macro | Tester la macro |
| |
Après avoir saisi et sauvé la macro, vous voulez la tester pour être sûr que toute la saisie est correcte. D'abord, ouvrez le document Calc ou créez-en un nouveau. Vous pouvez maintenant faire le test en allant à Outils > Macros > Exécuter la macro... Dans Bibliothèque, sélectionnez Mes macros > Standard > Calc. Sous Nom de la macro, sélectionnez CopySheet et cliquez sur Exécutez. Entrez un nouveau nom pour la feuille comme "New Sheet". Cliquez sur OK. Si tout va bien, une nouvelle feuille est créée avec le nom que vous avez saisi. Vous voudrez répéter le test sans changer le nom pour voir si la macro vous demande un nom différent. Aussi, faites un test pour vérifier que la macro s'arrête quand vous cliquez sur Annuler plutôt que sur OK. Pour le dernier essai, ouvrez un document texte et lancez la macro. Vous devriez avoir un message vous disant que la macro ne fonctionne que pour les tableurs. | Après avoir saisi et sauvé la macro, vous voulez la tester pour être sûr que toute la saisie est correcte. D'abord, ouvrez le document Calc ou créez-en un nouveau. Vous pouvez maintenant faire le test en allant à Outils > Macros > Exécuter la macro... Dans Bibliothèque, sélectionnez Mes macros > Standard > Calc. Sous Nom de la macro, sélectionnez CopySheet et cliquez sur Exécuter. Entrez un nouveau nom pour la feuille comme « New Sheet ». Cliquez sur OK. Si tout va bien, une nouvelle feuille est créée avec le nom que vous avez saisi. Vous devez répéter le test sans changer le nom pour voir si la macro vous demande un nom différent. Faites également un test pour vérifier que la macro s'arrête quand vous cliquez sur Annuler plutôt que sur OK. Pour le dernier essai, ouvrez un document texte et lancez la macro. Vous devriez avoir un message vous disant que la macro ne fonctionne que pour les tableurs. |
| |
**NOTE: Back in Full Circle issue 64 (LibreOffice Part 17: Macros), I showed you how to create a menu shortcut to a macro. This is a good candidate for such a shortcut. Create the menu and shortcut in Calc. | **NOTE: Back in Full Circle issue 64 (LibreOffice Part 17: Macros), I showed you how to create a menu shortcut to a macro. This is a good candidate for such a shortcut. Create the menu and shortcut in Calc. |
Macros like CopySheet can speed up your processes and prevent you from making mistakes, which is the whole idea behind macros. This is just an example of something you can do with macros, but you can write your own macros that can expand the use or capabilities of any of the LibreOffice programs, or just reduce a task you do often. A Google search for “LibreOffice Basic” is a good place to start learning more.** | Macros like CopySheet can speed up your processes and prevent you from making mistakes, which is the whole idea behind macros. This is just an example of something you can do with macros, but you can write your own macros that can expand the use or capabilities of any of the LibreOffice programs, or just reduce a task you do often. A Google search for “LibreOffice Basic” is a good place to start learning more.** |
| |
NOTE : Retour sur l'article dans le numéro 64 de FCM (LibreOffice Partie 17 : Macros). Je vous avais montré comment créer un raccourci du menu vers une macro. Vous avez ici un bon candidat pour un tel raccourci. Créez le menu et le raccourci dans Calc. | NOTE : Dans l'article du n° 64 du FCM (LibreOffice Partie 17 : Macros), je vous avais montré comment créer un raccourci du menu vers une macro. Vous avez ici un bon candidat pour un tel raccourci. Créez le menu et le raccourci dans Calc. |
| |
Les macros comme CopySheet peuvent accélérer vos processus et vous éviter de faire des erreurs, qui est toute l'idée derrière les macros. Ce n'est qu'un exemple de ce que vous pouvez faire avec les macros, mais vous pouvez écrire vos propres macros qui vont étendre l'utilisation ou les capacités de n'importe quel programme de LibreOffice, ou raccourcir une tache que vous faites souvent. Une recherche dans Google sur « LibreOffice Basic » est un bon endroit pour commencer à en apprendre plus. | Les macros comme CopySheet peuvent accélérer vos processus et vous éviter de faire des erreurs, ce qui est toute l'idée derrière les macros. Ce n'est qu'un exemple de ce que vous pouvez faire avec les macros, mais vous pouvez écrire vos propres macros qui vont étendre l'utilisation ou les capacités de n'importe quel programme de LibreOffice, ou tout simplement raccourcir une tâche que vous faites souvent. Une recherche dans Google sur « LibreOffice Basic » est un bon endroit pour commencer à en apprendre plus. |