Calcul et mise en forme en une seule fonction

Bonjour à tous,

Je souhaite créer une macro dans Excel utilisable comme une fonction de base. Malheureusement, mes essais sont infructueux, et je me demande bien comment faire.

Dans l’idée, ma fonction doit pouvoir :

1) réaliser un calcul

2) mettre en forme la cellule en fonction si possible du résultat (ex : fonction Zscore) ou si ce n’est pas possible en fonction d’une autre variable d’entrée (ex : fonction Biaisabsolu).

L’utilisation de l’outil mise en forme conditionnelle ne me parait pas opportune dans le cas présent, car cette fonction doit pouvoir être utilisée à des endroits variés du classeur au désir de l’opérateur. Ainsi il semble compliqué de gérer les priorités de mises en forme conditionnelles.

Voici les codes que j’ai essayés mais qui ne fonctionne pas : j’ai comme résultat « Valeur ! ». J’espère que mes explications sont claires. Si vous avez des tuyaux pour réussir à achever ce chantier…

Merci d’avance,


Function Biaisabsolu(x As Double, MoyenneRobuste As Double, limitebasse As Double, limitehaute As Double)

'Calcul du biais absolu et mise en forme de la cellule en fonction des limites

Application.Volatile

If x > 0 Then 'Vérification que la case n'est pas vide

If x > limitebasse Then

If x < limitehaute Then

Biaisabsolu.Interior.Color = RGB(0, 255, 0) 'Résultat acceptable : couleur blanche

Else: Biaisabsolu.Interior.Color = RGB(255, 0, 0) 'Résultat non satisfaisant: couleur rouge

End If

Else: Biaisabsolu.Interior.Color = RGB(255, 0, 0) 'Résultat non satisfaisant: couleur rouge

End If

'Quelle que soit la valeur, calcul du biais absolu

Biaisabsolu = x - MoyenneRobuste

Else: Biaisabsolu = ""

End If

End Function


Function Zscore(x As Double, xetoile As Double, setoile As Double)

'Calcul du zscore et mise en forme de la cellule en fonction du résultat

Application.Volatile

Dim z

If x > 0 Then 'Vérification que la case n'est pas vide

‘Calcul du z-score

z = (x – xetoile) / setoile

‘Mise en forme en fonction du résultat

If z > 2 Then

If z<=3 Then

Zscore.Interior.Color = RGB(255, 127, 0) 'Résultat discutable : couleur orange

Else: Zscore.Interior.Color = RGB(255, 0, 0) 'Résultat non satisfaisant: couleur rouge

End If

ElseIf z<(-2) Then

If z>=(-3) Then

Zscore.Interior.Color = RGB(255, 127, 0) 'Résultat discutable : couleur orange

Else: Zscore.Interior.Color = RGB(255, 0, 0) 'Résultat non satisfaisant: couleur rouge

End If

Else: Zscore.Interior.Color = RGB(255, 255, 255) 'Résultat satisfaisant: couleur blanche

End If

‘Quelle que soit la valeur, renvoi du z-score

Zscore=z

Else : Zscore= ""

End If

End Function

Bonjour,

Tu peux arrêter de chercher, une fonction retourne une valeur, c'est tout.

Extrait de l'aide excel :

Une fonction définie par l'utilisateur appelée par une formule dans une cellule de feuille de calcul ne peut pas modifier l'environnement de Microsoft Excel.

Dans certaines conditions on peut changer la couleur de la police. Mais je n'arrive plus à le refaire et c'est plus l'exploitation d'un bug, un bidouillage quoi.

eric

Bonsoir,

malheureusement si tu veux écrire une fonction personnalisée utilisable à partir d'excel, tu ne peux pas modifier d'autres cellules, ni modifier la cellule dans laquelle se trouve la formule, la seule chose que tu puisses faire c'est retourner une valeur ou un ensemble de valeurs dans le cas d'une fonction matricielle.

pour les couleurs, tu devras utiliser les MFCs, pour les formats, il y a quelques possibilités via les formats personalisés.

Donc ce que tu essaies de faire (ou du moins ce que j'ai compris de ce que tu essayais de faire) n'est pas possible. Il a sans doute des solutions possibles via des macros événementielles.

edit : bonsoir Eriiic

Merci beaucoup pour vos réponses. Hélas, elles confirment bien ce que je pensais!

Je suis donc revenue aux mises en forme conditionnelles "classiques".

Rechercher des sujets similaires à "calcul mise forme seule fonction"