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 :

combo filtré dans userform et Dictionnary [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut combo filtré dans userform et Dictionnary
    Bonjour,
    Dans une UserForm j'ai 2 combo cboGrp et cboRech
    Ils sont définis dans Initialize par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub InitComboBox()
    With Me.cboGrp
    .ColumnHeads = False: .ColumnCount = 1: .ColumnWidths = "200"
    End With
     With Me.cboRech
     .ColumnHeads = False: .ColumnCount = 9: .ColumnWidths = "0;0;200;0;;;;;"
     End With
     InitRowSource '
    End Sub
    et...
    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
    Private Sub InitRowSource()
    Dim Dico, Arr, Tbl, i
       TriBD 'algo quick sort
       DoEvents
       With Me.cboGrp
       Arr = [BDSh].Value
       Set Dico = CreateObject("Scripting.Dictionary")
       For i = 1 To UBound(Arr) ' on explore la colonne de niveau 1
          Dico(Arr(i, 2)) = ""  ' on ajoute l'élément de la famille au dictionnaire
       Next i
       Tbl = Dico.keys
       TriX Tbl, LBound(Tbl), UBound(Tbl)
       .List = Tbl
       End With
       With Me.cboRech
          .RowSource = [BD].Address(external:=True)
          .ListIndex = -1
       End With
    End Sub
    jusque là ça baigne...
    Là ou ça se corse c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub cboGrp_Click()
    Dim Dico, i, Arr
      Me.cboRech.Clear 'Cette ligne provoque une erreur d'exécution -2147467259(80004005) Erreur non répertoriée
      Set Dico = CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(Arr)                               ' on explore la colonne de niveau 1
        If Arr(i, 1) = Me.cboGrp Then Dico(Arr(i, 2)) = ""   ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
      Next i
      Me.cboRech.List = Dico.keys
    End Sub
    Bon... de toute façon je ne suis pas fan de cette soluce à cause du nombre de champs dans la BD
    Je préfèrerai redéfinir cboRech avec le contenu de la BD filtrée. (Donc avec List et non pas par RowSource)

    C'est possible ?

    Le RowSource étant modifié avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    '...
       With Me.cboRech
          .List = [BDSh].Value
          .ListIndex = -1 ' Force affichage vide
       End With
    '...
    j'ai alors essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub cboGrp_Click()
    Dim Dico, i, Arr
      Me.cboRech.Clear
      Arr = [BDSh].Value
      Set Dico = CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(Arr)                               ' on explore la colonne de niveau 1
        If Arr(i, 2) = Me.cboGrp Then Dico(Arr(i, 3)) = ""   ' C'est là que ça coince je ne sais pas définir mon Dico pour récupérer toute la ligne de Arr
    'Je suppose qu'un Array est nécessaire mais là je plafonne...
      Next i
      Me.cboRech.List = '( ?? Dico.keys ??) Récupérer les valeurs du Dico dans un Tableau ???
    End Sub
    Grave !

    Avez vous une solution ?
    A+

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.cboRech.Clear 'Cette ligne provoque une erreur d'exécution -2147467259(80004005) Erreur non répertoriée
    Il n'y a pas de méthode clear dans un ComboBox

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Bonjour,
    Il va falloir signaler cela à Silkyroad alors !

    Nom : ClearCombo.jpg
Affichages : 156
Taille : 62,8 Ko

    Bon c'est pas grave... J'ai trouvé(Apparemment !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub cboGrp_Click()
    Dim Dico, i, Arr
      Me.cboRech.Clear
      Arr = [BDSh].Value
      Set Dico = CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(Arr) ' on explore la colonne de niveau 2
       If Arr(i, 2) = Me.cboGrp.Value And Not Dico.exists(Arr(i, 3)) Then
         Dico.Item(Arr(i, 3)) = Array(Arr(i, 1), Arr(i, 2), Arr(i, 3), Arr(i, 4), Arr(i, 5), Arr(i, 6), Arr(i, 7), Arr(i, 8), Arr(i, 9))
       End If
      Next i
      Me.cboRech.List = Application.Transpose(Application.Transpose(Dico.items))
    End Sub
    Merci quand même !
    A+

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Citation Envoyé par clementmarcotte Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.cboRech.Clear 'Cette ligne provoque une erreur d'exécution -2147467259(80004005) Erreur non répertoriée
    Il n'y a pas de méthode clear dans un ComboBox
    depuis quand clémentmarcotte ???

    pour en revenir a la demande j'ai pas pigé tes intentions
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par patricktoulon Voir le message
    depuis quand clémentmarcotte ???
    Je ne sais pas. Tout ce que je sais c'est que la méthode n'est pas indiquée dans la page mentionnée plus haut, ni dans celle-ci:

    https://docs.microsoft.com/fr-fr/off...x%28methods%29

    Mais, ce soir (chez-moi) MSDN, c'est de la merde toujours plantée.

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

Discussions similaires

  1. Filtre dans Userform
    Par fsoyez dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/10/2012, 20h49
  2. [WD15] filtre dans combo
    Par roicharlie dans le forum WinDev
    Réponses: 6
    Dernier message: 30/06/2012, 14h18
  3. [XL-2010] Filtre automatique dans userform
    Par duplaly dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 20/07/2011, 01h42
  4. [XL-2010] Filtre dans userform
    Par Pierre67 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/09/2010, 19h04
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 11h43

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