Sommaire > 3. Exemples de macros fonctions |
3. Exemples de macros fonctionsUne macro fonction est une nouvelle fonction ajoutée à l'application hôte. Elle reçoit un ou plusieurs paramètres ou arguments et renvoie un résultat. 3.1. Fonction qui permet de contrôler un numéro de compte bancaire3.1.1. Création de la fonction dans ExcelPour créer une macro fonction, on doit introduire les instructions dans un module Visual Basic. Un même module Visual Basic peut contenir des macros commandes et des macros fonctions. On active Visual Basic Editor et on ajoute un module de la façon suivante :
Les instructions Visual Basic qui permettent de définir une fonction sont entourées des mots clés : Function et End Function. Exemple :Création d'une fonction qui contrôle la cohérence d'un numéro de compte bancaire. Ce numéro a été encodé sous la forme XXXYYYYYYYZZ (sans les tirets) et la cellule a été formatée à l'aide du format 000-0000000-00[3].
Un numéro de compte bancaire est correct si :
Cette fonction renvoie la valeur « OK » si le compte est correct, sinon elle renvoie la valeur « COMPTE BANCAIRE INCORRECT ». Voici le texte de la macro :' ' Contrôle du numéro de compte bancaire ' Function CtrlNoCompte(Compte) As String If IsEmpty(Compte) Then Exit Function If IsNumeric(Compte) Then I = Int(Compte / 100) ' 10 premiers chiffres digit = Compte - I * 100 ' 2 derniers chiffres ' reste de la division reste = I - Int(I / 97) * 97 If reste = 0 Then reste = 97 If reste <> digit Then CtrlNoCompte = "Compte bancaire incorrect" Else CtrlNoCompte = "Ok" End If Else CtrlNoCompte = "Compte bancaire incorrect" End If End Function Appel de la macro fonction :Ces fonctions sont classées dans les fonctions personnalisées. On peut utiliser « L'assistant fonction » ou la commande « Fonction... / Insertion ». Dans la feuille de calcul, il suffit de l'utiliser comme une fonction d'EXCEL. Par exemple, si dans la cellule B2, on écrit la formule :
3.1.2. Utilisation de la fonction dans Excel, Word et AccessOn peut exporter cette fonction dans un fichier texte pour pouvoir l'utiliser dans une autre application hôte.
On peut également utiliser cette fonction dans une macro commande. Par exemple :
Sub TestNoCompte() MsgBox CtrlNoCompte(ActiveCell) End Sub
Sub TestNoCompte() Selection.MoveStart Unit:=wdWord, Count:=1 Selection.StartOf Unit:=wdWord, Extend:=wdExtend test = CtrlNoCompte(Selection) If test = "Ok" Then Selection = Format(Selection, "000-0000000-00") Selection.MoveRight Unit:=wdCharacter, Count:=1 Selection.TypeText Text:=" " Else MsgBox (test) End If End Sub Dans Access, lors de la saisie du numéro de compte bancaire « [Numéro compte] », on vérifie que ce compte est correct. La fonction de validation CtrlNoCompte permet cette vérification. Voici la procédure à suivre :
SoundexL'algorithme utilisé pour transformer des noms, de telle sorte que deux noms phonétiquement voisins aient même valeur, est SOUNDEX, dont une description précise est donnée dans l'ouvrage de D.Knuth, The Art of Computer Programming, Vol.3, Sorting and Searching. – Addison Wesley, 1973, page 392. Cette fonction va calculer un code en quatre caractères (maximum) de façon à regrouper des mots de « même » consonance. Elle sera utilisée pour rechercher des valeurs dans une liste ou base de données. C'est ainsi que les mots «mètre», «mettre», «maître», ... auront le même code. Cet algorithme est d'ailleurs utilisé en généalogie pour retrouver les noms qui auraient subi une transformation due entre autres à une faute de recopie. Voici les idées sur lesquelles s'appuie l'algorithme :
Pour savoir si des lettres ont la même consonance, on s'appuie sur la table suivante (en français) :
Voici un résumé des différentes étapes de l'algorithme :
Cette fonction est grossière : ce n'est pas une vraie fonction de transcription en phonèmes. La recherche avec orthographe approximative donne souvent des résultats trop nombreux, et parfois déconcertants; inversement elle peut omettre un nom pourtant phonétiquement proche. Texte de cette fonctionFunction Soundex(s) As String Dim i As Integer, s1 As String ' Suppression des espaces et ' transformation du mot en majuscule s = UCase(Trim(s)) s1 = Left(s, 1) Select Case True Case s1 Like "[ÀÂÄ]": s1 = "A" Case s1 Like "[ÉÈÊË]": s1 = "E" Case s1 Like "[ÎÏ]": s1 = "I" Case s1 Like "[ÔÖ]": s1 = "O" Case s1 Like "[ÙÛÜ]": s1 = "U" Case s1 = "Ç": s1 = "C" End Select s = s1 & Mid(s, 2) ' Calcul du soundex ' Premier caractère Soundex = Left(s, 1) ' Autres caractères For i = 2 To Len(s) If Len(Soundex) = 4 Then Exit Function Else s1 = Mid(s, i, 1) Select Case True Case s1 Like "[BP]": s1 = "1" Case s1 Like "[CKQ]": s1 = "2" Case s1 Like "[DT]": s1 = "3" Case s1 = "L": s1 = "4" Case s1 Like "[MN]": s1 = "5" Case s1 = "R": s1 = "6" Case s1 Like "[GJ]": s1 = "7" Case s1 Like "[XZS]": s1 = "8" Case s1 Like "[FV]": s1 = "9" Case Else s1 = "" End Select ' Elimination des doubles If s1 <> "" Then If s1 <> Right(Soundex, 1) Then Soundex = Soundex & s1 End If End If End If Next i End Function [3] CELLULES... / FORMAT onglet NOMBRE catégorie PERSONNALISé type : 000-0000000-00. |
Sommaire - Début de cette page |