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) :
Commençons par créer notre propre fonction UDF :
Function IF_GREEN(paid As Range, amount) End Function
Arguments:
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.
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
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 : 🢃