Capacité combobox
Résolu
alberkrimo
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
-
alberkrimo Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
alberkrimo Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'aurai besoin d'aide svp.
j'ai construit un formulaire avec une cascade de 3 combobox.
le problème c'est que quand je met ma liste d'alimentation des combox qui est assez importante (environ 4000) lignes, le formulaire ne s'ouvre pas et le fichier excel beug.
Par contre quand je met une centaine de ligne, il marche mais prend un laps de temps pour que le formulaire s'affiche.
Le formulaire marche parfaitement bien quand je met une liste de 10 lignes.
Si quelqu'un pourrait m'aider.
Merci par avance .
J'aurai besoin d'aide svp.
j'ai construit un formulaire avec une cascade de 3 combobox.
le problème c'est que quand je met ma liste d'alimentation des combox qui est assez importante (environ 4000) lignes, le formulaire ne s'ouvre pas et le fichier excel beug.
Par contre quand je met une centaine de ligne, il marche mais prend un laps de temps pour que le formulaire s'affiche.
Le formulaire marche parfaitement bien quand je met une liste de 10 lignes.
Si quelqu'un pourrait m'aider.
Merci par avance .
A voir également:
- Capacité combobox
- Test capacité pc - Guide
- Créer un compte yahoo mail gratuit avec capacité de - Télécharger - Mail
- Yahoo Mail France : comment créer une adresse mail gratuite - Guide
- Capacité disque dur externe - Guide
- Capacité google drive gratuit - Guide
11 réponses
Bonjour,
Fais un essai comme ceci, tu verras qu'au dessus de 254 il y a dépassement de capacité!
Fais un essai comme ceci, tu verras qu'au dessus de 254 il y a dépassement de capacité!
Dim i As Byte For i = 1 To 254 ComboBox1.AddItem "Ligne" & i Next i
Oui j'ai essayé, mais ça beug toujours.
Voici mon Code :
MERCI POUR VOTRE Réponse
Voici mon Code :
Option Explicit Dim Ws As Worksheet Dim NbLignes As Integer Private Sub Frame1_Click() End Sub Private Sub UserForm_Initialize() 'Définit la feuille contenant les données Set Ws = Worksheets("Feuil1") 'Définit le nombre de lignes dans la colonne A NbLignes = Ws.Range("A5000").End(xlUp).Row 'Remplissage du ComboBox1 Alim_Combo 1 End Sub Private Sub ComboBox1_Change() 'Remplissage Combo2 Alim_Combo 2, ComboBox1.Value End Sub Private Sub ComboBox2_Change() Dim J As Long 'Remplissage Combo3 'Alim_Combo 3, ComboBox2.Value With Me.ComboBox3 .Clear If Me.ComboBox2.ListIndex = -1 Then Exit Sub For J = 2 To NbLignes If CStr(Ws.Range("A" & J)) = Me.ComboBox1 And CStr(Ws.Range("B" & J)) = Me.ComboBox2 Then .Value = Ws.Range("C" & J) If .ListIndex = -1 Then .AddItem Ws.Range("C" & J) End If Next J If .ListCount = 1 Then .ListIndex = 0 Else .ListIndex = -1 End With End Sub
MERCI POUR VOTRE Réponse
Voici la solution pour remplir une Combobox sans que cela bug:
Voilà a toi de l'adapter à tes besoins
@+ Le Pivert
Option Explicit Private Sub UserForm_Initialize() Dim Cell As Range Dim Unique As New Collection Dim Valeur As Range Dim i As Integer Dim j As Integer For j = 1 To 1000 Range("A" & j).Value = "item" & j 'rempli la colonne pour essai Next j 'Récupère la derniere ligne non vide dans la colonne A i = Range("A65536").End(xlUp).Row On Error Resume Next 'boucle sur les cellules de la colonne A For Each Cell In Range("A1:A" & i) 'Stocke les données dans une collection '(La collection n'accepte que des données uniques et permet donc ' de filtrer facilement les doublons). Unique.Add Cell, CStr(Cell) Next Cell On Error GoTo 0 'Boucle sur le contenu de la collection pour alimenter la ComboBox For Each Valeur In Unique Me.ComboBox1.AddItem Valeur Next Valeur End Sub
Voilà a toi de l'adapter à tes besoins
@+ Le Pivert
Bonjour a vous deux
alberkrimo:
Oui j'ai essayé, mais ça beug toujours.
Oui, c'est quoi le beug ?
J'ai teste votre code, la combobox3 ne peut avoir qu'un seul item vu la programmation: listindex passe a 0 a la premiere egalite de votre test
Pour la recherche des lignes, y a un peu plus rapide si vous avez 4000 lignes
alberkrimo:
Oui j'ai essayé, mais ça beug toujours.
Oui, c'est quoi le beug ?
J'ai teste votre code, la combobox3 ne peut avoir qu'un seul item vu la programmation: listindex passe a 0 a la premiere egalite de votre test
.Value = Ws.Range("C" & J) If .ListIndex = -1 Then .AddItem Ws.Range("C" & J)
Pour la recherche des lignes, y a un peu plus rapide si vous avez 4000 lignes
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Le beug c'est que le fichier excel s’arrête complétement et qu'il faut fermer tout.
je suis débutant en Vba. et j'ai cherché pas mal sur la capacité des combobox. mais je ne sais toujours pas d'ou provient le problème
Merci pour ta réponse.
cordialement
je suis débutant en Vba. et j'ai cherché pas mal sur la capacité des combobox. mais je ne sais toujours pas d'ou provient le problème
Merci pour ta réponse.
cordialement
Re,
Y aurait moyen que vous mettiez votre fichier a dispo sans donnee confidentielle, mais des donnees quand meme et coherentes (vaudrait mieux), car pas moyen de vous aider
Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
Y aurait moyen que vous mettiez votre fichier a dispo sans donnee confidentielle, mais des donnees quand meme et coherentes (vaudrait mieux), car pas moyen de vous aider
Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com
Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
mon fichier doit avoir a peu prés 4000 à 5000 lignes sur 3 colonnes, qui devront alimenter mes 3 combobox. mon code est le suivant :
Si cela peut vous éclaircir un petit peu.
Merci
cordialement.
Option Explicit Dim Ws As Worksheet Dim NbLignes As Integer Private Sub Frame1_Click() End Sub Private Sub UserForm_Initialize() 'Définit la feuille contenant les données Set Ws = Worksheets("Feuil1") 'Définit le nombre de lignes dans la colonne A NbLignes = Ws.Range("A5000").End(xlUp).Row 'Remplissage du ComboBox1 Alim_Combo 1 End Sub Private Sub ComboBox1_Change() 'Remplissage Combo2 Alim_Combo 2, ComboBox1.Value End Sub Private Sub ComboBox2_Change() Dim J As Long 'Remplissage Combo3 'Alim_Combo 3, ComboBox2.Value With Me.ComboBox3 .Clear If Me.ComboBox2.ListIndex = -1 Then Exit Sub For J = 2 To NbLignes If CStr(Ws.Range("A" & J)) = Me.ComboBox1 And CStr(Ws.Range("B" & J)) = Me.ComboBox2 Then .Value = Ws.Range("C" & J) If .ListIndex = -1 Then .AddItem Ws.Range("C" & J) End If Next J If .ListCount = 1 Then .ListIndex = 0 Else .ListIndex = -1 End With End Sub Private Sub ComboBox3_Change() End sub
Si cela peut vous éclaircir un petit peu.
Merci
cordialement.
Bonjour tout le monde,
1- Utilises plutôt, pour remplir ta ComboBox1, l'événement Activate de ton UserForm.
Comme ceci :
2- Donne nous le code de ta procédure Alim_Combo
3- As-tu des doublons dans la colonne des données que tu charges dans ta ComboBox1 ?
1- Utilises plutôt, pour remplir ta ComboBox1, l'événement Activate de ton UserForm.
Comme ceci :
Option Explicit Dim Ws As Worksheet Dim NbLignes As Integer Private Sub UserForm_Initialize() 'Définit la feuille contenant les données Set Ws = Worksheets("Feuil1") 'Définit le nombre de lignes dans la colonne A NbLignes = Ws.Range("A5000").End(xlUp).Row End Sub Private Sub UserForm_Activate() 'Remplissage du ComboBox1 Alim_Combo 1 End Sub
2- Donne nous le code de ta procédure Alim_Combo
3- As-tu des doublons dans la colonne des données que tu charges dans ta ComboBox1 ?
Depuis le début le problème se situe dans le remplissage de la comboBox.
Je lui ai donné le code pour le remplissage de nombreuses lignes.
Mais personne n'a l'air de s'en préoccuper!
https://forums.commentcamarche.net/forum/affich-34305471-capacite-combobox#3
Je lui ai donné le code pour le remplissage de nombreuses lignes.
Mais personne n'a l'air de s'en préoccuper!
https://forums.commentcamarche.net/forum/affich-34305471-capacite-combobox#3
Bonjour cs_Le Pivert,
Mais personne n'a l'air de s'en préoccuper!
Si, mais ce qui manque dans le code que cette personne presente, c'est justement deux routines de remplissage combo ce qui nous permettrait de comparer avec les propositions qui ont ete faites et peut-etre comprendre ce qui plante excel.
Ensuite, dans
le remplissage de la combobox3 peut etre long vu le code utilise, donc faut voir
Je lui ai demande un fichier, mais par -10 c'est plus long arriver ....
Mais personne n'a l'air de s'en préoccuper!
Si, mais ce qui manque dans le code que cette personne presente, c'est justement deux routines de remplissage combo ce qui nous permettrait de comparer avec les propositions qui ont ete faites et peut-etre comprendre ce qui plante excel.
Ensuite, dans
Private Sub ComboBox2_Change()
le remplissage de la combobox3 peut etre long vu le code utilise, donc faut voir
Je lui ai demande un fichier, mais par -10 c'est plus long arriver ....
Bonjour,
Impressionnant quand même, j'ai crée un fichier exemple et cela marche nickel. par ailleurs dans mon fichier, ça ne marche pas.
voici MON FICHIER exemple qui ressemble à mon fichier type.
https://www.cjoint.com/c/GAAidfbbp5l
Cordialement
Impressionnant quand même, j'ai crée un fichier exemple et cela marche nickel. par ailleurs dans mon fichier, ça ne marche pas.
voici MON FICHIER exemple qui ressemble à mon fichier type.
https://www.cjoint.com/c/GAAidfbbp5l
Cordialement
Voici la procédure Alim_Combo :
Cette procédure, un peu longuette, fonctionne toutefois très correctement sur 5000 lignes.
Donc, tu as peut être un souci dans les données de ton fichier.
Il y a d'autres méthodes de remplissage des combobox en cascade.
Si tu veux, je peux t'en faire une, fiable, mais qui sera très compliquée pour toi la maintenir...
'Procédure pour alimenter les ComboBox Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant) Dim J As Integer Dim Obj As Control 'Définit le ComboBox à remplir Set Obj = Me.Controls("ComboBox" & CbxIndex) 'Supprime les anciennes données Obj.Clear 'alimente le Combobox initial (Combobox1) If CbxIndex = 1 Then 'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne) For J = 2 To NbLignes Obj = Ws.Range("A" & J) 'Remplit le ComboBox sans doublons If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & J) Next J Else 'Alimentation conditionnelle des autres Combobox en fonction de 'ce qui est sélectionnée dans le contrôle précédent: '(La sélection du ComboBox1 définit le contenu du ComboBox2, 'La sélection du ComboBox2 définit le contenu du ComboBox3 ?etc...) For J = 2 To NbLignes If CStr(Ws.Range("A" & J).Offset(0, CbxIndex - 2)) = Cible Then Obj = Ws.Range("A" & J).Offset(0, CbxIndex - 1) If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & J).Offset(0, CbxIndex - 1) End If Next J End If 'Enlève la sélection dans le ComboBox Obj.ListIndex = -1 End Sub
Cette procédure, un peu longuette, fonctionne toutefois très correctement sur 5000 lignes.
Donc, tu as peut être un souci dans les données de ton fichier.
Il y a d'autres méthodes de remplissage des combobox en cascade.
Si tu veux, je peux t'en faire une, fiable, mais qui sera très compliquée pour toi la maintenir...
Salut a toi,
Cette procédure, un peu longuette
Oui, mais sauf erreur de ma part (apres tests quand meme), c'est long surtout pour Cb1 et parce que a chaque remplissage il y a recusivite en alternance par les evenements combobox1 et 2 change. C'est ce que je soupconne depuis le debut, entre autre.
sute:
C'est cette ligne qui pose probleme dans Alim_combo
pas utile
Cette procédure, un peu longuette
Oui, mais sauf erreur de ma part (apres tests quand meme), c'est long surtout pour Cb1 et parce que a chaque remplissage il y a recusivite en alternance par les evenements combobox1 et 2 change. C'est ce que je soupconne depuis le debut, entre autre.
sute:
C'est cette ligne qui pose probleme dans Alim_combo
.Value = Ws.Range("C" & J)
pas utile
Re,
Petite erreur c'est cette ligne qui provoque la recursivite et qui est pour moi inutile dans
D'ailleurs dans
Petite erreur c'est cette ligne qui provoque la recursivite et qui est pour moi inutile dans
Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant) 'Obj = Ws.Range("A" & J)
D'ailleurs dans
Private Sub ComboBox2_Change() .Value = Ws.Range("C" & J)est aussi "inutile"
Cette récursivité est un problème facilement gérable.
Mais, au vu du code "tortueux", le plus simple serait de tout changer...
Par contre, pour en revenir sur ce seul aspect, j'aime bien utiliser :
pour éviter les doublons... C'est tout de même beaucoup moins "onéreux" que d'utiliser dictionary ou collection.
Mais, au vu du code "tortueux", le plus simple serait de tout changer...
Par contre, pour en revenir sur ce seul aspect, j'aime bien utiliser :
ComboBox.Value = "toto" If ComboBox.ListIndex = -1 Then ComboBox.AddItem "toto"
pour éviter les doublons... C'est tout de même beaucoup moins "onéreux" que d'utiliser dictionary ou collection.
Re,
Je viens de voir qu'il ne faut pas supprimer la ligne dans Alim_combo a cause des doublons et d'accords avec le code pour eviter les dico. En effet vaudrait mieux changer
Por le moment son fichier modifie (pas vraiment beau, mais ca marche) avec un drapeau pour les alim combo
https://www.cjoint.com/c/GAAlBRgfROf
Je viens de voir qu'il ne faut pas supprimer la ligne dans Alim_combo a cause des doublons et d'accords avec le code pour eviter les dico. En effet vaudrait mieux changer
Por le moment son fichier modifie (pas vraiment beau, mais ca marche) avec un drapeau pour les alim combo
https://www.cjoint.com/c/GAAlBRgfROf