VB Excel 97, Masquer forme [Résolu]

Signaler
Messages postés
95
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
28 août 2015
-
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
-
Bonjour,
Voilà, je fais des schémas sur excel et je souhaiterais masquer certaines formes selon des conditions.
Exemple:
Initialement, le schema est complet (2 cercles relié par une ligne). Les formes sont générées avec le générateur de forme de excel97

Je voudrais que pour une condition particulière (par ex cellule B1 = 2), le trait ("Trait 1")reliant les deux cercles soit masqué.
Je n'ai pas d'idée quelle commande utilisée
Est-ce possible ??
Merci de votre aide

11 réponses

Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Bonjour
Ce devrait être la réponse
    If Range("B2") = 2 Then
      ActiveSheet.Shapes("Line 1").Select
      Selection.Visible = False
    End If
Bonne Journée. JML
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Colle ce code dans la feuille concernée
1 - Clic droit sur l'onglet puis "afficher le code"
2 - Sélectionne "Worksheet" dans la liste en haut (à la place de "General")
3 - Colle le code
4 - Supprime les 2 lignes qui se sont affichées par défaut

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim SelectionActuelle
' Conserve la cellule active pour repositionner la selection après exécution
  SelectionActuelle = ActiveCell.Address
' Affiche systématiquement le trait afin de pouvoir le sélectionner
  ActiveSheet.Shapes("Line 1").Visible = True
  ActiveSheet.Shapes("Line 1").Select  If Range("B2") 2 And ActiveSheet.Shapes("Line 1").Visible True Then
     Selection.Visible = False
  ElseIf Range("B2") <> 2 Then
     Selection.Visible = True
  End If
' Resélectionne la cellule active avant exécution
  Range(SelectionActuelle).Select
End Sub
Messages postés
95
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
28 août 2015

J'ai trouvé ça, mais celà me parait lourd :

    ActiveSheet.Shapes("Rectangle 60").Select
    Selection.ShapeRange.Fill.Visible = msoFalse
    Selection.ShapeRange.Fill.Transparency = 0#
    Selection.ShapeRange.Line.Weight = 0.75
    Selection.ShapeRange.Line.DashStyle = msoLineSolid
    Selection.ShapeRange.Line.Style = msoLineSingle
    Selection.ShapeRange.Line.Transparency = 0#
    Selection.ShapeRange.Line.Visible = msoFalse

En fait, cette commande permet de ne pas remplir la forme et de ne pas mettre de bordure. Je préfèrerais plutôt une seule ligne qui permet de cacher la forme (Hide)
Des idées ?????
Merci
Messages postés
95
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
28 août 2015

Ca marche !
Merci  JM247L !!!!!!!
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Nos messages se sont croisés ou tu cherches encore une réponse ?
JML
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Pigé, C le temps de distribution des mails
Bonne journée. JML
Messages postés
95
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
28 août 2015

Effectivement, nos messages se sont croisés.
L'inconvénient c'est que cett eligne de commande semble supprimer complètement la forme. Ce que je souhaite, c'est pouvoir la réafficher si besoin (si la condition évolue), si t'as des idées ...
Merci
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Elle n'est pas supprimée mais simplement masqué
Il suffit de :
   If Range("B2") = 2 Then
      ActiveSheet.Shapes("Line 1").Select
      Selection.Visible = False
   Else
      Selection.Visible = True
   End If
Tu met ce code dans la feuille au niveau 
   Private Sub Worksheet_Change(ByVal Target As Range)


JML   
Messages postés
95
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
28 août 2015

J'avais essayé le else selection.visible = True mais ça buggait

Quand tu dis mettre ce code dans la feuille au niveau :
 Private Sub Worksheet_Change(ByVal Target As Range)

Celà veut dire le mettre dans un module ? C'est ce que j'ai essayé mais aucune réaction ...

(Je comprends que "Private Sub Worksheet_Change(ByVal Target As Range)" permet d'activer le code dès la modification dans la feuille excel et évite donc d'éxécuter une macro via outils, macro, éxécuter ....)
Messages postés
95
Date d'inscription
lundi 27 mars 2006
Statut
Membre
Dernière intervention
28 août 2015

Impec, t'es vraiment fort,
Merci mille fois pour ta générositée
Georges
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Nous ne sommes pas des médecins aussi partageons sans restriction notre savoir et nos acquis