Bonjour,

je commence mon apprentissage en VBA et je me heurte à un problème depuis quelques jours.

Je souhaite changer dynamiquement la mise en forme d'une cellule selon le contenu d'une autre.

J'ai commencé une macro qui inscrit une formule dans la cellule (my_lign + 21, my_coll).
Cette formule vérifie le contenu de la cellule (my_lign + 4, my_coll), si ce contenu est égal à une valeur elle lance la fonction hachure() qui hachure la cellule (my_lign + 21, my_coll), sinon elle lance la fonction nettoie() qui vide cette même cellule.

Soit la ligne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Cells(my_lign + 21, my_coll).Formula = "=SI(" & Cells(my_lign + 4, my_coll).Address(RowAbsolute:=False, ColumnAbsolute:=False) & "=""SMS"",hachure(),nettoie())"
J'accède effectivement bien à mes fonctions, et si je change plusieurs fois le contenu de la cellule my_lign+4, les fonctions hachure() et nettoie() sont bien lancés plusieurs fois car les msgbox apparaissent bien. Le problème c'est qu'à l'intérieur de mes fonctions je ne peux quasi rien faire, je peux juste lancer une MsgBox et changer la valeur de ma cellule en faisant par exemple nettoie="tralala". Impossible de faire par exemple Cells(34,53) = 45 ou encore hachure.Interior.Pattern = xlUp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Public Function hachure()
hachure = "" ' vide bien la case
MsgBox "hachure" ' affiche bien une box avec le message
hachure.Interior.Pattern = xlUp 'ne fait rien
MsgBox "fin" ' n'apparait même pas
End Function