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 :

problème de filtre avec mes combobox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut problème de filtre avec mes combobox
    bonsoir le phorum

    je viens de développer une petite application de prise de RDV
    par contre j'ai malheureusement remarqué que si un filtre est ajouté sur le tableau, mes combobox ne me remontent que les données filtrées sur le tableau de la feuille de données selectionnée

    y a t'il une solutions pour ce problème ?

    merci d'avance

    david

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut
    salut le phorum

    désolé de vous relancer mais y a t'il une explication au problème que je rencontre ?

    j'ai regardé dans les propriétés des combobox pour voir s'il celles ci pouvaient être dépendantes d'un autofilter depuis le tableau excel mais non

    merci d'avance

    david

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 122
    Par défaut
    Bonjour David

    Sans le fichier qui ne fonctionne pas. Personne pour t'aider. Donc ajoute le en mode anonymisé si besoin.
    Le pb est plus souvent l'inverse que celui que tu expliques.
    Dis nous comment tu alimente le controle : .List, .RowSource, ... AddItem
    Une discussion ici https://www.developpez.net/forums/d6...gnes-masquees/

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut
    bonjour fraflt69

    merci pour ton retour
    je te joins le fichier anonymisé

    il faut cliquer sur le bouton commande RDV Patients
    comme tu pourras le constater j'ai filtré la colonne C (Groupes)

    les combobox sont alimentés par les valeurs des différentes colonnes sans doublons et triés
    a chaque choix dans une combobox la listbox élimine le données au fur et à mesure
    la listbox est donc dépendante des combobox
    cela fonctionne très bien sauf si filtre directement dans le tableau excel comme expliqué ci dessous

    comme tu pourras le constater j'ai filtré la colonne C (Groupes)
    il ne me remonte que les informations filtrés du tableau
    si on enlève ce filtre alors tout est visible

    je ne comprend pas pourquoi les filtres issus du tableau viennent interférés avec les macros du userform (combobox et listbox)

    merci d'avance si tu peux m'en expliquer la raison et surtout voir comment palier ce problème

    david
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2024
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2024
    Messages : 35
    Par défaut
    désolé de relancer le sujet mais en cherchant un peu partout aucun sujet ne traite de mon problème
    j'ai vu que la solution pouvait être de travailler depuis un tableau statique mais c'est impossible dans mon cas car ce tableau est mis à jour constamment et je ne vais pas faire une copie à chaque mise à jour dans un autre onglet
    il doit bien y avoir une solution qui doit supprimer cette corrélation entre les filtres et les combobox ?

    comme vous pouvez le voir j'ai mis mon fichier avec les macros, tout est fonctionnel et j'ai fait exprès de filtrer le tableau dans l'onglet
    vous pourrez constater que les combobox sont limitées du coup
    si vous dé-filtrez le tableau les combobox seront alimentées dans leur intégralité

    merci pour votre aide

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans le classeur que vous avez joint, il n'y a aucun affichage dans le ListBox. Que la table soit filtrée ou pas.


    Petit exemple
    ci-dessous
    Une fonction générique nommée GetListWithConditionqui renvoie la liste filtrée. (une fonction simple avec un seule critère sur une colonne)
    La procédure Main qui invoque cette fonction, lance le UserForm nommé usf_DataFiltered après avoir rempli le ListBox nommé lst_Data

    La table est un tableau structuré nommé t_Data

    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
    Function GetListWithCondition(TableName As String, _
                                  LabelName As String, _
                                  Operator As XlFormatConditionOperator, _
                                  Value1 As Variant, _
                                  Optional Value2 As Variant) As Variant
      ' Renvoie une table filtrée suivant critère
      ' Arguments
      '   Operator
      '   LabelName étiquette de colonne
      '   TableName nom de la table structurée
      '   Value1    Valeur à évaluer
      '   [Value2]  2ème valeur pour l'opérateur "entre" et "non compris entre"
      Dim oTable As ListObject
      Dim LookupRange As Range
      Dim r As Long, c As Integer, nc As Integer, cr As Long
      Dim t As Variant
      Dim flag As Boolean
      Set oTable = Range(TableName).ListObject
      With oTable
        Set LookupRange = .ListColumns(LabelName).DataBodyRange
        nc = .Range.Columns.Count
      End With
      With LookupRange
        For r = 1 To LookupRange.Count
          Select Case Operator
            Case xlBetween: flag = (.Cells(r).Value >= Value1 And .Cells(r).Value <= Value2)
            Case xlEqual: flag = .Cells(r).Value = Value1
            Case xlGreater: flag = .Cells(r).Value > Value1
            Case xlGreaterEqual: flag = .Cells(r).Value >= Value1
            Case xlLess: flag = .Cells(r).Value < Value1
            Case xlLessEqual: flag = .Cells(r).Value <= Value1
            Case xlNotBetween:
            flag = (.Cells(r).Value < Value1 Or .Cells(r).Value > Value2)
            Case xlNotEqual: flag = .Cells(r).Value <> Value1
          End Select
          ' Si répond au critère
          If flag Then
           If cr Then
              ReDim Preserve t(nc + 1, cr)
             Else
              ReDim t(nc + 1, cr)
           End If
           ' Charge les données dans la table
           For c = 0 To nc
            t(0, cr) = r  ' N° de la ligne répondant au critère
            t(c + 1, cr) = oTable.DataBodyRange.Cells(r, c + 1).Value
           Next
           cr = cr + 1
          End If
        Next
      End With
      GetListWithCondition = Application.Transpose(t)
      Set LookupRange = Nothing
    End Function
    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
    Sub Main()
      Dim t As Variant
      t = GetListWithCondition(Operator:=xlGreaterEqual, _
                             Value1:=90, _
                             LabelName:="Lun", _
                             TableName:="t_Data")
     
    '  Exemple 2
    '  t = GetListWithCondition(Operator:=xlGreaterEqual, _
    '                           Value1:=10, _
    '                           Value2:=99, _
    '                           LabelName:="Lun", _
    '                           TableName:="t_Data")
    ' Exemple 3
    '  t = GetListWithCondition(Operator:=xlGreater, _
    '                           Value1:=#1/1/2012#, _
    '                           LabelName:="Date", _
    '                           TableName:="t_Data")
      If IsArray(t) Then
         ' Lancement du formulaire si au moins une ligne répond au critère
         With usf_DataFiltered
           With .lst_Data
           .List = t
           .ColumnCount = UBound(t, 2)
           .ColumnWidths = "0;40;60;60;30;50;30;30;30;30;30"
           End With
         .Show
         End With
       Else
         MsgBox "Aucune ligne ne répond au critère"
      End If
    End Sub

    Illustration

    Nom : 241017 dvp ListBox With Criteria.png
Affichages : 78
Taille : 75,4 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 207
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Le problème vient du fait que la plage pour alimenter les combobox s'arrête en ligne 16 si la liste est filtrée
    il ne lit donc pas le reste
    Si toutes les données de la colonne faisaient partie de la plage, il n'y aurait pas ce phénomène
    Utiliser un tableau de données pour facilement accéder à toutes les données d'une colonne aiderait
    Sinon, on peut passer par un nom
    un nom Jours basé sur la fonction DECALER par exemple
    Puis un chargement de la combobox en fonction du contenu de la plage Jours
    un essai en PJ
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Mon code filtre que les premiers choix de mes combobox
    Par Hadi2015 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/02/2015, 19h37
  2. [XL-2007] Filtre sur une ComboBox avec case cochée et les valeurs d'une colonne
    Par brunounours dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/11/2011, 09h17
  3. [XL-2003] Filtre avec une combobox
    Par yassoux dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/05/2010, 15h05
  4. Afficher mes données XML avec un Combobox
    Par tatata dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 09/06/2008, 13h57
  5. Problème avec mes ComboBox
    Par sam_sonite dans le forum Delphi
    Réponses: 3
    Dernier message: 07/03/2007, 15h05

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