Monsieur Excel
Pour tout savoir faire sur Excel !

04 octobre 2019

Une fonction personnalisée étrange

Mon collègue MVP Jon Peltier vient de publier une fonction personnalisée étrange, car elle fait deux choses que les fonctions personnalisées ne sont pas censées faire : elle permet de modifier la couleur des cellules servant d’argument à la fonction, ainsi que celle de la cellule contenant la fonction.

Voici le code de la fonction personnalisée :

Public Function UDF_SUM(v As Variant)
  If TypeName(v) = "Range" Then
    Debug.Print v.Address
    v.Font.Color = vbRed ' not supposed to, but does
    v = v.Value
  End If
  Dim i As Long, j As Long
  For i = LBound(v, 1) To UBound(v, 1)
    For j = LBound(v, 2) To UBound(v, 2)
      UDF_SUM = UDF_SUM + v(i, j)
    Next
  Next
  Application.Caller.Font.Color = vbBlue ' not supposed to, but does
End Function

La copie d’écran ci-dessous montre un tableau où la ligne 10 fait appel à cette fonction.

Nous constatons qu’après revalidation de la formule en D10, les arguments de la fonction sont bien passés en rouge, et que le résultat de la fonction est bien passé en bleu.


2 Commentaire(s):

  • Bonjour,

    Excusez-moi mais je ne vois pas bien où est le caractère "étrange" de la fonction.
    Dans VBA on peut faire ce qu'on veut dans une fonction !
    De plus, pourquoi reprogrammer une fonction somme en VBA alors qu'Excel fait çà très bien :))

    Public Function UDF_SUM(v As Variant)
    If TypeName(v) = "Range" Then
    v.Font.Color = vbRed
    UDF_SUM = Application.WorksheetFunction.Sum(v)
    Application.Caller.Font.Color = vbBlue
    End If
    End Function

    By Anonymous cduigou, sur 8:32 PM  

  • Cher lecteur,

    Content de voir que vous êtes toujours là !

    Je plaide coupable, j'ai simplement reproduit la fonction personnalisée originale. Je dois avouer que je n'écris pas souvent des fonctions personnalisées et je lui ai donc fait confiance pour ses commentaires...

    By Blogger Hervé Thiriez, sur 7:08 PM  

Enregistrer un commentaire

<< Accueil