IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Afficher/Masquer une forme (shape)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 23
    Par défaut Afficher/Masquer une forme (shape)
    Hello,

    Pour mon job, j'utilise un classeur Excel avec tous mes clients. J'ai besoin d'avoir un historique de ces clients (quelles actions effectuées avec le client dans le passé).

    J'ai donc une ligne par client avec un bouton "Historique" devant. En cliquant sur le bouton, je crée une zone de texte (shape) dans laquelle viendront les infos. En recliquant sur le bouton, je la masque. Si je reclique sur le bouton, il doit la réafficher sans la créer puisqu'elle existe. Chaque zone de texte est nommée avec un identifiant unique.

    Mon problème est que j'arrive à la créer et masquer mais pas à la réafficher, il veut la recréer et ça plante puisque le nom est déjà attribué. Mon code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub showTextbox(p As String)
     On Error GoTo Handler
        ActiveSheet.Shapes(p).Select
     
        If ActiveSheet.Shapes(p).Visible Then
         ActiveSheet.Shapes(p).Visible = False
        End If
     
        Exit Sub
     
    Handler:
        If ActiveSheet.Shapes(p).Visible = False Then
         ActiveSheet.Shapes(p).Visible = True
        Else
         drawTextbox (p)
        End If
     
    End Sub
    p = identifiant de la zone de texte.

    Je suis vraiment pas doué en VB et c'est mes premiers pas (et certainement derniers...).

    MERCI de votre aide, Google ne m'aide plus à ce stade.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut
    Bonjour,

    j'ajouterais tout simplement un Else au premier If :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If ActiveSheet.Shapes(p).Visible Then
         ActiveSheet.Shapes(p).Visible = False
    Else
         ActiveSheet.Shapes(p).Visible = True
    End If

  3. #3
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub showTextbox(p As String)
    Dim Shp As Shape, Existe As Boolean
     
    With ActiveSheet
        For Each Shp In .Shapes
            If Shp.Name = p Then
                Existe = True
                Exit For
            End If
        Next
     
        If Existe = True Then
            If .Shapes(p).Visible = True Then
                .Shapes(p).Visible = False
            Else
                .Shapes(p).Visible = True
            End If
        Else
            'création de la zone de texte
        End If
    End With
     
    End Sub

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub showTextbox(p As String)
    Dim Shp As Shape
     
    With ActiveSheet
        On Error Resume Next
        Set Shp = .Shapes(p)
        On Error GoTo 0
        If Shp Is Nothing Then
            Set Shp = .Shapes.AddTextbox(1, 100, 100, 200, 50)
            Shp.Name = p
        End If
        Shp.Visible = Not Shp.Visible
        Set Shp = Nothing
    End With
    End Sub

Discussions similaires

  1. donner un nom à une forme (shape)
    Par danest dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/01/2008, 14h36
  2. une forme (shape) à l'interieur d'une autre?
    Par Sami-33 dans le forum Excel
    Réponses: 2
    Dernier message: 02/07/2007, 08h57
  3. Afficher/Masquer une div
    Par philbona dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 08/02/2007, 23h09
  4. [Form] Afficher/Masquer une zone de texte
    Par SpyesX dans le forum IHM
    Réponses: 14
    Dernier message: 01/12/2005, 01h13
  5. Masquer une forme lors du passage de souris
    Par gilles641 dans le forum Langage
    Réponses: 7
    Dernier message: 15/07/2005, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo