FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireLes fonctions personnelles

Il s'agit d'une fonction normale.Par exemple

Vba
Sélectionnez
 
Function InvChaine(Cellule As Range) As Variant
 
Dim MaChaine As String, cmpt As Long
 
If Len(Cellule.Value) = 0 Then
    InvChaine = CVErr(xlErrValue)
Else
    MaChaine = CStr(Cellule.Value)
    For cmpt = Len(MaChaine) To 1 Step -1
        InvChaine = InvChaine & Mid(MaChaine, cmpt, 1)
    Next cmpt
End If
 
End Function


Si dans votre feuille vous écrivez la formule =invchaine(E2), la cellule contiendra la chaine retournée, ou #VALEUR.

Créé le 14 février 2004  par Bidou

C'est possible en utilisant la syntaxe:

Optional [NomVariable] As [TypeVariable] = [Donnée par défaut]

Vba
Sélectionnez

Sub Test()
    'Renvoie tous les arguments spécifiés
    MsgBox MaProcedure(5, "fifi")
    'Renvoie 5 et "mimi" car l'argument Optional (strPrenom) n'est pas précisé
    MsgBox MaProcedure(5)
End Sub
 
 
Function MaProcedure(lngValeur As Long, Optional strPrenom As String = "mimi")
    MaProcedure = lngValeur & vbCrLf & strPrenom
End Function
Créé le 2 octobre 2007  par SilkyRoad

Utilisez la propriété Application.Caller dans votre fonction personnelle. Celle-ci renvoie un objet Range correspondant à la cellule qui contient la formule d'appel.

Ce premier exemple renvoie les coordonnées de la cellule qui a déclenché la fonction:

Vba
Sélectionnez

Cible = Application.Caller.Address



Vous pouvez ainsi identifier l'adresse de la cellule dans laquelle vous avez saisi une fonction personnelle :

Vba
Sélectionnez

Function AdresseCellule()
    AdresseCellule = Application.Caller.Address
End Function



Et la formule suivante renverra la référence de la cellule :
=AdresseCellule()


La fonction suivante identifie le nom de la feuille qui contient la formule. Elle peut aussi servir à afficher le nom de la feuille active dans une cellule :

Vba
Sélectionnez

Function FeuilleActive() As String
    Application.Volatile
    FeuilleActive = Application.Caller.Worksheet.Name
End Function



Et vous insérez dans une cellule:
=FeuilleActive()


A partir d'Excel 2003, une nouvelle propriété est disponible : ThisCell.
Cette propriété renvoie la cellule à partir de laquelle la fonction définie par l'utilisateur est appelée en tant qu'objet Range.

Vba
Sélectionnez

Function AdresseCellule()
    AdresseCellule = Application.ThisCell.Address
End Function



Remarque :
Lorsque la référence est une plage de cellules (cas d'une formule matricielle), ThisCell renvoie la première cellule en haut et à gauche dans le tableau alors que Caller renvoie le tableau complet.

Mis à jour le 18 novembre 2008  par SilkyRoad

Dans l'éditeur de macros:
Utilisez le raccourci clavier F2 pour afficher l'explorateur d'objets.
Sélectionnez "VBAproject" dans le menu déroulant.
Votre fonction apparait dans la fenêtre de droite.
Faites un clic droit.
Sélectionnez l'option "Propriétés".
Saisissez la description pour la fonction.
Cliquez sur le bouton OK pour valider.


Une autre solution, en passant pas la boîte de dialogue des macros:
Menu Outils
Macro
Macros
Dans le champ "Nom de la macro", saisissez le nom complet de la fonction.
Le bouton " Options" est alors accessible pour ajouter la description.
Cliquez sur le bouton OK pour valider.


Cette action peut aussi être réalisée par macro:
Cet exemple ajoute une description et place la fonction dans la catégorie 5 (Recherche et matrices).
La macro n'a besoin d'être lancée qu'une seule fois. Les paramètres seront ensuite définitivement enregistrés dans l'application.

Vba
Sélectionnez

Application.MacroOptions Macro:="NomFonction", _
    Description:="La description pour ma fonction personnalisée.", Category:=5



Liste des catégories Excel2007:
1 Finances
2 Date Heure
3 Math Trigo
4 Statistiques
5 Recherche Matrices
6 Base de données
7 Texte
8 Logique
9 Information
10 Commandes
11 Personnalisation
12 Contrôle de macros
13 DDE/Externe
14 Personnalisées
15 Ingénierie
16 Cube

Créé le 5 décembre 2007  par SilkyRoad

Utilisez ParamArray.
Les tableaux de paramètres permettent de passer un tableau d'arguments à une procédure. Le nombre d'éléments indiqué peut être variable.

ParamArray:
     * Doit obligatoirement être déclaré en type Variant.
     * Ne peut pas coexister avec des arguments Optional.
     * Doit être placé en dernière position dans la liste des arguments.
     * Les arguments ne sont pas facultatifs.
     * Chaque argument peut être d'un type de données différent.
     * Le nombre d'arguments n'est pas limité.
     * L'indice inférieur du tableau est toujours 0.

Lorsque l'appel de procédure est effectué, chaque argument fourni dans l'appel devient un élément indexé du tableau.

Un exemple qui supprime une série de caractères dans une chaîne:

Vba
Sélectionnez

Option Explicit
 
Sub Test()
    Dim strChaine As String
 
    strChaine = "m!im::i;"
    'La procédure va supprimer les caractères ; : !
    'dans la variable "Chaine"
    strChaine = SupprimeCaracteres(strChaine, ";", ":", "!")
    MsgBox strChaine
End Sub
 
Function SupprimeCaracteres(LeTexte As String, ParamArray A_Supprimer1())
    Dim i As Integer
    'Boucle sur les éléments du tableau
    For i = 0 To UBound(A_Supprimer1())
        'Supprime les caractères spécifiés
        LeTexte = Replace(LeTexte, A_Supprimer1(i), "")
    Next i
    SupprimeCaracteres = LeTexte
End Function




Si vous utilisez ParamArray dans une fonction, ajoutez le chiffre 1 en fin de nom du paramètre. Ainsi l'assistant de fonctions Excel incrémentera automatiquement chaque nouvel élément indiqué par l'utilisateur.

Image non disponible

Créé le 5 décembre 2007  par SilkyRoad

Ce tutoriel présente la création et l'utilisation des fonctions complémentaires dans Excel:

Les fonctions personnelles dans Excel.

Créé le 19 février 2008  par SilkyRoad

Adapté pour Excel2007, d'une procédure initiale de Laurent Longre.

Vba
Sélectionnez

Sub ListeCategories()
    Dim NomCat As String
    Dim i As Integer
 
    'Adapté pour Excel2007, d'une procédure initiale de Laurent Longre.
    Do
        i = i + 1
        Application.ExecuteExcel4Macro "DEFINE.NAME(""Cible" & i & """,0,2,,," & i & ")"
        NomCat = Names("Cible" & i).Category
        Debug.Print i & ": " & NomCat
        Application.ExecuteExcel4Macro "DELETE.NAME(""Cible" & i & """)"
    Loop Until NomCat = "User Defined" And i > 14
 
End Sub
Créé le 26 mai 2008  par Microsoft

Si la fonction contient une boucle récursive (fonction qui s'appelle elle même), veillez à prévoir une condition de sortie dans la procédure, sinon l'exécution se termine par une erreur 28.

Une sortie de la fonction peut être déclenchée :
* Lorsqu'une condition est vérifiée.
* Quand un nombre d'itérations maximum est atteint.

L'instructions de sortie est :
* Exit Function
Cette instruction permet de quitter immédiatement la procédure Function. L'exécution se poursuit par l'instruction suivant celle qui a appelé l'instruction Function.


La gestion des boucles dans Excel.

Créé le 26 mai 2008  par SilkyRoad

Insérez l'instruction "Option Private Module" en tête du module standard qui va contenir votre fonction :

Vba
Sélectionnez

Option Private Module
 
Function MaFonction()As Double
MaFonction = 10.782
End Function
 



La fonction est alors utilisable dans tous les modules et depuis les feuilles de calcul du classeur qui la contient mais n'apparait pas dans la boîte de dialogue 'Insérer une fonction'.

Créé le 18 novembre 2008  par Emmanuel Tissot
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.