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 présélection d'une valeur variable dans une combobox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 20
    Par défaut Userform présélection d'une valeur variable dans une combobox
    Bonjour à tous,

    J'ai créé un userform pour pouvoir modifier les liens hypertexte de boutons présent sur plusieurs feuilles, les liens hypertextes sont répertoriés dans une autre feuilles nommé "Listes".
    J'aimerais pouvoir pré sélectionner la valeur de la première combo box en fonction du nom de la page active.

    exemple.xlsm

    Dans mon fichier exemple, cela voudrait dire que lorsque je suis sur la feuille appelé A, ma première combobox, préselectionnera la valeur A.
    La subtilité est que mes combobox sont remplis par des listes déroulantes en cascade, il ne faudrait donc pas que la pré attribution de la valeur vienne chambouler tout ce qu'il y a derrière.

    Je vous remercie d'avance pour le temps que vous prendrez à étudier mon problème

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonjour,

    Il suffit de compléter votre procédure d'initialisation (lignes 8 et 9):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Initialize()
        'Définit la feuille contenant les données
        Set Ws = Worksheets("Listes")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = Ws.Range("A1000").End(xlUp).Row
        'Remplissage du ComboBox1
        Alim_Combo 1
        Me.ComboBox1 = ActiveSheet.Name
        ComboBox1_Change
    End Sub
    Cordialement.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 20
    Par défaut
    C'est super merci beaucoup !
    C'était pas si compliqué, je le saurai pour la prochaine fois

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 20
    Par défaut
    j'ai une ultime question
    Si je veux pré remplir la seconde combo box, où dois-je placer la commande ?
    si je la place comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ComboBox1_Change()
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
        Me.ComboBox2 = "Divers"
        ComboBox2_Change
     
    End Sub
    il n'y a la prise en compte de la combo box 2 lors de la sélection de la combo box 3, c'est comme si ça ne filtrait plus les valeurs en fonction de celle sélectionnée dans les combobox précédente...

  5. #5
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonjour,

    Pour préremplir les listes déroulantes en cascade:
    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
    Private Sub UserForm_Initialize()
        'Définit la feuille contenant les données
        Set Ws = Worksheets("Listes")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = Ws.Range("A1000").End(xlUp).Row
        'Remplissage du ComboBox1
        Alim_Combo 1
        Me.ComboBox1 = ActiveSheet.Name
        ComboBox1_Change
        On Error Resume Next
        Me.ComboBox2.ListIndex = 0
    End Sub
     
    Private Sub ComboBox1_Change()
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
        ComboBox2_Change
        On Error Resume Next
        Me.ComboBox2.ListIndex = 0
    End Sub
     
    Private Sub ComboBox2_Change()
        'Remplissage Combo3
        Alim_Combo 3, ComboBox2.Value
        On Error Resume Next
        Me.ComboBox3.ListIndex = 0
    End Sub
    Cordialement.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 20
    Par défaut
    Je te remercie pour ta réponse.
    Le problème c'est que l'index de la valeur "Divers" que j'aimerais pré-sélectionner, est variable. Car il y a plusieurs divers, une dans chaque client A, B, C etc...
    Serait-il possible qu'a la place du 0 de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    On Error Resume Next
        Me.ComboBox2.ListIndex = 0
    cela prenne la dernière valeur (une fois filtrer par la première combo box), car la sous catégorie "Divers" sera toujours placé en dernier avec la sélection de la première combobox.

    deuxième question : quand le client et la sous catégorie "Divers" sont sélectionnés, la troisième comboBox affiche les boutons correspondants au catégorie Divers de TOUS les clients, comme si le premier filtre sur le client ne se faisait pas ....

    As-tu une idée ?

  7. #7
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Désolé, mais je n'ai aucune idée de la provenance des "Divers" dont vous parlez. Ce mot n'apparait nulle part dans votre fichier exemple.xlsm.

    Cordialement.

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 20
    Par défaut
    Excusez-moi, j'ai mis à jour le fichier :

    exemple.xlsm

    Mon but est qu'on puisse à l'aide du second formulaire, modifier le nom des boutons supplémentaires. J'ai classé ces boutons dans la sous-catégorie "Divers". J'aimerais donc que la seconde combo box pré-sélectionne la case "divers" correspondante au bon client. (si possible j'aimerais qu'il ne puisse pas sélectionner d'autre bouton mais sinon uniquement la pré-sélection suffira ^^).
    Dans mes tests sur mon fichier principal, lorsque je mettais la pré-sélection sur divers, ça me laissait visible tous les boutons qui avaient "Divers" en sous catégorie et pas uniquement ceux concernant le client sélectionné...

  9. #9
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonjour,

    Je ne saisis pas vraiment où vous voulez finalement arriver mais voici toujours une solution. Code dans le UserForm2:
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub btnModifier_Click()
        Dim btn As Button
        If MsgBox("Etes-vous sûr de vouloir modifier le nom du bouton ?", _
                   vbYesNo, "Demande de confirmation") = vbYes Then
            '--- parcourir les boutons pour trouver le premier qui a le nom du bouton sélectionné
            For Each btn In ActiveSheet.Buttons     '--- boutons "Contrôles de formulaire" (et pas "Contrôles ActiveX")
                Debug.Print btn.Name
                If btn.Caption = Me.CboBouton Then
                    btn.Caption = Me.NouveauNom
                    'Debug.Print Me.CboBouton.Column(1)   '--- n° de la ligne
                    Worksheets("Listes").Range("C" & Me.CboBouton.Column(1)) = Me.NouveauNom
                    UserForm_Initialize
                    Me.NouveauNom = ""
                End If
            Next btn
            If Me.NouveauNom <> "" Then
                MsgBox "Changement non réalisé: sur cette feuille" & vbLf & _
                       "il n'y a pas de bouton ayant '" & "'" & Me.CboBouton & "'" & vbLf & _
                       "comme libellé!", _
                       vbExclamation, "Anomalie"
            End If
        End If
    End Sub
     
    '--- le déroulant CboList comporte 2 colonnes (ColumnCount: 2, ColumnWidths: 100pt ;0pt)
    '--- n° des colonnes: 0 = première, 1 = deuxième
     
    Private Sub UserForm_Initialize()
        Dim wshListes As Worksheet
        Dim Ligne As Long
        Set wshListes = Worksheets("Listes")
        Me.CboBouton.Clear
        Ligne = 2
        While wshListes.Range("A" & Ligne) <> ""
            If wshListes.Range("A" & Ligne) = ActiveSheet.Name Then
                If wshListes.Range("B" & Ligne) = "Divers" Then
                    'Debug.Print Ligne, wshListes.Range("A" & Ligne), wshListes.Range("C" & Ligne)
                    Me.CboBouton.AddItem wshListes.Range("C" & Ligne)           '--- ajoute nouvelle valeur (en colonne n°0)
                    Me.CboBouton.Column(1, Me.CboBouton.ListCount - 1) = Ligne  '--- complète avec n° de la ligne (en colonne n°1)
                    'Debug.Print Me.CboBouton.ListCount, Me.CboBouton.ListIndex
                End If
            End If
            Ligne = Ligne + 1
        Wend
        Set wshListes = Nothing
        '--- note: pas de vérification que les boutons existent vraiment dans les feuilles
    End Sub
    Quelques remarques complémentaires dans le fichier attaché.

    Cordialement.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/12/2017, 09h00
  2. [XL-2010] Renvoi à une valeur variable dans une MsgBox
    Par benadry dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/03/2014, 18h42
  3. Réponses: 2
    Dernier message: 20/02/2013, 19h17
  4. afficher valeur variable dans une gridview
    Par fido1 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/09/2008, 11h48
  5. [VB.net 2005] Définir une valeur nulle dans ma comboBox
    Par WriteLN dans le forum Framework .NET
    Réponses: 4
    Dernier message: 04/04/2008, 17h11

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