Bonjour Babouze, bonjour le forum,
une proposition :
Sub Macro1()
Dim A As Worksheet 'déclare la variable A (onglet A)
Dim B As Worksheet 'déclare la variable A (onglet B)
Dim F As Shape 'déclare la variable F (Forme)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Set A = Worksheets("A") 'définit l'onglet A
Set B = Worksheets("B") 'définit l'onglet B
'*******************************************************************
'non nécessaire si les formes sont déjà masquées par défaut
For Each F In B.Shapes 'boucle sur toutes les formes F de l'onglet B
F.Visible = False 'masque la forme F
Next F 'prochaine forme de la boucle
'*******************************************************************
DL = A.Cells(Application.Rows.Count, "G").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne G de l'onglet A
For I = 1 To DL 'boucle 1 : sur toutes les lignes de I à DL
If A.Cells(I, "G").Value <> "" Then 'condition : si la cellule en colonne G de la boucle n'est pas vide
For Each F In B.Shapes 'boucle 2 : sur toutes les formes F de l'ongelt B
If A.Cells(I, "G").Value = F.Name Then F.Visible = True: Exit For 'si la valeur de la cellule est égale au nom de la forme, affiche la forme, sort de la boucle 2
Next F 'prochaine forme de la boucle 2
End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
End Sub