Comment envoyer un mail depuis Calc en utilisant une macro

Une macro sert à effectuer un traitement ou une suite de traitements de manière automatisée. Open Office permet de créer des macros et ce dans plusieurs langages. Dans ce tutoriel, nous verrons le langage BASIC par un exemple d’utilisation sous Calc. Nous verrons également comment insérer un bouton sur une feuille de calcul et lui affecter une macro préalablement créée.

Objectif du traitement automatisé

Un classeur est utilisé par 3 services différents. Chaque service doit intervenir sur ce classeur lorsque le service précédent à terminé sa mise à jour. Pour éviter d’avoir à saisir un mail pour avertir le service suivant qu’il peut commencer à travailler sur le classeur, il a été demandé d’ajouter un bouton d’envoi de mail à tous les intervenants dès qu’une mise à jour a été faite.

Préparation du classeur

Il a été décidé de créer une nouvelle feuille nommée « diffusion » au classeur. Cette feuille contiendra les éléments constitutifs du mail : la liste des destinataires, le sujet, le texte.

Pour simplifier et limiter de la saisie, le nom de session utilisateur sera ajouté en signature du mail.

feuille diffusion - données du mail

Feuille diffusion

Cette feuille pourra être protégée en modification par la suite pour éviter toutes modifications.

Ajout d’une macro

Les macros sont stockées dans des modules qui peuvent être directement intégrés aux fichiers. Nous allons utiliser ce type de gestion de macro pour cet exemple. Nous pourrions tout aussi enregistrer nos macros dans la bibliothèque « Mes macros » qui rend disponibles les macros pour tous les documents de la suite Open Office.

Pour créer une macro, appuyer sur ALT + F11
ou cliquer sur le menu Outils->Macros->Gérer les macros->OpenOffice.org Basic

Créer une macro

Créer une macro

pour obtenir l’écran suivant

Créer une nouvelle macro

Créer une nouvelle macro

Ici, nous nous occupons uniquement des macros de notre fichier Services. Il n’y a actuellement aucun module dans notre fichier. Il faut donc commencer par créer un module que nous nommerons « mail ».

Cliquer sur Nouveau, la fenêtre de création de module s’affiche.

Fenêtre de création d'un nouveau module

Fenêtre de création d'un nouveau module

Dès que le nom est renseigné et que l’on a cliqué sur OK, l’environnement de développement apparaît.

Environnement de développement de OpenOffice

Environnement de développement de OpenOffice

Ecriture du code BASIC

Ici, nous n’avons pas besoin du point d’entrée Main et pouvons le supprimer.

Il y a toujours plusieurs manières de créer les traitements et deux personnes aurons rarement le même code.  Pour cet exemple, 1 procédure et 3 fonctions ont été faites

La procédure, qui sera appelée directement au clic sur le bouton, se servira des fonctions de lecture des cellules de notre feuille « diffusion ».

sub mail
     REM  %0D%0A =  retour à la ligne et saut de ligne
     Dim oShell As Object
     dim strMail as string
     strMail  = "mailto:"
     strMail = strMail + lit(0,0,";")
     strMail = strMail + "?subject=" + litSujet
     strMail = strMail + "&Body=" + lit (2,1,"%0D%0A%0D%0A")
     oShell = createUnoService("com.sun.star.system.SystemShellExecute")
     oShell.Execute(strMail,"",0)
end sub

function lit (colonne, ligne, separateur)
     REM retourne la valeur des cellules
     REM 2 cas différents : destinataires du mail et texte du mail
     REM les destinataires se trouvent sur la colonne 0 et commencent à la 1ère ligne
     REM le texte du mail commence à la 3ème colonne et à la 2ème ligne
     dim encore as boolean
     dim compteur as integer
     dim valeur as string
     encore=true
     lit=""
     compteur=ligne
     REM boucle qui continue tant qu'une cellule contient une valeur
     do while encore=true
          valeur =litCellule(colonne,compteur)
          if valeur="" then
               encore=false
          else
               lit=lit + valeur + separateur
               compteur = compteur+1
          end if
     loop
end function

Function litCellule(colonne,ligne)
     REM retourne la valeur de la cellule dont les coordonnées sont été données en paramètres
     litCellule= ThisComponent.Sheets.getByName("diffusion" ).getCellByPosition (colonne,ligne).getString
end Function

Function litSujet()
     REM retourne la valeur de la cellule qui correspond au sujet
     REM Cette cellule étant fixée à l'avance, les coordonnées sont mises en dur : 3ème colonne, 1ère ligne
     litSujet =  litCellule(2,0)
end function

Nota : ce code est volontairement écrit sur cette page pour vous permettre de faire un copier coller et l’insérer dans votre module. Les lignes commençant par REM sont des lignes de commentaires.
Ci-dessous, le même code avec la coloration syntaxique de l’environnement de développement.

Environnement de développement : procédure et fonction BASIC calc

Environnement de développement : procédure et fonction BASIC

Ajout d’un bouton sur la feuille

Pour pouvoir ajouter le bouton, s’assurer que la barre d’outils de formulaire est bien affichée :

barre d'outils contrôles de formulaire

Barre d'outils contrôles de formulaire

Seuls deux boutons de cette barre d’outils vont nous intéresser :

extrait de la barre d'outils controles de formulaire

extrait de la barre d'outils controles de formulaire

Les 2 boutons mis en évidences ci dessus nous concernent donc. Le premier (équerre) active ou désactive le mode de conception. En mode de conception, nous allons pouvoir sélectionner, ajouter, modifier notre bouton. En sortant du mode de conception, un clic sur le bouton activera l’action liée.  Le second permet d’ajouter notre bouton.

Une fois notre bouton ajouté sur la feuille, un clic droit de la souris nous affiche un menu contextuel dans lequel nous sélection « contrôle » pour obtenir les propriétés de notre contrôle.

Propriété du contrôle

Propriété du contrôle

Nous renommons le Bouton 1 en « btnMail » ainsi que l’étiquette en « Envoyer Mail » et choisissons l’onglet Evénements pour nous permettre d’affecter notre macro Mail à l’action du bouton.

Assigner une action

Assigner une action

Cliquer sur les … (Exécuter une action) du formulaire « Propriétés: Bouton » puis cliquer sur Macro… dans le formulaire Assigner une action. Enfin, dérouler la bibliothèque de notre fichier et sélectionner le module mail, choisir la macro mail et valider chaque formulaires.

Pour vérifier que tout fonctionne, désactiver le mode de conception et cliquer sur le bouton « Envoyer Mail ».

Vous devriez voir votre client de messagerie s’ouvrir avec le mail prêt à l’envoi.

A noter que le montant présent dans le texte du mail (voir feuille diffusion) est le résultat d’un calcul effectué sur notre feuille de travail.

Un complément d’information pour ce tuto, une erreur à signaler…

ajout janvier 2011

Un supplément à ce tuto calc sera bientôt en ligne. Il indiquera comment, lors du traitement d’envoi du mail,  nous pouvons vérifier les adresses mails saisies dans la colonne.