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 :

Remplissage conditionnel d'une combobox sur une partie seulement de la base


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 48
    Points : 24
    Points
    24
    Par défaut Remplissage conditionnel d'une combobox sur une partie seulement de la base
    Bonjour, je coince sur ce petit problème :
    J'ai un tableau :
    Colonne A :
    Noms
    Durand
    Dupont
    Sanchez
    Rivoire
    Bertin
    Je remplis un ComboBox avec.
    En colonne D, j'ai :
    Classe
    302
    302
    606
    407
    407
    Si je choisis un par un tous noms, tout fonctionne. Mais comment faire pour choisir la classe et qu'ensuite, le combobox ne s'alimente qu'avec les noms correspondant à cette classe ?
    Merci par avance.
    Voici le petit bout de code :

    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
     
    Option Explicit
    Dim Lig As Long
    Dim niv As Integer
     
     
    Private Sub UserForm_Initialize()
    Dim t As Object
    Dim c As Range
     
     
    Set t = CreateObject("Scripting.Dictionary")
    'Remplissage de la ComboBox1 sans doublons
    With Sheets("Base")
       For Each c In .Range("A2", .Cells(Rows.Count, 1).End(xlUp))
          t.Item(c.Value) = c.Value
       Next c
    End With
    Me.ComboBox1.List = t.items
    Set t = Nothing
    'Définition de la ComboBox2 à 2 colonnes
    With Me.ComboBox2
       .ColumnCount = 2
       .ColumnWidths = .Width - 2 & ";0"
    End With
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim c As Range
     
    Application.ScreenUpdating = False
    Me.ComboBox2.Clear
    'filtrage de la feuille de donnée sur la vaaleur de combo et remplissage
    'de combo2 par les valeurs des cellules filtées et le numéro de ligne
    With Sheets("Base")
       .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).AutoFilter field:=1, Criteria1:=Me.ComboBox1.Value
       For Each c In .Range("B2:B" & .Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
          With Me.ComboBox2
             .AddItem c.Value
             .List(.ListCount - 1, 1) = c.Row
          End With
       Next c
       .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).AutoFilter
    End With
    End Sub

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,

    Je t'avoue ne pas avoir testé, mais au lieu de filtrer et utiliser la visibilité des lignes, je suis parti sur l'idée de tester la valeur de la colonne D suivant la ComboBox1, vu que tu as utilisé un for Each, je passe par Offset:

    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
    Option Explicit
    Dim Lig As Long
    Dim niv As Integer
     
     
    Private Sub UserForm_Initialize()
    Dim t As Object
    Dim c As Range
     
     
    Set t = CreateObject("Scripting.Dictionary")
    'Remplissage de la ComboBox1 sans doublons
    With Sheets("Base")
       For Each c In .Range("A2", .Cells(Rows.Count, 1).End(xlUp))
          t.Item(c.Value) = c.Value
       Next c
    End With
    Me.ComboBox1.List = t.items
    Set t = Nothing
    'Définition de la ComboBox2 à 2 colonnes
    With Me.ComboBox2
       .ColumnCount = 2
       .ColumnWidths = .Width - 2 & ";0"
    End With
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim c As Range
     
    Application.ScreenUpdating = False
    Me.ComboBox2.Clear
    'filtrage de la feuille de donnée sur la vaaleur de combo et remplissage
    'de combo2 par les valeurs des cellules filtées et le numéro de ligne
    With Sheets("Base")
     
       For Each c In .Range("B2:B" & .Cells(Rows.Count, 1).End(xlUp).Row)
         If c.offset(0,2).value=Me.ComboBox1.Value then
               With Me.ComboBox2
                  .AddItem c.Value
                  .List(.ListCount - 1, 1) = c.Row
               End With
         End if
       Next c
       .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).AutoFilter 'Je sais pas si c'est encore nécessaire...
    End With
    End Sub
    En espérant avoir bien compris ton code

    A+
    N'oubliez pas le si votre problème est solutionné.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 48
    Points : 24
    Points
    24
    Par défaut
    Mille mercis pour cette réponse, mais je crains de n'avoir pas été assez clair, en ne donnant pas suffisemment de détails.
    Je recommence :
    Une école, des classes, et dans les classes, des élèves.
    Une feuille excel, des colonnes : Noms, Prénoms, Classe (colonnes A, B, D).
    Des ComboBox qui se remplissent sur ces colonnes :
    ComboBox1 pour les noms.
    Combobox2 fonction du ComboBox1 pour les prénoms.
    ComboBox9 pour les classes (alimenté par ailleurs).
    Dans le cas d'une saisie générale, je choisis le nom avec ComboBox1, qui me remplit ComboBox2 pour choisir le prénom, et enfin, je choisis la classe avec le ComboBox9.
    Cela fonctionne.
    Mon problème, c'est si je souhaite ne renseigner qu'une seule classe, la 503 par exemple.
    Avec le ComboBox9, je choisis la classe 503, ce qui ne remplit le ComboBox1 qu'avec les noms de la 503, puis, je termine avec les prénoms avec le ComboBox.
    Et c'est justement ce que je n'arrive pas à faire : que le choix exprimé en colonne D (la classe), ne remplisse le ComboBox1 qu'avec les noms de la colonne A ayant cette classe inscrite en colonne D.
    C'est mieux ? En tous cas, j'espère que cela permettra de me dépanner...
    Mille mercis encore par avance.
    CS.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 48
    Points : 24
    Points
    24
    Par défaut
    Toujours pas de réponse... personne ne voit de solution à mon problème ?
    Au secours ! Aidez-moi s'il vous plaît !
    Merci par avance.
    CS.

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Valeur Par défaut sur une Combobox attaché à une collection
    Par olufade dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 26/08/2009, 17h47
  3. Détecter le click sur une combobox d'une datagridview
    Par Delphi-ne dans le forum Windows Forms
    Réponses: 11
    Dernier message: 21/04/2009, 11h22
  4. Réponses: 2
    Dernier message: 30/10/2008, 13h28
  5. [VBA-E] Vider une combobox sur une feuille
    Par yogyx dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/03/2007, 17h19

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