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 :

plusieurs optionbutton pour une lisbox [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 442
    Par défaut plusieurs optionbutton pour une lisbox
    Bonjour à tous

    j'ai un petit souci avec l'alimentation d'un listbox.
    Sur un userform, j'ai 13 optionbutton et une listbox

    un choix d'optionbutton doit permettre d'alimenter la listbox différemment
    voilà mon code

    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
    24
    25
    26
    27
    28
    Sub UserForm_Initialize()
    Set shl = Sheets("Liste")
    srep1 = shl.Cells(2, 4)
    srep2 = shl.Cells(3, 4)
    End Sub
     
    Sub opt2_Click()
    If opt2 = True Then
    srep = srep1
    End If
    liste
    End Sub
    Sub opt3_Click()
    If opt3 = True Then
    srep = srep2
    End If
    liste
    End Sub
    Sub liste()
    lbox1.Clear
        derlig = shl.Range("B1048576").End(xlUp).Row
         For y = 2 To derlig
              If shl.Cells(y, 3) = srep Then
                  lbox1.AddItem (Cells(y, 2))
              End If
         Next y
     
    End Sub
    ca marche pour l'optionbutton 1 mais pas le 2 ???

    une idée ??
    cordialement

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Pierre, bonjour le forum,

    Tes variables ne sont pas déclarées on ne connait donc pas leur portée... Puis, sans le fichier qui va avec le code, nous n'avons aucune idée de ce que valent les différentes variables et il nous est difficile de t'aider...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 442
    Par défaut
    Bonjour

    ci-joint avec le fichier et le code dans l'usf2
    merci de t'intéresser à mon pb
    @+
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir Pierre, bonsoir le forum,

    J'ai renommé ou ordonné les 13 OptionButtons. Je leur ai attribué une propriété [Tag] qui correspond à la ligne à laquelle ils se réfèrent (Opt1 => 2, Opt2 => 3, etc), voir le code du module de classe qui récupère cette ligne...
    J'ai déplacé la procédure liste dans le module Module1. J'ai déclaré les variables publiques shl et srep dans un module standard (car dans le module d'une UserForm ou d'un Onglet ça ne marche pas pour Public)...
    Pour éviter d'écrire 13 fois la procédure Click de tous les OptionButtons, j'ai préféré utiliser une module de classe que j'ai nommé ClassOB (Classe des OptionButtons).
    Le principe est relativement simple. À l'initialisation de l'Userform, on rentre dans un tableau (que j'ai nommé TOB dans ton fichier) tous les contrôles dont on veut qu'ils fassent partie de la classe ClassOB. Dans ton cas c'est facile, ce sont tous les OptionButtons. Ensuite, dans le module de classe on définit le noms de ces instances (OB dans ton fichier). Puis, on définit l'action de l'instance avec OB_Action (OB_Click dans ton fichier). ce code sera parcouru chaque fois qu'un contrôle faisant partie du tableau TOB sera cliqué (cocher ou décoché).

    Le code d'initialisation de l'UserForm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private TOB(1 To 13) As New ClassOB 'déclare le tableau TOB (Tableau des OptionButtons) de la classe ClassOB
     
     
    Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Dim I As Byte 'déclare la variable I (Incrément)
     
    Set shl = Sheets("Liste") 'définit la variable shl (déclarée publique dans le module "Module1"
    For I = 1 To 13 'boucle sut les 13 OptionButtons
        Set TOB(I).OB = Me.Controls("Opt" & I) 'ajoute l'OptionButton au tableau TOB
    Next I 'prochain OptionButton
    End Sub
    Le code pour le Module1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public srep As String
    Public shl As Object
     
     
    Sub liste()
    usf2.lbox1.Clear 'vide la listbox "lbox1"
    derlig = shl.Range("B1048576").End(xlUp).Row 'définit la dernière ligne éditée derlig de la colonne B de l'onglet shl
    For y = 2 To derlig 'boucle sur tous lignes de 2 à derlig
        'si la cellule en colonne C est égale à la variabel srep, ajoute la cellule en colonne B à la listbox "lbox1"
         If shl.Cells(y, 3) = srep Then usf2.lbox1.AddItem (Cells(y, 2))
    Next y 'prochaine ligne de la boucle
    End Sub
    Le code du module de classe ClassOB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public WithEvents OB As MSForms.OptionButton 'définit le nom OB (OptiobButtons) des instances de la classe ClassOB
     
     
    Private Sub OB_Change() 'au changement d'une instance OB de la classe
    If OB = True Then srep = shl.Cells(CInt(OB.Tag), 4).Value 'si l'instance OB est coché, définit la variable srep
    Module1.liste 'lance la procédure "liste" du module "Module1"
    End Sub
    Le fichier :
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 442
    Par défaut
    Bonjour ThautHème

    là on rentre dans une autre dimension pas forcemment accessible à tout le monde

    c'est tout simplément génial, il y a encore du boulor (bosser les modules de classe, les comprendre, les utiliser, ...).

    En écrivant les procédures click des optionsbuttons est ce que j'y serai arrivé ?

    en tout cas merci beaucoup pour ce coup de main et surtout ta réactivité.
    Au plaisir de te solliciter à nouveau ou un de tes collègues dont les conseils sont si précieux.


  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Pierre, bonjour le forum,

    Oui, bien sûr tu y serais arrivé. D'ailleurs il te suffit de faire une exemple avec deux sans le module de classe. Je pense que ton problème venait des variable déclarées publique mais pas dans un module standard. Avec 13 procédures et si, par nécessité, tu rajoutais des OptionButtons, il t'aurais fallu rajouter autant de procédure Click. Alors que là, il suffit de les mettre dans le tableau des OptionButtons TOB et le tour est joué.
    Veux-tu que je regarde ton fichier sans module de classe ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/08/2006, 08h15
  2. plusieurs css pour une page
    Par difficiledetrouver1pseudo dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 20/02/2006, 21h30
  3. plusieurs formulaires pour une seule page ?
    Par lifecraft dans le forum ASP
    Réponses: 9
    Dernier message: 01/02/2006, 09h48
  4. [C#] Plusieurs LinkButton pour une seule fonction
    Par FunnyDjo dans le forum ASP.NET
    Réponses: 3
    Dernier message: 08/06/2005, 22h01
  5. Réponses: 2
    Dernier message: 05/07/2004, 17h50

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