Coloriser lignes selon 2 critères, via segment (en tableau structuré)

Bonjour,

J'ouvre ce sujet, je préviens quand même qu'il fait suite à celui-ci où Optimix m'a bien dépanné à l'époque.

À la base, cette macro permet de coloriser les lignes d'un tableau, elle colorise en alternant 2 couleurs (gris et blanc) en fonction de 2 critères : PARCELLES et DATE D'INTERVENTION.

Si c'est la même parcelle + même date = couleur grise. Dès que ça change = couleur blanche. Et ainsi de suite.

Le problème est que dès lors que j'applique un filtre sur une parcelle, avec un segment, les couleurs ne sont plus dans le bon ordre. Car la macro ne tient pas compte du tableau structuré je pense.

Dans l'idéal, ce serait que cette macro se déclenche dès que j'applique un filtre, via le segment. Et se re-colorise après réinitialisation du filtre.

Est-ce que quelqu'un peut m'aider avec ça s'il vous plaît ?

Un petit fichier pour mieux comprendre :

Merci par avance de toute aide apportée :)

Cordialement.

Bonjour François,

Si j'ai bien compris, voici le fichier avec el code modifié qui tiens compte du TS et du filtre

J'ai fait 2 sub en fonction du filtre si appliqué ou non

A+

Bonjour Bruno,

Merci beaucoup ! C'est exactement ce que je voulais

Le mieux était que cette macro (=ChoixCouleur) se déclenche automatiquement à chaque fois qu'un filtre s'applique.

J'ai finalement trouvé ce post

Et là je me dis : Mais... Je vais devoir copier/coller ce code dans chacune de mes feuilles ?

Private Sub Worksheet_Calculate()
    Application.EnableEvents = False
    ' ici ma macro
    Application.EnableEvents = True
End Sub

S'il existe mieux je suis preneur, mais je vais passer le sujet en résolu quand même !
Merci encore

Bonne soirée.

Cordialement

Re,

1) il n'y a aucun évènement en ce qui concerne l'application d'un filtre, donc à ce niveau aucune possibilité

2) Je n'ai pas proposé l'évènement Calculate, car il sera lancé à chaque changement dans le classeur

Ceci dit, il suffit de mettre dans ThisWorkbook ce code

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  Dim Lo As ListObject
  On Error GoTo Erreur_Sub
  Set Lo = Sh.ListObjects(1)
  If Lo.AutoFilter.FilterMode = True Then
    Call ColorFiltre
  Else
    Call ColorLine
  End If
  Set Lo = Nothing
Erreur_Sub:
  ' On ne fait rien
End Sub

En espérant qu'il n'y est bien qu'un unique TS dans chaque feuille

A+

Bonjour Bruno,

Désolé, en me relisant je me suis rendu compte que ma réponse n'avait pas vraiment de sens.

En fait j'ai voulu adapter les codes (ChoixCouleur, ColorFiltre et ColorLine) pour ce cas de figure, sans y arriver :

- J'ai plusieurs feuilles qui s'appellent "TZA", "TZB", "TZC" ... etc. etc.

- Chacune de ces feuilles ont respectivement un tableau structuré qui porte exactement le même nom que leur feuille "TZA", "TZB", "TZC",...

=> L'idée était donc d'avoir un code unique qui applique la couleur au tableau de la feuille active.

J'ai donc tenté une modification de la ligne de code (ChoixCouleur, ColorFiltre et ColorLine)

  Set Lo = Sheets("test").ListObjects("TZA")

en :

  feuille = ActiveSheet.Name
  Set Lo = Sheets(feuille).ListObjects(feuille)

et au préalable j'ai déclaré "feuille as Long"

Mais ça me ressort une incompatibilité de type. J'ai essayé feuille as ListObject et j'ai une autre erreur.

____

Pour en revenir à ta précédente réponse :

Le code dans ThisWorkbook fonctionne aussi (bien qu'il fasse référence aux macros citées plus haut, qui ne fonctionnent que sur 1 feuille)

Peux tu m'expliquer le Sh.ListObjects(1) ? A quoi fait référence Sh par exemple ? Et le (1)?

Merci par avance

Cordialement.

Re,

Voilà pourquoi, il faut toujours déposer un fichier au plus proche de la réalité

Sh est la variable objet de la Sub et qui définit la feuille modifiée

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

1 pour le tableau structuré n° 1 de la feuille

Voilà

bonjour FBidee et BrunoM45,

un alternatif, attention, il y a une formule en B2 qui concerne le TS.

Re,

Voici une modification du fichier pour prise en compte du Calculate

Bruno,

Tu as raison ... Je pensais que l'adaptation se passerait bien, trop rêveur !

J'ai quand même réussi (malgré moi ) à faire ce que je voulais :

Par rapport au numéro du TS :

1 pour le tableau structuré n° 1 de la feuille

D'accord j'ignorais qu'on pouvait cibler un tableau de cette façon ! Plutôt pratique

Par curiosité : sait on déterminer lequel est 1, 2, 3, etc ? Dans le gestionnaire de nom je ne vois rien qui puisse m'aiguiller.

Je viens de faire un essai en dupliquant plusieurs tableaux mais je n'arrive pas à savoir si c'est pas ordre de création ou de "position" dans la feuille.

Merci

Cordialement.

Mince, nos messages se sont croisés !

____

Bonjour Bart,

Merci pour cette alternative !

Alors en ce qui me concerne ça fonctionne bien, cependant je vais opter pour la solution de Bruno car les feuilles ne commenceront pas toutes par "TZ*".

Ce qui ne changera pas, c'est que les feuilles seront nommées de la même façon que leurs tableaux structurés et sont toutes identiques (donc même nombre de tableau structuré)

D'où ma tentative citée plus haut ("feuille = ActiveSheet.Name" ...)

___

Bruno,

C'est parfait maintenant ! Et c'est surement plus "propre" que mon code

Néanmoins je suis toujours curieux de connaitre la réponse à ma question précédente, par rapport au (1) : comment sait-on que tel TS est le numéro 1, ou 2, ... ?

Bonne journée à tous les deux.

Cordialement

le 1 ou 2, c'est l'index du TS et je suppose que c'est en ancienneté, donc le plus vieux, etc. S'il n'y a qu'un TS par feuille, alors on ne risque rien.

Si tous vos TS commencent ou contient la cellule C4 (par exemple) on peut aussi utiliser sheets("TZA").range("C4").listobject etc.

Concernant les feuilles "TZx", la macro workbook_Calculate devient, le "EnableEvents" ne sert à rien.

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
     Dim LO    As ListObject
     On Error Resume Next
     Set LO = Sh.ListObjects(Sh.Name)        'nom du listobject = nom de la feuille
     On Error GoTo 0
     If Not LO Is Nothing Then Alternating LO
End Sub

Merci Bart,

Effectivement c'est bien par ordre d'ancienneté... Mais pas de solution pour connaitre son index.

Tant pis on va laisser comme ça Je n'ai que 3 TS par feuilles, et les feuilles sont identiques donc ça devrait bien se passer.

Bonne après-midi !

Rechercher des sujets similaires à "coloriser lignes criteres via segment tableau structure"