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

Excel 2003 : Formule matricielle avec fonction(colorindex) pour trier en fonction de la couleur des cellules

8 réponses
Avatar
La Norme Française c'est pas le FN
Bonjour,


Ci dessous un exemple simple de 2 feuilles.

Sur la première se trouve les données dans les colonnes A, B, C. Ces
données peuvent être saisies manuellement ou par une lectur d'un autre
fichier.
A la fin de chaque valeur, il y a entre parenthèse la couleur de la
cellule (Jaune), (Vert), (Rouge). Dans la pratique, il y en à d'autres
(c'est pour l'exemple) Les couleurs se font par MFC mais peuvent être
surchargé par un simple bouton macro qui modifie l'interior.colorindex

La 2e c'est le résultat voulu.
J'ai essayé de faire plusieurs formules matricielle dans chaque
colonne (avec tirage vers le bas) avec une fonction contenant un
paramètre IndexColor et qui me retourne un vrai (boolean) si la
couleur correspond (interior.colorindex), mais ça veut pas surtout que
ça déclenche pas le breackpoint du debugger. Je sais pas si la
matricielle donne un range genre A1:C4 ou le range de la cellule
qu'elle traite parmi toutes les cellules.

Je n'ai pas besoin que les colonnes de la feuille2 soient en couleur,
je la fais manuellement.



Si vous avez un exemple qui fonctionne de formule matricielle
contenant une macro car je désespère et ne trouve pas grand chose sur
google.


Merci de vos lumières


Feuille1
A B C
22(J) OUI(R) LOIC(V)
34(J) NON(V) RENE(J)
3(R) NON(V) LOIC(V)
49(V) OUI(R) BERTRAND(R)


Fauille2
Vert Jaune Rouge
49 22 3
NON 34 OUI
NON RENE OUI
LOIC BERTRAND
LOIC




















--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme

8 réponses

Avatar
LSteph
Bonjour,
Lorsque l'on fait appel à une mise en forme conditionnelle
c'est elle qui laisse apparai^tre une couleur.
La cellule elle reste sans couleur, (pas d'indexcolor)
sauf celle qu'on lui aurait attribué par ailleurs.
Le plus simple serait de laisser un champ disons une colonne contenant le r ésultat de la condition de cette MEFC
Il n'y aura plus qu'à trier par cette colonne...
Cordialement.
--
LSteph
Avatar
La Norme Française c'est pas le FN
On Thu, 28 Jul 2016 13:13:56 -0700 (PDT), LSteph
wrote:
Bonjour,
Lorsque l'on fait appel à une mise en forme conditionnelle
c'est elle qui laisse apparai^tre une couleur.
La cellule elle reste sans couleur, (pas d'indexcolor)

Ok, bon à savoir.
sauf celle qu'on lui aurait attribué par ailleurs.

Et dans le cas où il n'y a pas de MFC, c'est possible avec une formule
matricielle avec appel à une macro ?
Le plus simple serait de laisser un champ disons une colonne contenant le résultat de la condition de cette MEFC
Il n'y aura plus qu'à trier par cette colonne...

J'y ai pensé, mais ça passe par une étape supplémentaire.
De plus, j'aime bien comprendre.
Cordialement.

Cordialement.
--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme
Avatar
LSteph
Bonjour,
Voici un lien utile si tu veux détecter les couleurs de MEFC http://ww w.cpearson.com/excel/cfcolors.htm
Par macro oui, on peut pratiquement tout faire mais autant profiter des cas où l'on puisse s'en passer très simplement.
L'avantage de la colonne avec la condition, c'est qu'elle pourra servir à   deux objectifs:
1-gérer la MEFC
2-Effectuer les tris que tu souhaites.
L'inconvénient supplémentaire de la macro dans la gestion via cou leur,
c'est que cela mobilise perpétuellement la détection d'un év ennement pour une simple raison c'est que
si tu modifie une couleur cela ne provoque pas de recalcul,
le tri sera donc faux , sauf à faire appel à un autre évenne ment qui provoque le recalcul et l'exécution de la macro qui re-trie.
Sur cette page tu trouveras un exemple pour intercepter une modification de couleur:
http://silkyroad.developpez.com/VBA/EvenementsFeuille/
Voir la dernière macro du § II.1
Cordialement.
--
LSteph
Le jeudi 28 juillet 2016 23:05:34 UTC+2, La Norme Française c'est pas le FN a écrit :
On Thu, 28 Jul 2016 13:13:56 -0700 (PDT), LSteph
wrote:
Bonjour,
Lorsque l'on fait appel à une mise en forme conditionnelle
c'est elle qui laisse apparai^tre une couleur.
La cellule elle reste sans couleur, (pas d'indexcolor)

Ok, bon à savoir.
sauf celle qu'on lui aurait attribué par ailleurs.

Et dans le cas où il n'y a pas de MFC, c'est possible avec une formu le
matricielle avec appel à une macro ?
Le plus simple serait de laisser un champ disons une colonne contenant l e résultat de la condition de cette MEFC
Il n'y aura plus qu'à trier par cette colonne...

J'y ai pensé, mais ça passe par une étape supplémenta ire.
De plus, j'aime bien comprendre.
Cordialement.

Cordialement.
--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expr ession la plus autoritaire du conformisme
Avatar
La Norme Française c'est pas le FN
On Thu, 28 Jul 2016 23:21:03 -0700 (PDT), LSteph
wrote:
Bonjour,
Voici un lien utile si tu veux détecter les couleurs de MEFC http://www.cpearson.com/excel/cfcolors.htm

Merci, j'ai jeté un oeuil. Je vais approfondir lundi.
Par macro oui, on peut pratiquement tout faire mais autant profiter des cas où l'on puisse s'en passer très simplement.
L'avantage de la colonne avec la condition, c'est qu'elle pourra servir à deux objectifs:
1-gérer la MEFC
2-Effectuer les tris que tu souhaites.

Ca veut aussi dire que je dois doubler chaque colonne. La valeur et la
condition.
L'inconvénient supplémentaire de la macro dans la gestion via couleur,
c'est que cela mobilise perpétuellement la détection d'un évennement pour une simple raison c'est que
si tu modifie une couleur cela ne provoque pas de recalcul,

Je ne cherche pas un recalcul systématique par macro de la feuille1.
Changer les couleurs ne pose pas de problème car le résultat est de
toute façon sur une autre feuille2. Et en changeant de feuille, je
peux automatiser le refresh.
Et pour la MFC, si la couleur change, c'est parce que la valeur de la
cellule change, n'y a t il pas déclenchement d'un évennement au moment
du changement de la valeur
(J'ai pas excel chez moi, je peux que tester au boulot)
le tri sera donc faux , sauf à faire appel à un autre évennement qui provoque le recalcul et l'exécution de la macro qui re-trie.
Sur cette page tu trouveras un exemple pour intercepter une modification de couleur:
http://silkyroad.developpez.com/VBA/EvenementsFeuille/
Voir la dernière macro du § II.1

Merci, mais mon gros problème reste la façon de mettre une macro()
dans une formule matricielle (si c'est faisable). Dois-je y mettre la
référence à la plage ?
macro(plage as range; colorindex as integer) as boolean
Ma macro(colorindex) avec un activecell fonctionne très bien sur une
formule simple dans une cellule
Cordialement.

--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme
Avatar
LSteph
Le vendredi 29 juillet 2016 11:19:51 UTC+2, La Norme Française c'est p as le FN a écrit :
Ceci c'est pour les couleurs mises manuellement:
Je ne cherche pas un recalcul systématique par macro de la feuille1.

Si justement c'est le problème dans ce cas le changement de couleur ne provoque pas de recalcul
donc
... Et en changeant de feuille, je
peux automatiser le refresh.

Oui c'est une solution.
Et pour ceci:
Et pour la MFC, si la couleur change, c'est parce que la valeur de la
cellule change, n'y a t il pas déclenchement d'un évennement au moment
du changement de la valeur

C'est précisément ce que je suggérais par l'idée de col onne, mais si tu as déjà une condition et que cette MEFC est gà ©rée par formule, il faut utiliserr la même condition dans ta m acro plutôt que les couleurs, c'est ce que j'essaye de mettre en avant .
Ensuite:
Merci, mais mon gros problème reste la façon de mettre une macro ()

dans une formule matricielle (
Ou je ne comprends pas bien ou tu veux parler d'une "Function" fonction et non d'une "Sub" macro.
Et pourquoi diable une matricielle... on peut boucler sur une plage!
Le plus simple serait que tu mettes un classeur exemple sur cjoint.com et d onne le lien par ici. (L'exemple que tu avais esquissé se présent e tout de travers on n'y situe plus où vont les cellules ni ce qui s'y passe)
ESsaye de mettre la situation de départ et ce que tu veux obtenir.
Cordialement.
--
LSteph
Avatar
La Norme Française c'est pas le FN
On Sun, 31 Jul 2016 00:12:30 -0700 (PDT), LSteph
wrote:
Le vendredi 29 juillet 2016 11:19:51 UTC+2, La Norme Française c'est pas le FN a écrit :
Ensuite:
Merci, mais mon gros problème reste la façon de mettre une macro()

dans une formule matricielle (
Ou je ne comprends pas bien ou tu veux parler d'une "Function" fonction et non d'une "Sub" macro.

Pardon, je parle de fonction(paramètre)
Formule, sub, fonction, macro, module, class,... je me mélange les
pinceaux.
Et pourquoi diable une matricielle... on peut boucler sur une plage!

La plage n'est pas figée car le nombre de ligne va augmenter et c'est
plus simple de tirer la ligne vers le bas qui va ajuster les formules
(matricielle? ) par incrementation que de demander à l'utilisateur de
bricoler le nom de la plage, ou le code VBA.
Le VBA me sert juste à vérifier si la couleur est la bonne avec un
refresh à chaque changement de valeur, et changement de feuille et
pourquoi pas un timer (mais c'est pas le sujet du jour) ;o)
Le plus simple serait que tu mettes un classeur exemple sur cjoint.com et donne le lien par ici. (L'exemple que tu avais esquissé se présente tout de travers on n'y situe plus où vont les cellules ni ce qui s'y passe)
ESsaye de mettre la situation de départ et ce que tu veux obtenir.

C'est normal que se soit pas aligné, faut afficher en police fixe
http://www.cjoint.com/c/FHbsHFkBCW8 (un exemple simpliste avec Excel
2003)
Cordialement.

--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme
Avatar
Jacquouille
Bonsoir
Sans trop vouloir m'immiscer ni vous contredire...
VBA est très strict au niveau orthographique, mais très souple
d'utilisation.
Ainsi donc, la plage A1:A100 restera toujours telle quelle.
mais si vous la nommez ou, mieux, introduire la notion de dernière cellule
de la colonne, Excel recalculera à chaque fois cette variable.
Ainsi:
derL= Cells(Rows.Count, 1).End(xlUp).Row
range("A1:A"&derl) devrait être bon à chaque fois.
J'utilise le conditionnel car on m'annonce que Murphy et sa Loi règnent
toujours en ces lieux.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"La Norme Française c'est pas le FN" a écrit dans le message de groupe de
discussion :
On Sun, 31 Jul 2016 00:12:30 -0700 (PDT), LSteph
wrote:
Le vendredi 29 juillet 2016 11:19:51 UTC+2, La Norme Française c'est pas le
FN a écrit :
Ensuite:
Merci, mais mon gros problème reste la façon de mettre une macro()

dans une formule matricielle (
Ou je ne comprends pas bien ou tu veux parler d'une "Function" fonction et
non d'une "Sub" macro.

Pardon, je parle de fonction(paramètre)
Formule, sub, fonction, macro, module, class,... je me mélange les
pinceaux.
Et pourquoi diable une matricielle... on peut boucler sur une plage!

La plage n'est pas figée car le nombre de ligne va augmenter et c'est
plus simple de tirer la ligne vers le bas qui va ajuster les formules
(matricielle? ) par incrementation que de demander à l'utilisateur de
bricoler le nom de la plage, ou le code VBA.
Le VBA me sert juste à vérifier si la couleur est la bonne avec un
refresh à chaque changement de valeur, et changement de feuille et
pourquoi pas un timer (mais c'est pas le sujet du jour) ;o)
Le plus simple serait que tu mettes un classeur exemple sur cjoint.com et
donne le lien par ici. (L'exemple que tu avais esquissé se présente tout de
travers on n'y situe plus où vont les cellules ni ce qui s'y passe)
ESsaye de mettre la situation de départ et ce que tu veux obtenir.

C'est normal que se soit pas aligné, faut afficher en police fixe
http://www.cjoint.com/c/FHbsHFkBCW8 (un exemple simpliste avec Excel
2003)
Cordialement.

--
« le politiquement correct ne proclame pas la tolérance ; il ne fait
qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la
plus autoritaire du conformisme
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
La Norme Française c'est pas le FN
On Mon, 1 Aug 2016 21:31:41 +0200, "Jacquouille"
wrote:
Bonsoir
Sans trop vouloir m'immiscer ni vous contredire...
VBA est très strict au niveau orthographique, mais très souple
d'utilisation.
Ainsi donc, la plage A1:A100 restera toujours telle quelle.
mais si vous la nommez ou, mieux, introduire la notion de dernière cellule
de la colonne, Excel recalculera à chaque fois cette variable.
Ainsi:
derL= Cells(Rows.Count, 1).End(xlUp).Row
range("A1:A"&derl) devrait être bon à chaque fois.
J'utilise le conditionnel car on m'annonce que Murphy et sa Loi règnent
toujours en ces lieux.

C'est une idée même si ça répond pas à la question de savoir comment
mettre une fonction dans une matricielle.
Je vais voir.
Merci
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"La Norme Française c'est pas le FN" a écrit dans le message de groupe de
discussion :
On Sun, 31 Jul 2016 00:12:30 -0700 (PDT), LSteph
wrote:
Le vendredi 29 juillet 2016 11:19:51 UTC+2, La Norme Française c'est pas le
FN a écrit :

Ensuite:
Merci, mais mon gros problème reste la façon de mettre une macro()

dans une formule matricielle (
Ou je ne comprends pas bien ou tu veux parler d'une "Function" fonction et
non d'une "Sub" macro.

Pardon, je parle de fonction(paramètre)
Formule, sub, fonction, macro, module, class,... je me mélange les
pinceaux.
Et pourquoi diable une matricielle... on peut boucler sur une plage!

La plage n'est pas figée car le nombre de ligne va augmenter et c'est
plus simple de tirer la ligne vers le bas qui va ajuster les formules
(matricielle? ) par incrementation que de demander à l'utilisateur de
bricoler le nom de la plage, ou le code VBA.
Le VBA me sert juste à vérifier si la couleur est la bonne avec un
refresh à chaque changement de valeur, et changement de feuille et
pourquoi pas un timer (mais c'est pas le sujet du jour) ;o)
Le plus simple serait que tu mettes un classeur exemple sur cjoint.com et
donne le lien par ici. (L'exemple que tu avais esquissé se présente tout de
travers on n'y situe plus où vont les cellules ni ce qui s'y passe)
ESsaye de mettre la situation de départ et ce que tu veux obtenir.

C'est normal que se soit pas aligné, faut afficher en police fixe
http://www.cjoint.com/c/FHbsHFkBCW8 (un exemple simpliste avec Excel
2003)
Cordialement.


--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme