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 :

Userform: intitulé interactif


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut Userform: intitulé interactif
    Bonjour à tous,

    J'ai réalisé un userform basique contenant un intitulé et un bouton de commande.
    Dans mon classeur excel, sur ma feuille 2 il y a cinq phrases dans la colonne A (de A1 à A5).
    Au démarrage l'intitulé affiche ce qui est contenu en A1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    Label1.Caption = Feuil2.Range("A1").Value
    End Sub
    Je veux que lorsque l'utilisateur clique sur le bouton de commande l'intitulé affiche le texte de la ligne suivante jusqu'à A5.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
    Dim i As Integer
    For i = 1 To 5
    Label1.Caption = Feuil2.Range("A" & i).Value
    next i
    End Sub
    Avec ce code j'affiche directement le texte de A5 sans celui des lignes intermédiaires.
    J'ai pensé à ajouter un "délai" entre chaque incrémentation mais je voudrais que le changement ne dépende que du bouton de commande.

    Merci d'avance,

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    Bonjour,

    Essaie ceci.
    Static conserve la valeur de la variable Cnt même si on sort de la procédure
    Dans ce code je remets à 1 si on dépasse 5. À modifier selon tes besoins.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
        Static Cnt As Integer
     
        Cnt = Cnt + 1
        If Cnt > 5 Then Cnt = 1
     
        Me.Label1 = Feuil2.Range("A" & Cnt)
    End Sub

  3. #3
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut
    Bonjour Parmi,
    Merci beaucoup pour ta réponse qui convient parfaitement.
    Avant de passer le post en résolu j'ai un dernier problème, cette fois un peu plus compliqué..

    Voici le code pour l'initialisation de mon formulaire (jusque là il n'y a pas de problèmes):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Dim Lrep As Integer
     
    Private Sub UserForm_Initialize()
        Label2.Caption = "Cliquez sur suivant pour afficher la première question !"
        Label3.Caption = 0
        OptionButton1.Caption = 0
        OptionButton2.Caption = 0
        OptionButton4.Caption = 0
        OptionButton5.Caption = 0
        Lrep = 1    
    End Sub
    Voici mon formulaire (avant l'initialisation):

    Nom : form.JPG
Affichages : 403
Taille : 58,7 Ko

    Lorsque l'utilisateur a sélectionné une réponse (un des 4 boutons d'option), il clique sur suivant(commandbutton1) pour afficher la prochaine question (Label2):
    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
    Private Sub CommandButton1_Click()
     
        Static cnt As Integer
     
        cnt = cnt + 1
        If cnt > 20 Then cnt = 1
     
        Label2.Caption = Sheets(2).Range("A" & cnt)
        OptionButton1.Caption = Sheets(2).Range("B" & cnt)
        OptionButton2.Caption = Sheets(2).Range("C" & cnt)
        OptionButton4.Caption = Sheets(2).Range("D" & cnt)
        OptionButton5.Caption = Sheets(2).Range("E" & cnt)
        Label3.Caption = cnt & "/20"
     
    End Sub
    De mon coté le code récupère le premier carractère de la réponse (donc A, B, C, ou D) et il va écrire la réponse sur la feuille 3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub OptionButton1_Click()
     
    Dim r As String
     
    If OptionButton1.Value = True Then
        r = Left(OptionButton1.Caption, 1)
        Sheets(3).Range("A" & Lrep) = r
        Lrep = Lrep + 1
        If Lrep > 20 Then Lrep = 1
    End If
     
    End Sub
    J'ai le même bout de code pour les 3 autres boutons d'option.
    Le but étant d'obtenir à la fin une colonne avec vingt lettres.

    Mon problème : Lorsque je sélectionne un bouton d'option, que je clique sur suivant puis que je sélectionne un autre bouton d'option tout se déroule bien.
    Si je sélectionne le bouton A, puis le bouton A à nouveau le programme ne prend pas en compte la réponse à la deuxième question.

    J'ai l'impression que la deuxième réponse n'as pas été prise en compte pourtant le bouton d'option A est toujours sélectionner !
    Si je prend le temps de recliquer sur A (bien que le bouton soit déja coché) cela ne change rien non plus.
    Il m'est donc impossible de répondre deux fois la même lettre consécutivement.


    Si je n'est pas été très clair je peux vous faire parvenir mon fichier ou vous donnez de plus amples informations !

    Cordialement,

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    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 609
    Par défaut
    OptionButton1_Click va réagir s'il y a une sélection faite sur ce bouton ET qu'il n'est pas déjà sélectionné.
    Dans ton exemple, comme il est déjà sélectionné, la Sub n'est pas rappelée.

    Idéalement, il faudrait que tu désélectionnes tous les boutons d'option à chaque fois.
    De cette façon, tu pourras sélectionner le même bouton sans problème.

Discussions similaires

  1. [XL-2007] intitulé label sur userform
    Par grisan29 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/06/2010, 16h30
  2. Userform - gérer l'intitulé des checkboxes
    Par PacoE dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/05/2008, 14h20
  3. Projet débogueur interactif écrit en C++
    Par observ dans le forum C++
    Réponses: 13
    Dernier message: 29/12/2004, 15h00
  4. Cours interactif langage machine
    Par pierre.jourlin dans le forum Assembleur
    Réponses: 8
    Dernier message: 01/12/2004, 22h07
  5. [VBA EXCEL] Réduire/Agrandir UserForms
    Par Fench dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2003, 16h02

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