Modifier la mise en forme via une fonction
River
-
River -
River -
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:
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
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
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:
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
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
A voir également:
- Modifier la mise en forme via une fonction
- Mise en forme conditionnelle excel - Guide
- Mise en forme tableau word - Guide
- Modifier dns - Guide
- Fonction si et - Guide
- Modifier liste déroulante excel - Guide