XL 2019 Macro d'activation de mise en forme conditionnelle "glissante"

Flomax

XLDnaute Nouveau
Bonjour,

J'ai développé un fichier pour gérer les compétences et polyvalences qui plait bien et qui est visuel, mais malheureusement la mise en forme conditionnelle ralenti énormément sa mise à jour.

N'étant pas expert en macro (je sais juste changer des paramètres dedans, ou une ou deux bidouilles) :

- sauriez-vous faire une macro de mise en forme conditionnelle qui reprend celle créée manuellement ci-dessous ? :

ET((SI(NB.SI('BDD Fiches de formation'!$E:$E;CONCAT(F$1;$A6))>0;1;0)+SI(NB.SI('BDD Fiches de formation'!$E:$E;CONCAT(F$2;$A6))>0;1;0)+SI(NB.SI('BDD Fiches de formation'!$E:$E;CONCAT(F$3;$A6))>0;1;0)+SI(NB.SI('BDD Fiches de formation'!$E:$E;CONCAT(F$4;$A6))>0;1;0))<NBVAL(#REF!);F6<>"")

Cette mise en forme est appliquée de la case F6 à I9, créée sur la case F6 puis étendue sur les autres, donc la colonne analysée pour la MFC évolue selon la colonne de la case concernée.

J'ai cherché sur internet mais je n'ai pas trouvé d'exemple que je pourrais reporter sur mon cas.

J'ai mis en pièce jointe une version "générique" du fichier d'origine. L'originale contient beaucoup plus de colonnes et de lignes (de L5 à PV79 actuellement), qui fait qu'après une saisie de case on attend 10 à 20s pour que le calcule se fasse, ce qui n'est pas le cas dans cette version.

Au plaisir de vous entendre,

Flomax
 

Pièces jointes

  • 20221121-mdp-pour-macro-mise-en-forme-conditionnelle.xlsm
    60.4 KB · Affichages: 11
Solution
Bonjour,

Avec un peu de délai, je reviens sur le sujet ! La mise en forme de Gégé était pas mal mais ça ne me surlignait pas les bonnes cases. Comme j'avais d'autres sujets plus prioritaires sur le sujet, je ne m'étais pas penché dessus, jusqu'à hier ! Du coup j'ai trouvé le problème, qui était sur la formule principale. Voici donc la version qui fonctionne impeccablement :
VB:
Sub Coloriage()
Dim objCollabos As Object, Col1 As Range, ChampCible As Range, NbLignes As Long, NbColonnes As Long, i%, j%, wkCollabos As Worksheet, wkProd As Worksheet, Combo1$, Combo2$, Combo3$, Combo4$
    Set wkCollabos = ThisWorkbook.Worksheets("BDD Fiches de Formation")
    Set objCollabos = wkCollabos.ListObjects("_Collaborateurs")
    Set wkProd =...

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Cette mise en forme est appliquée de la case F6 à I9, créée sur la case F6 puis étendue sur les autres, donc la colonne analysée pour la MFC évolue selon la colonne de la case concernée.
C'est-à-dire ???
Comment étends-tu cette MFC ?

As-tu vérifié le nombre de MFC de ta feuille ?

Ne peux-tu réduire la plage $E:$E (car ça, ça ralenti énormément les MFC) ???

Utilises-tu un tableau structuré ?
Ça permet de réduire la plage d'action des MFC au strict nécessaire. 😉
 
Dernière édition:

Flomax

XLDnaute Nouveau
Je la crée sur la première case, et après j'applique la mise en forme à l'ensemble des cases concernées avec le "carré noir" en bas à droite de la case. Ce qui veut dire que la mise en forme conditionnelle :

- Pour F6 : regarde le nombre de cases non vides parmi F1, F2, F3 et F4, et regarde si le document attaché à la case F1, F2, F3 et F4, associé au nom de la personne dans la case A6, apparait dans la colonne E de la base de données de la fiche de formation
- Pour F7 : F1, F2, F3 et F4 en fonction de A7
- Pour F8, F9, etc : F1, F2, F3 et F4 en fonction de respectivement A8, A9, etc
- Pour G6 : G1, G2, G3 et G4 en fonction de A6
- Pour G7 : G1, G2, G3 et G4 en fonction de A7
- Pour H9 : H1, H2, H3 et H4 en fonction de H9

Et ainsi de suite
 

Flomax

XLDnaute Nouveau
Bonjour,


C'est-à-dire ???
Comment étends-tu cette MFC ?

As-tu vérifié le nombre de MFC de ta feuille ?

Ne peux-tu réduire la plage $E:$E (car ça, ça ralenti énormément les MFC) ???

Utilises-tu un tableau structuré ?
Ça permet de réduire la plage d'action des MFC au strict nécessaire. 😉
J'ai testé en limitant la plage E:E au données réelles, soit 2531 lignes, et ça ne change pas grand chose.

Ci-dessous les mises en forme que j'ai (j'ai depuis rajouté 9 colonnes)

1669895414136.png

Le tableau est bien structuré à première vue, j'ai justement essayé d'optimiser la chose
 

TooFatBoy

XLDnaute Barbatruc
La MFC de ton fichier de #1 n'est pas bonne : elle colore des cellules qu'elle ne devrait pas colorer.

Essaye ceci :
Code:
=(F6<>"")*(NB.SI(INDIRECT("_Collaborateurs[Colonne1]");F$1&$A6)+NB.SI(INDIRECT("_Collaborateurs[Colonne1]");F$2&$A6)+NB.SI(INDIRECT("_Collaborateurs[Colonne1]");F$3&$A6)+NB.SI(INDIRECT("_Collaborateurs[Colonne1]");F$4&$A6))
 
Dernière édition:

Flomax

XLDnaute Nouveau
La MFC de ton fichier de #1 n'est pas bonne : elle colore des cellules qu'elle ne devrait pas colorer.

Essaye ceci :
Code:
=(F6<>"")*( NB.SI(INDIRECT("_Collaborateurs[Colonne1]");F$1&$A6) + NB.SI(INDIRECT("_Collaborateurs[Colonne1]");F$2&$A6) + NB.SI(INDIRECT("_Collaborateurs[Colonne1]");F$3&$A6) + NB.SI(INDIRECT("_Collaborateurs[Colonne1]");F$4&$A6))
Merci TooFatBoy. En effet, en faisait la version light de mon fichier de base, en créant des lignes factices, la formule n'est pas bonne. Dans l'original par contre tout est bon
 

Gégé-45550

XLDnaute Accro
Salut camarade Gégé ;)

Je crois qu'une macro travaille beaucoup moins vite qu'une MFC. Donc, perso, je préfère les MFC.
Mais peut-être me trompé-je... 🤔
Certes, mais la macro ne prendrait du temps qu'au chargement de la page, ensuite les mises à jour sur l'événement Change seraient instantanées (puisqu'elles ne seraient appliquées que sur les cellules modifiées), non ? ... sauf si les événements déclencheurs ont lieu dans la feuille 'BDD Fiches de formation' et non dans la feuille 'MdP', ce que nous ignorons.
 
Dernière édition: