Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA : activation Function sur changement de couleur

20 réponses
Avatar
Quetzalcoatl
Bonsoir,

J'ai créé une fonction VBA qui dénombre, dans une plage donnée, les cellules d'une certaine couleur.
J'utilise cette fonction personnalisée dans une feuille EXCEL (97).
Problème : la fonction ne s'exécute pas si je change la couleur d'une cellule dans la plage, donc le résultat n'est pas mis à jour.
Comment faire pour que le résultat soit mis à jour ?
Plus généralement, dans quelles conditions une fonction est-elle recalculée ?
Merci !

10 réponses

1 2
Avatar
Quetzalcoatl
"Quetzalcoatl" <plusdepourriel> a écrit dans le message de news: 474b40a2$0$5071$
J'ai créé une fonction VBA qui dénombre, dans une plage donnée, les cellules d'une certaine couleur.
J'utilise cette fonction personnalisée dans une feuille EXCEL (97).
Problème : la fonction ne s'exécute pas si je change la couleur d'une cellule dans la plage, donc le résultat n'est pas mis à
jour.


Re-bonsoir,

- En rajoutant dans ma fonction :
Application.Volatile
je peux obtenir que ma fonction soit recalculée chaque fois qu'un calcul est effectué dans une cellule quelconque de ma feuille de
calcul.

- En gérant un évènement de feuille, je peux obtenir le recalcul sur changement de sélection :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Calculate
End Sub

Je progresse vers le résultat, mais il reste un cas où la fonction n'est pas recalculée :
je sélectionne quelques cellules de la plage donnée et je change leur couleur, sans plus toucher à rien (ou bien en enregistrant et
en fermant le classeur dans la foulée) : dans ce cas, à aucun moment je ne vois le bon résultat.
Une idée pour intercepter l'évènement "changement de couleur de fond" ?

Avatar
Philippe.R
Bon{j,s}o{u,i}r,
Pour qu'une fonction soit recalculée, il faut qu'elle soit déclarée comme
"volatile" ( la nommer Misange ne suffit pas.... ;o))) et qu'un évènement
provoque ce recalcul, ce qui n'est pas le cas (si ma mémoire est bonne) d'un
changement de couleur.

De quoi inspirer au bout de ce lien, à titre d'exemple
http://www.excelabo.net/excel/formatsdiv.php#recalculgras

AMHA, il est de loin plus avantageux de mettre en place une Mise en forme
conditionnelle et de compter les cellules qui répondent à la condition ; on
a alors sans problème et le visuel et le décompte.
--
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
Avec plaisir
http://dj.joss.free.fr/trombine.htm
Philippe.R
"Quetzalcoatl" <plusdepourriel> a écrit dans le message de
news:474b40a2$0$5071$
Bonsoir,

J'ai créé une fonction VBA qui dénombre, dans une plage donnée, les
cellules d'une certaine couleur.
J'utilise cette fonction personnalisée dans une feuille EXCEL (97).
Problème : la fonction ne s'exécute pas si je change la couleur d'une
cellule dans la plage, donc le résultat n'est pas mis à jour.
Comment faire pour que le résultat soit mis à jour ?
Plus généralement, dans quelles conditions une fonction est-elle
recalculée ?
Merci !





Avatar
JB
Bonjour,

Ajouter dans la feuille:

Dim celluleAvant
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not IsEmpty(celluleAvant) Then
If Not Intersect(Range(celluleAvant), [champFormules]) Is Nothing
Then Calculate
End If
celluleAvant = Target.Address
End Sub

http://boisgontierjacques.free.fr/pages_site/fonctioncouleurfond.htm

JB
http://boisgontierjacques.free.fr



On 26 nov, 22:54, "Quetzalcoatl" <plusdepourriel> wrote:
Bonsoir,

J'ai créé une fonction VBA qui dénombre, dans une plage donnée, le s cellules d'une certaine couleur.
J'utilise cette fonction personnalisée dans une feuille EXCEL (97).
Problème : la fonction ne s'exécute pas si je change la couleur d'une cellule dans la plage, donc le résultat n'est pas mis à jour.
Comment faire pour que le résultat soit mis à jour ?
Plus généralement, dans quelles conditions une fonction est-elle recal culée ?
Merci !


Avatar
Misange
Bon{j,s}o{u,i}r,
Pour qu'une fonction soit recalculée, il faut qu'elle soit déclarée
comme "volatile" ( la nommer Misange ne suffit pas.... ;o)))


Et si j'étais un ange à deux ailes ça le ferait tu crois ?
Misange

Avatar
Misange
Bonjour

Une idée pour intercepter l'évènement "changement de couleur de fond" ?
Ce n'est pas un événement :-(

On peut le regretter. Excel a prévu de faire l'inverse : affecter une
couleur en fonction d'une condition (mise en forme conditionnelle).
Pourtant il y a bien des gens (dont moi) qui aiment réfléchir en mettant
des couleurs.
Donc tu es obligé de bidouiller et en pratique de lancer ta macro à la main.
Misange

Avatar
JB
Bonjour Misange,

http://cjoint.com/?lBjUlr3GKV

JB

On 27 nov, 08:31, Misange wrote:
Bonjour

Une idée pour intercepter l'évènement "changement de couleur de fo nd" ?


Ce n'est pas un événement :-(
On peut le regretter. Excel a prévu de faire l'inverse : affecter une
couleur en fonction d'une condition (mise en forme conditionnelle).
Pourtant il y a bien des gens (dont moi) qui aiment réfléchir en metta nt
des couleurs.
Donc tu es obligé de bidouiller et en pratique de lancer ta macro à la main.
Misange



Avatar
Misange
Bonjour Jacques

Tu ne peux pas intercepter directement un événement changement de format
puisque ça n'existe pas. Ce que tu interceptes dans ton exemple c'est le
changement de sélection. C'est un bidouillage très utile et efficace
mais si tu restes dans la même cellule et changes la couleur, rien ne se
produit.
Misange

Bonjour Misange,

http://cjoint.com/?lBjUlr3GKV

JB

On 27 nov, 08:31, Misange wrote:
Bonjour

Une idée pour intercepter l'évènement "changement de couleur de fond" ?
Ce n'est pas un événement :-(

On peut le regretter. Excel a prévu de faire l'inverse : affecter une
couleur en fonction d'une condition (mise en forme conditionnelle).
Pourtant il y a bien des gens (dont moi) qui aiment réfléchir en mettant
des couleurs.
Donc tu es obligé de bidouiller et en pratique de lancer ta macro à la main.
Misange






Avatar
JB
C'est + pratique que de lancer une macro.
Il y le pinceau pour avoir une maj immédiate.

JB
On 27 nov, 09:59, Misange wrote:
Bonjour Jacques

Tu ne peux pas intercepter directement un événement changement de form at
puisque ça n'existe pas. Ce que tu interceptes dans ton exemple c'est le
changement de sélection. C'est un bidouillage très utile et efficace
mais si tu restes dans la même cellule et changes la couleur, rien ne se
produit.
Misange




Bonjour Misange,

http://cjoint.com/?lBjUlr3GKV

JB

On 27 nov, 08:31, Misange wrote:
Bonjour

Une idée pour intercepter l'évènement "changement de couleur de fond" ?
Ce n'est pas un événement :-(

On peut le regretter. Excel a prévu de faire l'inverse : affecter une
couleur en fonction d'une condition (mise en forme conditionnelle).
Pourtant il y a bien des gens (dont moi) qui aiment réfléchir en me ttant
des couleurs.
Donc tu es obligé de bidouiller et en pratique de lancer ta macro à la main.
Misange- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -





Avatar
lSteph
Bonjour,
juste pour dire que c'est une très mauvaise idée, même si l'objectif
serait plaisant car, je le dis à chaque fois que je vois quelqu'un qui
veut calculer avec des couleurs, et même si j'ai bien vu que Misange
veille au grain et il est évident que mon approbation n'est à cet
égard pas nécessaire mais désolé, je ne peux résister à l'expri mer.
Outre l'aspect ludique et didactique que procure la mise au point de
ce type de programme, si tant est qu'il fût possible de tout prévoir,
il y aurait trop de lourdeur à vouloir gérer tous les évènements ou
palliant au fait qu'une modification de format n'en est pas un
provoqueraient un recalcul de fonctions volatile.Exemple un Ontime
permanent qui lancerait du calculate à intervalle régulier. Ce serait
calamiteux pour pouvoir travailler. Sans compter ensuite les actions
dont on pressentirait le besoin de vérifier pour le bon
fonctionnement, la modification de formats indirectes sur des
fichiers liés ou peut-être fermés qu'il semblerait encore moins
évident de pouvoir mener à bien.

Cordialement.

--
lSteph

On 27 nov, 08:31, Misange wrote:
Bonjour

Une idée pour intercepter l'évènement "changement de couleur de fo nd" ?


Ce n'est pas un événement :-(
On peut le regretter. Excel a prévu de faire l'inverse : affecter une
couleur en fonction d'une condition (mise en forme conditionnelle).
Pourtant il y a bien des gens (dont moi) qui aiment réfléchir en metta nt
des couleurs.
Donc tu es obligé de bidouiller et en pratique de lancer ta macro à la main.
Misange



Avatar
Quetzalcoatl
Bonjour,

De quoi inspirer au bout de ce lien, à titre d'exemple
http://www.excelabo.net/excel/formatsdiv.php#recalculgras


Bouduuuu !

AMHA, il est de loin plus avantageux de mettre en place une Mise en forme conditionnelle et de compter les cellules qui répondent
à la condition ; on a alors sans problème et le visuel et le décompte.


J'y avais pensé, mais on ne peut pas tout mettre en équation :-)

Merci !

1 2