Écriture de code

Décembre 2016
Lorsque vous écrivez du code, cela signifie que vous modifiez ou créez une procédure. Le processus est identique qu'il s'agisse d'une sous-routine ou d'une fonction.

ENREGISTRER DES MACROS


Cela peut paraître curieux, mais le meilleur moyen de créer des macros est souvent d'en enregistrer. Les macros enregistrées présentent souvent des informations redondantes (même si cela s'améliore au fil de l'évolution des produits) qui les rendent un peu lourdes : vous pouvez commencer par vous « faire la main » en copiant et en essayant d'optimiser de telles procédures.
Ensuite, c'est un excellent moyen de déterminer rapidement comment effectuer telle ou telle opération par programmation : le code enregistré vous donne immédiatement la solution, que vous n'avez plus qu'à recopier dans la procédure qui vous préoccupe.
Il n'y a aucune honte à procéder ainsi, bien au contraire : c'est souvent un des seuls moyens de découvrir des astuces auxquelles vous n'auriez pas pensé. Renoncer à employer des méthodes rapides et efficaces serait faire preuve d'un entêtement dommageable...
Partir d'une procédure enregistrée pour chercher à l'optimiser et à l'adapter est un des moyens les plus efficaces que je connaisse pour maîtriser rapidement ce type de programmation.

ÉCRIRE UNE PROCEDURE

  • Ouvrez le classeur auquel vous voulez ajouter la ou les nouvelles procédures.
  • Choisissez dans le menu Outils > Macro > Macros ou appuyez sur ALT+F8 (Excel) ou choisissez dans le menu Outils > Macros > Gérer les macros > OpenOffice.org Basic (Calc).
  • Nommez cette procédure (nom de sous-routine ou de fonction) dans la zone Nom de la macro.

À SAVOIR


Les noms de procédures doivent commencer par une lettre et peuvent contenir des lettres, des chiffres, ainsi que le caractère de soulignement. Les espaces ne sont pas permis. Excel autorise les caractères accentués, mais pas Calc.
  • Cliquez sur le bouton Créer (Excel) ou Nouveau (Calc). L'éditeur de macro s'ouvre, affichant la nouvelle procédure. L'instruction Sub est suivie du nom de la procédure et de l'instruction End Sub.
  • Si vous voulez créer une fonction, remplacez le mot Sub par Function, dans la première ligne de la nouvelle procédure. Dans la dernière ligne, End Sub deviendra automatiquement End Function avec Excel ; avec Calc, vous devez vous-même procéder à la modification.
  • Entrez les instructions de la nouvelle procédure.

ASTUCE


Si vous êtes déjà dans l'éditeur VBA, il suffit pour créer une nouvelle procédure de saisir en dehors d'une procédure existante Sub ou Function directement dans la fenêtre Code, suivi par le nom de la procédure (et des éventuels arguments). Après avoir appuyé sur la touche ENTREE, l'éditeur ajoute automatiquement les instructions End Sub ou End Function à la fin de la nouvelle procédure.

Par exemple, une fonction VOL(a; b; c) qui calcule le volume d'un parallélépipède rectangle dont les côtés ont pour longueur a, b et c pourrait présenter l'aspect suivant, en VBA ou en OpenOffice.org Basic :
Function VOL(a, b, c)
VOL = a*b*c
End Function

ASTUCE


Avec VBA, tapez toutes les instructions en minuscules. Ce faisant, vous pourrez détecter les erreurs au cours de la frappe. Quand vous passerez à la ligne suivante, l'éditeur mettra en majuscule une lettre au moins de chacun des mots de la ligne, pour peu que vous les ayez tapés correctement. Il mettra aussi en majuscules les noms des variables et des constantes. Si rien de tel ne se produit, vérifiez le mot en question. Est-il correctement orthographié ? S'agit-il véritablement d'un objet, d'une méthode, d'une propriété ou d'une fonction du langage ?

D'accord, cette fonction ne présente pas un grand intérêt : il est plus long de saisir dans une cellule =VOL(a,b,c), avec ses onze caractères, que de saisir les six caractères de =a*b*c. Que vous remplaciez a, b et c par des références ou des variables n'y changera rien.
Imaginez toutefois une fonction nettement plus complexe, que vous seriez amené à saisir régulièrement dans vos feuilles de calcul. Par exemple, le calcul du nombre de jours d'un mois donné, à partir d'une date. La formule est la suivante :

=JOUR(DATE(ANNEE(A2);SI(MOIS(A2)=12;1;MOIS(A2)+1);1)-1)

Nous supposons ici que la cellule A2 contient la date concernée.
Il n'est pas facile de mémoriser cette formule, et surtout fastidieux de la saisir dans chaque nouvelle feuille de calcul. Vous pourriez bien sûr recourir au copier-coller déjà examiné, mais vous pourriez également envisager de créer une fonction personnalisée. Il suffira alors de saisir le nom de la fonction, comme avec n'importe quelle fonction intégrée.
La plupart des fonctions nécessitent au moins un argument : une information indispensable pour que la fonction puisse effectuer correctement le calcul. Il s'agit ici d'une date, à partir de laquelle la fonction va déterminer le nombre de jours du mois auquel se rapporte la date.
Voici comment créer cette fonction :

Avec Excel


=Affichez le Classeur de macros personnelles. S'il n'existe pas, ouvrez un nouveau classeur.
=Naviguez vers un module du Classeur de macros personnelles ou insérez-en un nouveau.

Avec Calc

  • Choisissez dans le menu Outils > Macros > Gérer les macros > OpenOffice.org Basic.
  • Dans la zone Macro de, naviguez jusqu'à Mes Macros > Standard > Module1. Dans la zone Nom de la macro, saisissez NbJours, puis cliquez sur Nouveau.

Avec les deux tableurs, saisissez ensuite ce qui suit dans le module (avec Calc, vous devez modifier Sub en Function et End Sub en End Function) :

Function NbJours(DateComplete)
NbJours = Day(DateSerial(Year(DateComplete), IIf(Month(DateComplete) = 12, 1, Month(DateComplete) + 1), 1) - 1)
End Function
Comme vous le remarquez certainement, cette formule diffère largement de celle saisie précédemment. Les noms de toutes les fonctions intégrées ont été transformés en anglais (JOUR devient DAY et MOIS, MONTH), certains étant même plus profondément modifiés : DATE devient DATESERIAL et SI devient IIf.

Les langages Basic sont le plus souvent fondés sur l'anglais et ne sont pas localisés dans l'éditeur, comme le sont les noms des fonctions intégrées dans une feuille de calcul. Vous constaterez la même chose avec la plupart des propriétés et des objets.
Une fois la saisie terminée, enregistrez votre travail en cliquant sur le bouton Enregistrer de la barre d'outils Standard de l'éditeur.

MISE EN OEUVRE D'UNE FONCTION DEFINIE PAR L'UTILISATEUR


Une fois la fonction créée dans l'éditeur de macros, vous pouvez l'appliquer de la même façon que les fonctions intégrées de votre tableur.

EXEMPLES PRATIQUES


Après avoir défini comme expliqué ci-dessus les fonctions VOL() et NbJours, ouvrez un document et saisissez dans les cellules A1, A2 et A3 des nombres pour les paramètres de fonction a, b et c.
Placez le curseur dans la cellule B1 et saisissez :
=VOL(A1;A2;A3)
La fonction est évaluée et le résultat apparaît dans la cellule sélectionnée.

Placez-vous ensuite dans la cellule C1 et saisissez la date 15/02/2000.
Sélectionnez la cellule C2 et saisissez =NbJours(C1).

À SAVOIR


Avec Excel, vous pouvez à la place choisir dans le menu Insertion > Fonction. Dans la liste Catégories des fonctions, sélectionnez Personnalisées, puis dans la liste Nom de la fonction, choisissez NbJours (le nom de la fonction n'inclut le nom de dossier Perso.xls! que si vous avez stocké la fonction dans ce dossier et que celui-ci est masqué lorsque vous insérez la fonction).
Tapez C1 dans la zone de texte DateComplete, puis cliquez sur OK.

La fonction personnalisée renvoie 29 (l'an 2000 est une année bissextile).

A voir également :

Ce document intitulé «  Écriture de code  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.