Selection d'une liste sur Frame Click

Bonjour,

Suite à la sélection d'un bouton sur un Frame, je souhaite faire apparaître une liste sur une listebox (sans répétition avec 3 possibilités de choix dans le Frame).

Voici mon code

Private Sub Frame_attribution_Click()

    'déclaration variable dictionnaire et nombre de ligne article
    Dim oListe_articles As Object
    Dim nb_lignes As Integer
    Dim rg As Range

    'création objet dictionnaire
    Set oListe_articles = CreateObject("Scripting.Dictionary")
    Set rg = Range("bdd_article")

    'détermination du nombre de lignes article
    nb_lignes = rg.End(xlUp).Row

    'remplissage de combobox article en fonction de frame attribution
    With ComboBox_article
        'Condition si attribution en stock
        If attribution = "Stock" Then 'si vrai vérifier le contenu de l'attribution existante
            'création de la boucle
            For i = 1 To nb_lignes
                If rg.Cells(i, 10) = "Stock" Or "Vol" Then 'si vrai do nothing condition suivante
                    'Condition si article existe dans dictionnaire
                    If Not oListe_articles.exists(rg.Cells(i, 1).Value) Then 'si vrai
                        'Ajout de la valeure de la cellule dans le dictionnaire et le combobox
                        oListe_articles.Add rg.Cells(i, 1).Value, 0
                        .AddItem rg.Cells(i, 1).Value
                    Else
                    End If
                Else
                End If
            Next i
        'Si attribution à agent
        ElseIf attribution = "Agent" Then
            'création de la boucle
            For i = 1 To nb_lignes
                If rg.Cells(i, 10) = "Agent" Or "Vol" Then 'si vrai do nothing condition suivante
                    'Condition si article existe dans dictionnaire
                    If Not oListe_articles.exists(rg.Cells(i, 1).Value) Then 'si vrai
                        'Ajout de la valeure de la cellule dans le dictionnaire et le combobox
                        oListe_articles.Add rg.Cells(i, 1).Value, 0
                        .AddItem rg.Cells(i, 1).Value
                    Else
                    End If
                Else
                End If
            Next i
        'Si attribution à maintenance
        ElseIf attribution = "Maintenance" Then 'si vrai do nothing condition suivante
            'création de la boucle
            For i = 1 To nb_lignes
                If rg.Cells(i, 10) = "Maintenance" Or "Vol" Then
                    'Condition si article existe dans dictionnaire
                    If Not oListe_articles.exists(rg.Cells(i, 1).Value) Then 'si vrai
                        'Ajout de la valeure de la cellule dans le dictionnaire et le combobox
                        oListe_articles.Add rg.Cells(i, 1).Value, 0
                        .AddItem rg.Cells(i, 1).Value
                    Else
                    End If
                Else
                End If
            Next i
        Else
        End If
    End With

End Sub

Ma question est : pourquoi ça ne marche pas ?

Merci d'avance pour vos réponses

14test-2.xlsm (52.44 Ko)

Bonjour Seblanc, bonjour le forum,

Déjà j'ai un bug à l'initialisation... Ensuite avec ta base qui va jusqu'à la dernière ligne, Dim nb_lignes As Integer tu auras dépassement de capacité. Et surtout, nb_lignes = rg.End(xlUp).Row renvoie 1 donc tu boucles de 1 à 1 avec, For i = 1 To nb_lignes. Plus bas dans le code tu écris : If rg.Cells(i, 10) = "Stock" Or "Vol" Then. Il te faut écrire : If rg.Cells(i, 10) = "Stock" Or rg.Cells(i, 10) = "Vol" Then. Je me suis arrêté là...

Bonjour ThauThème,

Merci pour les informations surtout pour pour la condition Or dont j'avais un gros doute sur l'écriture !!

Il me semblait que pour les Integer les valeurs allaient de -2 147 483 648 à 2 147 483 647, c'est largement suffisant non ? J'ai besoin uniquement de la dernière ligne vide pour limiter la boucle.

Tu as un bug à l'initialisation ? Lequel ? Je n'ai rien qui apparaît lorsque je lance la macro !!

De plus, lorsque je sélectionne un bouton dans le frame, je n'ai pas ma liste qui se crée dans Combobox_article ... pourquoi selon toi ?

Re,

Moi j'ai un bug à l'initialisaion de l'userForm sur la ligne :

ActiveWorkbook.Worksheets("Article").ListObjects("bdd_article").Sort. _
        SortFields.Add2 Key:=Range("bdd_article[Article]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal

Message : Erreur 438 : propriété ou méthode non gérée par ce objet

À ce sujet nous attendons de ta part le même genre de renseignement plutôt qu'un Ça ne marche pas et dem***dez-vous... Tu n'as ni signalé le message d'erreur ni la ligne qui plantait.

Integer va de -32 768 et 32 767. C'est le type Long ( de -2 147 483 648 et 2 147 483 647) qu'il te faut pour les 1 048 576 lignes d'Excel.

Comme je te l'ai dit dans mon premier post, ça ne marche pas car tu boucles de 1 à 1 vu que nb_lignes = rg.End(xlUp).Row renvoie 1.

J'ai modifié le code de ton fichier et ça alimente bien la Combobox ComboBox_article mais j'ai des bug au changement toujours avec ces histoire de tri (comme à initialisation)... Je ne suis pas allé au-delà...

15seblanc-ep-v01.xlsm (51.71 Ko)

Merci ThauThème et désolé de ne pas avoir été clair dans mes explications, ce n'était pas du tout dans ce but là !!

Je n'ai pas de message d'erreur, ni de numéro de ligne qui apparaisse sur mon VBA ... il doit y avoir une option que je n'ai pas activée.

Très astucieux l'appel de procédure Alim_Comb à chaque clic et ça fonctionne très bien maintenant.

Par contre, je n'ai pas de message d'erreur concernant le tri.

Comment est-ce que tu vérifies que le numéro de ligne renvoyé est 1 ?

Re,

Je fait tourner la macro pas à pas avec la touche [F8] est quand la ligne est lue je mets le pointeur sur la variable qui me renvoie sa valeur. Tu peux aussi utiliser :

Debug.Print nb_lignes

La valeur de la variable s'écrira dans la fenêtre d'exécution...

Ok merci pour ces infos ThauThème,

Je n'ai pas l'habitude d'utilliser la fonction select case donc j'ai une question concernant la ligne 55

Select Case attribution
    Case "Stock"
    For I = 2 To DL
        If TV(I, 10) = "Agent" Or TV(I, 10) = "Maintenance" Then D(TV(I, 1)) = ""
    Next I
    Case "Agent"
    For I = 2 To DL
        If TV(I, 10) = "Stock" Or TV(I, 10) = "Maintenance" Then D(TV(I, 1)) = ""
    Next I
    Case "Maintenance"
    For I = 2 To DL
        If TV(I, 10) = "Agent" Or TV(I, 10) = "Stock" Then D(TV(I, 1)) = ""
    Next I
End Select

"attribution" est la variable déclarée en ligne 1 ou le nom de la colonne de la feuille article ?

Re,

C'est le nom de la variable...

Rechercher des sujets similaires à "selection liste frame click"