Capacité combobox

Résolu/Fermé
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017 - 25 janv. 2017 à 11:20
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017 - 30 janv. 2017 à 08:57
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 .



A voir également:

11 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
25 janv. 2017 à 11:39
Bonjour,

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

0
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017
Modifié par pijaku le 26/01/2017 à 08:00
Oui j'ai essayé, mais ça beug toujours.

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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié par cs_Le Pivert le 25/01/2017 à 15:00
Voici la solution pour remplir une Combobox sans que cela bug:

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
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704
25 janv. 2017 à 16:08
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

.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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017
25 janv. 2017 à 16:14
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
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704
25 janv. 2017 à 16:19
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...
0
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017 > f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024
25 janv. 2017 à 16:23
En effet je ne peut mettre le fichier. c'est un fichier confidentiel.
Désolé, j’apprécie votre proposition.

Mais je ferai un exemple et je le mettrai sur le Ci joint.

Merci encore une fois.
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704 > alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017
Modifié par f894009 le 25/01/2017 à 16:29
Re,

Combobox (excel2013): plus de 65000 item ("lignes")

Le fichier, avec votre code, devra avoir 4000 lignes
0
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017 > f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024
Modifié par pijaku le 26/01/2017 à 08:01
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 :

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.
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704 > alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017
25 janv. 2017 à 16:45
Re,

mon code est le suivant :
Ben oui, le meme que precedemment et que j'ai teste voir post 4.
Il manque d'ailleur les codes de :
Alim_Combo 1

et
Alim_Combo 2, ComboBox1.Value 
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
26 janv. 2017 à 08:06
Bonjour tout le monde,

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 ?
0
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017
26 janv. 2017 à 08:26
Bonjour pijaku;

Merci d'abord pour ta réponse.
1- J'ai utilisé ton code et ça marche toujours pas.
2-tous le code que j'ai utilisé est dans le message d'avant.
3-Oui j'ai doublons dans les 3 colonnes.

Cordialement.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745 > alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017
26 janv. 2017 à 08:35
tous le code que j'ai utilisé est dans le message d'avant
NON. Pas celui de la procédure Alim_Combo...
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
26 janv. 2017 à 08:41
Bonjour tout le monde,

alberkrimo
mon code est le suivant :
Non, incomplet, il manque le code de deux procedures: Alim_Combo 1 et 2
Et le fichier model avec TOUT votre code, c'est pour quand ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
26 janv. 2017 à 08:50
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
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704
26 janv. 2017 à 09:04
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
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 ....
0
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017
26 janv. 2017 à 09:07
"Voilà a toi de l'adapter à tes besoins "

Bonjour Merci, j'ai vu votre réponse. je suis que débutant en Vba. donc je n'ai pas pu adapter votre code.

Merci
0
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017
26 janv. 2017 à 09:03
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
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704
Modifié par f894009 le 26/01/2017 à 09:39
Re,

MON FICHIER exemple qui ressemble à mon fichier type.
Doit y avoir une difference entre ces deux fichiers sinon ca marcherait aussi!

Vous ne recuperez qu'UN seul "joueur", normal meme si c'est le meme pour le "groupe" ?

Suite:
Pige, sans doublons
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
26 janv. 2017 à 09:39
Voici la procédure Alim_Combo :
'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...
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704
Modifié par f894009 le 26/01/2017 à 10:27
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
.Value = Ws.Range("C" & J)

pas utile
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704
26 janv. 2017 à 11:46
Re,

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"
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
26 janv. 2017 à 12:02
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 :
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.
0
f894009 Messages postés 17187 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 1 mai 2024 1 704 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
Modifié par f894009 le 26/01/2017 à 12:28
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
0
alberkrimo Messages postés 20 Date d'inscription samedi 3 janvier 2015 Statut Membre Dernière intervention 31 mai 2017
30 janv. 2017 à 08:57
Parfait ça marche nickel.

Désolé du retard de ma réponse. Merci pour votre aide.

Cordialement.
0