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 : 🢃