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 SubMa question est : pourquoi ça ne marche pas ?
Merci d'avance pour vos réponses
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:=xlSortNormalMessage : 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à...
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 ...
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_lignesLa 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...