TOP

VBA-Leçon 14.2. Création d'une fonction personnalisée

Avec VBA, vous pouvez créer une fonction personnalisée (appelée User Defined Function) qui peut être utilisée dans des feuilles de calcul tout comme les fonctions normales. Ceci est utile lorsque les fonctions Excel existantes ne sont pas suffisantes.

User Defined Function (UDF) est une fonction créée par l'utilisateur qui n'existe pas dans la fonctionnalité standard Excel.

Dans cet exemple, nous allons créer une fonction IF personnalisée qui peut être utilisée dans des calculs sur une feuille de calcul, similaire à d'autres fonctions Excel.


Pour afficher la valeur de (B2) si la cellule (C2) a la valeur ("YES"), on pourrait utiliser la fonction IF dans la formule =IF(C2="YES",B2,0) :

Notre objectif dans ce cas est de créer une fonction qui pourrait faire cela =IF(C2 a un fond vert,B2,0) et que l'on écrirait comme : =IF_GREEN(C2,B2) :

Création d'une fonction personnalisée (UDF)

Commençons par créer notre propre fonction UDF :

Function IF_GREEN(paid As Range, amount)
     
End Function

Arguments:

  • paid As Range : la cellule que nous allons vérifier ;
  • amount : la valeur que nous insérerons si TRUE.
  • Dans ce cas, si la vérification renvoie FALSE, la valeur sera toujours 0, il n'y a donc aucune raison de spécifier un argument pour cela.

    Pour vérifier si la couleur est correcte, vous pouvez utiliser la cellule qui contient la couleur dont vous avez besoin :

    Function IF_GREEN(paid As Range, amount)
    
         green_color = Sheets("Sheet1").Range("K1").Interior.color
    
    End Function
    

    Mais pour éviter de dépendre des cellules, on utilisera simplement le numéro de la couleur souhaitée :

    Function IF_GREEN(paid As Range, amount)
    
         green_color = 5296274 'Vert
    
    End Function
    

    Pour déterminer le numéro de couleur d'arrière-plan d'une cellule, sélectionnez la cellule et exécutez cette macro :

    Sub test_color()
         MsgBox ActiveCell.Interior.color
    End Sub
    

    Il ne nous reste plus qu'à vérifier la couleur de la cellule en utilisant IF :

    Function IF_GREEN(paid As Range, amount)
         
         Application.Volatile
         
         green_color = 5296274 'Vert
        
         If paid.Interior.color = green_color Then 'SI VRAI
            IF_GREEN = amount
         Else 'SI MENSONGE
            IF_GREEN = 0
         End If
         
    End Function
    

    Notre fonction est maintenant prête à être utilisée.

    Application.Volatile nous indique que l'application (Excel) doit être sensible aux changements (comme c'est le cas avec la fonction normale IF). Cela signifie qu'il recalculera la fonction à chaque fois que la valeur change. Par exemple, si vous modifiez une valeur dans la colonne Montant (ou dans toute autre cellule), cette fonction sera recalculée et le montant mis à jour sera affiché.

    Cependant, la modification du remplissage des cellules n'est pas l'événement qui déclenche le recalcul. Pour forcer Excel à recalculer les valeurs, vous pouvez sélectionner n'importe quelle cellule vide et cliquer sur Supprimer, ou ajouter un bouton Actualiser ("Refresh") qui actualisera tout lorsque vous cliquerez dessus :

    Sub refresh_macro()
         Application.Calculate
    End Sub
    

    En plus

    Vous trouverez ci-dessous une manière abrégée d’écrire la même fonction :

    Function IF_GREEN(paid As Range, amount)
         Application.Volatile
         IF_GREEN = 0 'SI MENSONGE
         If paid.Interior.color = 5296274 Then IF_GREEN = amount 'SI VRAI
    End Function
    

    Vous pouvez télécharger le fichier Excel contenant cet exemple en cliquant ici : 🢃