VB Excel 97, Masquer forme

Résolu
cs_kouki69 Messages postés 95 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 28 août 2015 - 28 juin 2007 à 08:36
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 - 28 juin 2007 à 13:50
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

JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
28 juin 2007 à 10:50
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
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
28 juin 2007 à 12:07
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
cs_kouki69 Messages postés 95 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 28 août 2015
28 juin 2007 à 10:51
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
cs_kouki69 Messages postés 95 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 28 août 2015
28 juin 2007 à 10:55
Ca marche !
Merci  JM247L !!!!!!!

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
28 juin 2007 à 10:58
Nos messages se sont croisés ou tu cherches encore une réponse ?
JML
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
28 juin 2007 à 11:02
Pigé, C le temps de distribution des mails
Bonne journée. JML
cs_kouki69 Messages postés 95 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 28 août 2015
28 juin 2007 à 11:03
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
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
28 juin 2007 à 11:28
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   
cs_kouki69 Messages postés 95 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 28 août 2015
28 juin 2007 à 11:46
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 ....)
cs_kouki69 Messages postés 95 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 28 août 2015
28 juin 2007 à 13:13
Impec, t'es vraiment fort,
Merci mille fois pour ta générositée
Georges
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
28 juin 2007 à 13:50
Nous ne sommes pas des médecins aussi partageons sans restriction notre savoir et nos acquis
Rejoignez-nous