Microsoft 365 Afficher / masquer des shapes ou des groupes de shapes avec condition mini/maxi

pat66

XLDnaute Impliqué
Bonjour le forum,

j'ai besoin d'aide car je souhaite afficher/masquer des groupes de shapes selon les valeurs mini et maxi saisies dans E6 et H6
Le fichier ci joint contient La macro de Franc58 qui m'a bien aidé pour afficher/masquer les shapes mais je dois - 1er fichier soit les grouper et donc adapter cette macro avec des groupes et non avec des shapes,
- 2ème fichier soit utiliser if visible false/true

Tout est indiqué dans les fichiers ci joint pour une meilleure compréhension, le deuxième effectue bien ce que je souhaite mais c'est tiré par les cheveux

merci votre aide
 

Pièces jointes

  • Classeur1-complet-groupes.xlsm
    23.4 KB · Affichages: 0
  • Classeur1-complet.xlsm
    25.6 KB · Affichages: 1
Dernière édition:
Solution
Bonjour Pat,
Pour mieux tester j'ai mis hors service la macro Worksheet_ChangeOLD.
Un essai en PJ avec une macro pour tout afficher, juste pour tester.
La macro opérationnelle avec :
VB:
Sub MasquerGroup()
    Dim Fe As Worksheet, Tbl() As Shape, S As Shape, Groupe As Range, I%, J%
    Set Fe = ActiveSheet
    For Each S In Fe.Shapes
        If S.Type = msoGroup Then                                       'si c'est un groupe
            J = 0
            For I = 1 To S.GroupItems.Count                             ' stocke les shapes dans le tableau Tbl
                J = J + 1
                ReDim Preserve Tbl(1 To J)
                Set Tbl(J) = S.GroupItems(I)
            Next I
            Taille = UBound(Tbl)
            If Taille <...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Pat,
Pour mieux tester j'ai mis hors service la macro Worksheet_ChangeOLD.
Un essai en PJ avec une macro pour tout afficher, juste pour tester.
La macro opérationnelle avec :
VB:
Sub MasquerGroup()
    Dim Fe As Worksheet, Tbl() As Shape, S As Shape, Groupe As Range, I%, J%
    Set Fe = ActiveSheet
    For Each S In Fe.Shapes
        If S.Type = msoGroup Then                                       'si c'est un groupe
            J = 0
            For I = 1 To S.GroupItems.Count                             ' stocke les shapes dans le tableau Tbl
                J = J + 1
                ReDim Preserve Tbl(1 To J)
                Set Tbl(J) = S.GroupItems(I)
            Next I
            Taille = UBound(Tbl)
            If Taille < 2 Then                                          ' s'il y a qu'un shape dans le groupe
                Tbl(1).Visible = msoFalse: Tbl(2).Visible = msoFalse    ' on le masque
            Else                                                        ' sinon
                Valeur = Val(Tbl(1).TextFrame2.TextRange.Text)          ' on extrait le nombre du shape
                If Valeur >= [E6] And Valeur <= [H6] Then               ' si dans l'intervalle
                    Tbl(1).Visible = msoTrue: Tbl(2).Visible = msoTrue  ' on le rend visible
                Else                                                    ' sinon
                    Tbl(1).Visible = msoFalse: Tbl(2).Visible = msoFalse ' on le masque
                End If
            End If
            Erase Tbl                                                   ' on efface le tableau pour le groupe suivant
        End If
    Next
End Sub
En espérant avoir tout compris.
 

Pièces jointes

  • Classeur1-complet-groupes.xlsm
    24.8 KB · Affichages: 10

pat66

XLDnaute Impliqué
Bonjour Sylvanu,

toujours aussi efficace, je commençais à désespérer car je pensais que mon problème était insoluble ou que je m'exprimais mal, mais non grâce à vous mon problème est résolu

Un grand merci pour cette générosité

cdt
 

pat66

XLDnaute Impliqué
Bonjour Sylvanu,

Serait il possible de centrer horizontalement les groupes de shapes visibles sur la feuille ?
car selon le périmètre déterminé les groupes sont plus ou moins excentrés horizontalement

exemple :
si Valeur mini 100 et maxi 350, les groupes s'affichent plutôt vers la gauche de la feuille
si valeur mini 300 et maxi 500, les groupes s'affichent plutôt vers la droite de la feuille

L'idéal serait donc que quelque soit les valeurs mini et maxi indiquées , les groupes de shapes visibles soient centrés horizontalement

merci beaucoup
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Ca, pour moi, c'est compliqué à faire. On ne connait pas le nombre de shapes, ni leur nom.
Que ce passe t-il si plusieurs lignes sont vides ? Doit on tout regrouper ?
( dans le cas présent on ne s'occupe pas de leur nom et leur position donc c'est beaucoup plus simple que de les déplacer )
Le mieux est que vous fassiez un nouveau post spécifiquement sur ce point. Il y a des contributeurs qui devraient pouvoir vous satisfaire.

Petite question : Tenez vous à ce que ce soit des shapes ? Ne pourrait on pas utiliser des cellules pour le faire ?
D'un point de vue visuel il n'y a pas de différence entre le motif de gauche en shape et celui de droite en cellules.
1706081962825.png
1706082005267.png
 

Pièces jointes

  • 1706081976625.png
    1706081976625.png
    1.3 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Ci joint un essai.
La liste est limitée à 45 items.
La liste peut comporter des lignes vides sans incidence.
Il n'y a pas d'espaces vides entre les cellules colorées.
La macro est automatique lorsqu'on change une valeur de la liste.
 

Pièces jointes

  • Classeur1-complet-groupes V2.xlsm
    18.4 KB · Affichages: 3

pat66

XLDnaute Impliqué
Sylvanu,

vous êtes un magicien, c'est top !!

Cette solution est beaucoup plus intéressante car je peux tout modifier, les lignes et les colonnes qui contiendront les valeurs, le centrage ainsi que la couleur des cellules

Je vais réaliser quelques tests

un grand merci
 

pat66

XLDnaute Impliqué
Bonjour Sylvanu,

J'ai encore besoin de votre expertise car je ne peux utiliser les cellules (#8), cela me demande d'effectuer trop de modifications sur la feuille concernée, à savoir :
- les colonnes sur ma feuille n'ont pas une largeur égale
- certaines cellules contiennent déjà des formules et les déplacer modifierait la présentation générale de la feuille

Je dois donc impérativement utiliser un Shape qui s'affiche ou pas (Si E6 ou H6 = vides), par dessus les formules et les résultats existants.

La solution idéale, serait me semble t'il de pouvoir afficher, une seule forme qui filtre et affiche les valeurs entrant dans le périmètre de E6 et H6 uniquement et qui s'actualiserait à chaque changement de valeur dans E6 et H6, cela résoudrait aussi le centrage horizontal

Merci pour vos conseils
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Comme déjà dit créer des shapes, les grouper, et les positionner sur la feuille je ne sais pas faire, ou tout du moins cela me serait difficile.
Alors en PJ il y a 24 groupes pré positionnés et masqués. ( nommés Groupe1 à Groupe24 )
Si le besoin est >24 il faut modifier le code en conséquence et rajouter les groupes qui vont bien.
 

Pièces jointes

  • Classeur1-complet-groupes (V4).xlsm
    23.8 KB · Affichages: 6

pat66

XLDnaute Impliqué
re,

ok, je vais tenter de voir si c'est faisable d'utiliser un Shape unique qui filtre dans une autre discussion et si ce n'est pas faisable, je modifierais ma feuille et utiliserais votre solution du post #8

en tout cas vraiment merci pour votre aide et vos conseils Sylvanu,

cdt
 

pat66

XLDnaute Impliqué
pour tout vous dire, je n'ai pas réussi à m'en servir, j'ai beau modifier H6, rien ne se passe tous les groupes restent affichés, seules les valeurs dans A et B rentrant dans le périmètre changent de couleur alors qu'elles ne seront pas visibles par l'utilisateur
 

Discussions similaires

Statistiques des forums

Discussions
313 226
Messages
2 096 361
Membres
106 585
dernier inscrit
Tortank69