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 :

Alimenter une ComboBox avec une plage SpecialCells(xlCellTypeVisible) [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut Alimenter une ComboBox avec une plage SpecialCells(xlCellTypeVisible)
    Bonjour le forum,

    Je rencontre un problème, je n'arrive pas à alimenter ma ComboBox_2 en fonction d'un AutoFilter déjà réalisé.

    Je souhaiterai, qu'en fonction du filtre qui a été effectué sur une valeur, résultant d'une ComboBox_1, la ComboBox_2 soit dans un premier temps vidée (ça c'est pas trop compliqué ça va ) et qu'elle soit par la suite alimentée grâce à la plage que je sélectionne sous forme de SpecialCells.

    Ma ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Set CBR = WbO.Range(WbO.Cells(2, 13), WbO.Cells(derLig, 13)).SpecialCells(xlCellTypeVisible)
    Elle sélectionne correctement la range en sortie du Filtre. C'est cette Range-là que j'aimerai utiliser pour alimenter ma ComboBox_2 SANS DOUBLON. J'arrive à l'alimenter avec doublons, mais sans je n'y arrive pas du tout. J'ai essayé avec un "Scripting.Dictionary" mais j'ai une erreur qui apparaît sur la ligne "For i = LBound(a) To UBound(a)" ... (erreur sur la variable a). Je l'ai définie en tant qu'Integer.

    Pourtant, j'ai initialisée mes 2 ComboBox à l'origine grâce au Scripting.Dictionary et cela fonctionne. Serait-il possible que l'AutoFilter et/ou le SpecialCells(xlCellTypeVisible) ne soient pas compatibles avec une alimentation de ComboBox à valeur unique ? Même si j'en doute fortement, et qu'il devrait s'agir à 99.99% d'une erreur d'écriture de ma part...

    Auriez-vous des exemples d'alimentation de ComboBox par une plage auto-filtrée ?

    Merci et bonne journée

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Le plus simple, pour alimenter une ComboBox sans doublons, est d'utiliser ses propriétés ListIndex et AddItem.

    Un peu comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim C As Range, CBR As Range
        Set CBR = WbO.Range(WbO.Cells(2, 13), WbO.Cells(derLig, 13)).SpecialCells(xlCellTypeVisible)
        For Each C In CBR
            ComboBox1.Value = C.Value 'On ajoute la valeur de la cellule dans la ComboBox
             'si la valeur existe dans une combobox, ListIndex sera différent de -1
            If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem C.Value 'Alors si ListIndex = -1, on ajoute la valeur
        Next

  3. #3
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour pijaku,

    et surtout merci ! Cela fonctionne du tonnerre ! La mise à jour se fait automatiquement, un énorme merci. Je ne savais plus où en donner de la tête

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par révèr Voir le message
    je n'arrive pas à alimenter ma ComboBox_2 en fonction d'un AutoFilter déjà réalisé.
    Si tu as ta sélection, il devrait suffire de l'affecter au combo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ComboBox_2.list = WbO.Range(WbO.Cells(2, 13), WbO.Cells(derLig, 13)).SpecialCells(xlCellTypeVisible)

  5. #5
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour anasecu,

    Citation Envoyé par anasecu Voir le message
    Bonjour,


    Si tu as ta sélection, il devrait suffire de l'affecter au combo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ComboBox_2.list = WbO.Range(WbO.Cells(2, 13), WbO.Cells(derLig, 13)).SpecialCells(xlCellTypeVisible)
    Ce qui n'aurait pas résolu le problème puisque dans cette range, j'ai des doublons. La liste aurait contenu ces-dits doublons, non ?

  6. #6
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Pour être précis, on ne peux pas affecter un Range à la List d'une ComboBox.
    Il faut lui attribuer les valeurs du Range, soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox_2.list = WbO.Range(WbO.Cells(2, 13), WbO.Cells(derLig, 13)).SpecialCells(xlCellTypeVisible).Value
    ça fonctionne, c'est rapide, simple, mais n'enlève effectivement pas les doublons...

  7. #7
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    C'était justement ça que je voulais éviter, les doublons. J'avais déjà réussi à l'alimenter en prenant en compte les doublons mais ce n'était pas le but recherché. Merci quand même pour ta proposition

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Laméthode la plus rapide pour alimenter un combobox ou ListBox sans doublons.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Initialize()
      Set mondico = CreateObject("Scripting.Dictionary")
      mondico.comparemode = vbTextCompare
      Tbl = [liste].Value
      For i = LBound(Tbl) To UBound(Tbl)
       If Tbl(i, 1) <> "" Then mondico(Tbl(i, 1)) = ""
      Next i
      Me.ComboBox1.List = mondico.keys
    End Sub
    Avec Tri

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
      Set mondico = CreateObject("Scripting.Dictionary")
      mondico.comparemode = vbTextCompare
      Tbl = [liste].Value
      For i = LBound(Tbl) To UBound(Tbl)
       If Tbl(i, 1) <> "" Then mondico(Tbl(i, 1)) = ""
      Next i
      '--avec tri
      temp = mondico.keys
      Tri temp, LBound(temp), UBound(temp)
      Me.ComboBox1.List = temp
    End Sub
    Pour des grandes listes, la méthode #2 est lente.

    Boisgontier
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/01/2019, 02h52
  2. [XL-2010] alimenter une Combobox sur une feuille avec une plage nommée
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/08/2015, 15h21
  3. Réponses: 2
    Dernier message: 30/05/2012, 18h14
  4. [XL-2010] Alimenter un ComboBox avec le contenu d'une colonne d'un fichier xls externe
    Par cryptoboss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/05/2012, 14h56
  5. Remplir une ComboBox avec une plage de cellule
    Par zazaraignée dans le forum Contribuez
    Réponses: 2
    Dernier message: 02/03/2012, 18h07

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