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 :

Probleme d'alimenter une liste box


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 69
    Par défaut Probleme d'alimenter une liste box
    Salut le forum
    dans mon fichier j'ai 1userform ,2 combobox,1listebox
    je choisie l'année du combo1
    et puit la classe du combo2 pour aliment listebox
    la vient le probleme dans liste s'affiche tout les noms qui se trouve dans tout les année;
    je souhaite ds la liste affiche les noms de la classe choisie par l'année

    merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    Bonsoir,
    avec ces modifications
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private Sub ComboBox1_Change()
    Dim cd As Range 'déclare la variable cd (Cellule de Début)
    Dim cf As Range 'déclare la variable cf (Cellule de Fin)
    Dim col As Collection 'déclare la variable col (COLlection)
    Dim cel As Range 'déclare la variable cel (CELlule)
    Me.ListBox1.Clear
    ComboBox2.Clear 'vide la ComboBox2
    'condition : si l'élément sélectionné est le dernier de la liste
    If Me.ComboBox1.ListIndex = Me.ComboBox1.ListCount - 1 Then
        'définit la cellule de début (numéro de la ligne de l'année sélectionnée), colonne C
        Set cd = Cells(Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1), 5)
        'définit la cellule de fin (dernière ligne éditée de la colonne C)
        Set cf = Range("E65536").End(xlUp)
    Else 'sinon
        'définit la cellule de début (numéro de la ligne de l'année sélectionnée), colonne C
        Set cd = Cells(Me.ComboBox1.List(Me.ComboBox1.ListIndex, 1), 5)
        'définit la cellule de fin (numéro de la ligne de l'année suivante -1), colonne C
        Set cf = Cells(Me.ComboBox1.List(Me.ComboBox1.ListIndex + 1, 1) - 1, 5)
    End If 'fin de la condition
    
    'alimentation de la collection col sans doublons
    Set col = New Collection 'définit la collection col
    For Each cel In Range(cd, cf) 'boucle sur toutes les cellules cel comprises entre la cellule de début et la celllule de fin
     On Error Resume Next 'en cas d'erreur passe à la cellule suivante
        col.Add cel.Value, CStr(cel.Value) 'ajoute la valeur de la cellule à la collection (un doublon provoque une erreur
    Next cel 'prochaine cellule cel de la boucle
    
    'alimentation de la ComboBox2
    For x = 1 To col.Count 'boucle sur tous les éléments de la collection
        ComboBox2.AddItem col(x) 'ajoute l'élément de la collection à la combobox2
    Next x 'prochain élément de la collection
    
    'ComboBox2.ListIndex = 0 'affiche le premier élément de la ComboBox2
    
    
    End Sub
    
    Private Sub ComboBox2_Change()
    Dim C As Range, annee As String
    If ComboBox2 <> "" Then
     Me.ListBox1.Clear
    
     For Each C In Range("E2:E" & Range("E65536").End(xlUp).Row)
     annee = ActiveSheet.Cells(C.Row, 1)
      If (C.Text = ComboBox2) And (annee = ComboBox1) Then
       Me.ListBox1.AddItem C
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = C.Offset(, -4) 'num
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = C.Offset(, -2) '*
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = C.Offset(, -1) '*
      End If
     Next
     End If
    End Sub
    
    Private Sub UserForm_Initialize()
    Dim C As Range, annee As String
    Me.ComboBox1.Clear
    For Each C In Range([A2], [A65000].End(xlUp))  ' liste non triée
         If (C <> "") And (C <> annee) Then
          Me.ComboBox1.AddItem C
          Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = C.Row
         End If
         annee = C   Next C
    End Sub
    les années remplissent la colonne 1

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 69
    Par défaut
    Salut forum
    Merci Helas pour votre modification

    (les années remplissent la colonne 1 )
    il ny a pas une autre méthode sans remplit la colonne 1
    merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/04/2009, 19h23
  2. selectionner le dernier element d'une liste box
    Par adilou1981 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/03/2005, 10h19
  3. Largeur d'une liste box
    Par poiiop dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/09/2004, 23h47
  4. Passer a la ligne ds une list box
    Par schnito dans le forum MFC
    Réponses: 11
    Dernier message: 19/02/2004, 13h11
  5. Réponses: 2
    Dernier message: 17/08/2003, 20h07

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