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 :

comment récupérer le text d'un button text en VBA?


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut comment récupérer le text d'un button text en VBA?
    Bonjour,
    J'ai ajouté un bouton dans une feuille Microsoft Excel 2010. Je l'ai nommé "Button_Dev_Mode". J'ai fait un clique droit sur le boutton pour omdifier le texte et entré "Dev Mode ON", ça marche bien. Maintenant je veux faire quelque chose dans une macro (appelée en cliquant sur le boutton) en fonction du texte. Mais quand j'appelle Toggle_Dev_Mode
    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
    Sub Toggle_Dev_Mode()
        Sheets("Sheet1").Select
        If Sheets("Sheet1").Shapes("Button_Dev_Mode").TextFrame2.TextRange.Characters.Text = "Dev Mode OFF" Then
            Dev_Mode_Off
        ElseIf Sheets("Sheet1").Shapes("Button_Dev_Mode").TextFrame2.TextRange.Characters.Text = "Dev Mode ON" Then
            Dev_Mode_On
        End If
    End Sub
     
    Sub Dev_Mode_On()
        Sheets("Sheet1").Shapes("Button_Dev_Mode").TextFrame2.TextRange.Characters.Text = "Dev Mode OFF"
    End Sub
     
    Sub Dev_Mode_Off()
        Sheets("Sheet1").Shapes("Button_Dev_Mode").TextFrame2.TextRange.Characters.Text = "Dev Mode ON"
    End Sub
    Je suis bloqué car TextRange est "en dehors des limites". Le code d'erreur et le message est :
    Erreur d'exécution '-2147024809 (80070057)': La valeur tapée est en dehors des limites
    Est-ce qu'il faut que je mette via Excel une valeur par défaut (de manière non programmatique) Sheets(mSheetName).Shapes("Button_Dev_Mode").TextFrame2.TextRange.Characters.Text ? Si oui, comment faire cela?
    Merci pour votre aide,

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Que vaut mSheetName ?
    MPi²

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Ca vaut "Sheet1" pardon, j'ai modifié le code.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Alors, ça devrait fonctionner, oui ?

    Ceci fonctionne bien ici, si la feuille se nomme bien Sheet1
    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
    Sub Toggle_Dev_Mode()
        Sheets("Sheet1").Select
        If Sheets("Sheet1").Shapes("Button_Dev_Mode").TextFrame2.TextRange.Characters.Text = "Dev Mode OFF" Then
            Dev_Mode_Off
        ElseIf Sheets("Sheet1").Shapes("Button_Dev_Mode").TextFrame2.TextRange.Characters.Text = "Dev Mode ON" Then
            Dev_Mode_On
        End If
    End Sub
     
    Sub Dev_Mode_On()
        Sheets("Sheet1").Shapes("Button_Dev_Mode").TextFrame2.TextRange.Characters.Text = "Dev Mode OFF"
    End Sub
     
    Sub Dev_Mode_Off()
        Sheets("Sheet1").Shapes("Button_Dev_Mode").TextFrame2.TextRange.Characters.Text = "Dev Mode ON"
    End Sub
    MPi²

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Et pourtant ça ne fonctionne pas justement de mon côté. Je cherche à savoir pourquoi. J'ai d'autres feuilles en plus, mais cela ne devrait pas avoir d'impact.

    J'ai trouvé que l'on pouvait référencer le texte d'un bouton d'autres manières mais quelles sont donc les différences?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Sheet1").Buttons("Button_Dev_Mode").Caption
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Sheet1").Shapes("Button_Dev_Mode").AlternativeText

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Qu'est-ce qui ne fonctionne pas ?
    Toujours un message d'erreur ?
    MPi²

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    415
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 415
    Points : 138
    Points
    138
    Par défaut
    Oui la même chose. En fait l'erreur sur mSheetName n'était que dans la retranscription de mon problème. Mon code était correct déjà ( en fait j'ai simplifié, dans mon code il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim mSheetName As String
    mSheetName = "Sheet1"
    Sheets(mSheetName).Select
    et mSheetName partout où j'ai mis ici "Sheet1").

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Est-ce bien une Shape ?
    Si tu roules ce bout de code, est-ce que le msgbox te retourne le bon nom (attention aux espaces...) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Shp As Shape
     
    For Each Shp In Sheets("Sheet1").Shapes
        MsgBox Shp.Name
    Next
    MPi²

Discussions similaires

  1. comment récupérer la valeur d'une zone texte ?
    Par jessy212 dans le forum Access
    Réponses: 2
    Dernier message: 24/08/2006, 14h59
  2. comment récupérer la valeur d'un objet text dans crystal XI
    Par Dseb dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 27/07/2006, 10h07
  3. Comment récupérer le contenu de plusieurs fichiers textes ?
    Par calimero2611 dans le forum Langage
    Réponses: 9
    Dernier message: 19/02/2006, 15h45
  4. Réponses: 13
    Dernier message: 12/12/2005, 13h58
  5. Réponses: 7
    Dernier message: 15/09/2005, 06h37

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