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".