Macro VBA Afficher-masquer des objets selon conditions

adrian

XLDnaute Nouveau
Bonjour à tous,

Après un long moment passé sans poser de questions, me revoici bloqué par mes connaissances approximatives de VBA.

Je joins un fichier exemple pour illustrer mon problème qui est le suivant :

- j'ai une colonne composée de références d'articles, "référence1", "référence2" etc...
- des objets (ensemble de points et de flèches représentant des flux logistiques) nommés comme ces références

je souhaiterais faire une macro qui me permette d'afficher uniquement les objets dont la référence est saisie en colonne B.

merci de votre attention et de vos conseils avisés à venir ;)

Je suivrais avec attention le fil pour répondre aux questions si ma demande n'est pas assez claire.
 

Pièces jointes

  • test flux logistique allégé.xlsm
    22.1 KB · Affichages: 148

WUTED

XLDnaute Occasionnel
Re : Macro VBA Afficher-masquer des objets selon conditions

Bonjour adrian,

Comme ça peut-être :
VB:
Sub AfficherObj()
    With Sheets("C6-Transport")
        For Each sh In .Shapes
            For i = 13 To .Range("B65536").End(xlUp).Row
                If .Range("B" & i) = sh.Name Then
                    sh.Visible = True
                    Exit For
                Else
                    sh.Visible = False
                End If
            Next i
        Next sh
    End With
End Sub

Bonne journée.
 

pat01200

XLDnaute Occasionnel
Re : Macro VBA Afficher-masquer des objets selon conditions

Bonjour,

En regardant ton fichier et en supposant que lorsque dans une cellule il est écrit "vide" cela signifie qu'elle est effectivement vide, un filtre automatique en choisissant "Non vides" en bas de liste devrait faire l'affaire, non ?
 

adrian

XLDnaute Nouveau
Re : Macro VBA Afficher-masquer des objets selon conditions

Merci WUTED pour ta réponse, en effet cela fonctionne.

Petit bémol, les autres objets qui ne sont pas liés à des références disparaissent également (le rectangle sur lequel j'applique la macro notamment ou encore le "rond" de la légende).

Pour résoudre ce souci, je suppose qu'il faut ajouter au code que tu as créé quelques lignes à la fin demandant de rendre visible les formes concernées, quel code dois-je saisir (xxx.visible = True mais quoi donc à la place de xxx) ?

PS : bonjour à toi Pat, pour les cellules vides, ce n'était qu'un exemple montrant que l'utilisateur renseigne le contenu de ces cellules grâce à une liste de choix prédéfinis (et donc "vide" s'il n'y a pas de référence). Il n'y a pas d'objet associé à "vide" par conséquent ce n'est pas gênant de garder des cellules avec cet intitulé.
 

WUTED

XLDnaute Occasionnel
Re : Macro VBA Afficher-masquer des objets selon conditions

Re,

VB:
Sub AfficherObj()
    With Sheets("C6-Transport")
        For Each sh In .Shapes
            If sh.Name <> refRectange And sh.Name <> refRond Then
              For i = 13 To .Range("B65536").End(xlUp).Row
                  If .Range("B" & i) = sh.Name Then
                      sh.Visible = True
                      Exit For
                  Else
                      sh.Visible = False
                  End If
              Next i
            End if
         Next sh
    End With
End Sub
En remplaçant refRectange et refRond par le nom de tes figures, devrait faire l'affaire.