Modifier la mise en forme via une fonction

Fermé
River - 12 janv. 2016 à 15:40
 River - 13 janv. 2016 à 17:31
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
A voir également:

2 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
12 janv. 2016 à 21:25
Bonjour

Une fonction est un outil qu renvoie une valeur
Pour modifier l'environnement il te faut utiliser une procedure

Public Sub hachure()
....
End Sub

Cdlmnt
0
Ok j'ai réussi à faire ce que je voulais avec la procédure Worksheet_Change

Merci
0