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 :

Filtre en cascade Excel VBA


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
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 15
    Par défaut Filtre en cascade Excel VBA
    Bonjour à tous,
    Merci encore à tous pour votre aide ces derniers temps

    J'ai un outil que j'ai developpé dans mon entreprise, qui me sert à effectuer les réceptions de matières premières (3 fournisseurs, 11 produits différents, 3 agents)
    Bien sûre j'ai mis des valeurs erronnés pour garder une certaine confidentialité.

    Mon outil fonctionne mais j'aimerais bien l'optimiser encore plus
    En effet je ne maîtrise pas les filtres en cascade sur une feuille Excel et sur un formulaire Userform.

    1/ (Feuille Commandes)Je voudrais que lorsque l'on rentre via la liste deroulante le nom du fournisseur, que sur la liste deroulante du type de produit, n'apparaissent seulement les produits de ce fournissseur (actuellment tous les produits apparaissent)
    Nom : aaa.png
Affichages : 1069
Taille : 23,3 Ko

    (Feuille Produits)J'ai une base qui existe pour faire la correspondace Fournisseur - Produit
    Nom : bbb.png
Affichages : 1087
Taille : 23,8 Ko

    2/ (Feuille Enregsitrement) J'ai crée un Userform pour que les agents rentrent les différentes réceptions, en appuyant sur le bouton "Enregistrer" et qui agrémente cette même feuille "Enregsitrement". Mon souhait serait que lorsqu'il rentre via la liste déroulante le type de produit, que sur la liste déroulante du N° de lot, n'apparaissent seulement les n° de lots de ce type de produit.
    Nom : ccc.png
Affichages : 1660
Taille : 53,8 Ko

    (Feuille Commandes) En ce moment, la liste propose tous les N° de lot de la feuille "Commandes", mais je voudrais qu'il prenne en compte le type de produit pour affiner la recherche. Ici, c'est les propriétés de l'Userform1, puis ComboBox1 qui sont impactées
    Nom : ddd.png
Affichages : 1080
Taille : 26,2 Ko
    Le code de la combox :
    Nom : eee.png
Affichages : 1202
Taille : 82,6 Ko

    Voici le fichier pour avoir plus d'informations
    OutilReceptions.xlsm

    PS: Vous pourrez voir que lorsque l'on fait un enregsitrement sur le formulaire, c'est assez long, je ne sais pas ce qui est lent dans l'userform...

    Merci d'avance de votre aide précieuse...

    Bien cordialement
    Bonne journée

    Maxado 56

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Désolé, mais je n'ouvre pas les fichiers joints avec macros...

    Lorsque tu sélectionnes un item dans le combobox1 (par exemple), tu vides le 2e et tu boucles pour le remplir.
    Tu vérifies donc si ta liste de données correspond à la valeur du 1er combobox.
    C'est tout.

  3. #3
    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,

    Il y au moins 2 raisons:
    -La méthode de tri
    -Il faut trier dans un Array() et non pas sur le ComboBox

    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
     
    Option Compare Text
    Private Sub UserForm_Initialize()
      Dim temp()
      Set f = Sheets("BD")
      Set champ = f.Range("A2:A" & f.[A65000].End(xlUp).Row)
      temp = Application.Transpose(champ)
      Tri temp, LBound(temp), UBound(temp)
      Me.ComboBox1.List = temp
    End Sub
     
    Sub Tri(a(), gauc, droi)          ' Quick sort
     ref = a((gauc + droi) \ 2)
     g = gauc: d = droi
     Do
         Do While a(g) < ref: g = g + 1: Loop
         Do While ref < a(d): d = d - 1: Loop
         If g <= d Then
           temp = a(g): a(g) = a(d): a(d) = temp
           g = g + 1: d = d - 1
         End If
     Loop While g <= d
     If g < droi Then Call Tri(a, g, droi)
     If gauc < d Then Call Tri(a, gauc, d)
    End Sub
    Il est préférable d'alimenter un ComboBox par List ou Column plutôt qu'avec Additem



    Boisgontier
    http://boisgontierjacques.free.fr
    Fichiers attachés Fichiers attachés

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2017
    Messages : 15
    Par défaut Suite sujet
    Bonjour,
    Merci tout d'abord pour vos réponses rapides,

    1/ Cher parmi, je comprend votre logique mais est ce qu'il y a un code VBA lié à cette logique ?

    2/ Cher boisgontierjacques, j'ai essayé de transposer votre macro combobox sur mon outil, mais je n'ariive pas du tout à la faire fonctionner, je suis un peu perdu...

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Il y a d'autres méthodes pour remplir un combobox sans doublon, mais bon... je te propose celle-ci

    Donc, un Userform avec 2 combobox nommés par défaut et des données en Feuil1, en colonnes A et B
    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
    Private Sub ComboBox1_Click()
        Dim I As Long, nbLignes As Long
     
        With Sheets("Feuil1")
            nbLignes = .Cells(.Rows.Count, "A").End(xlUp).Row
            Me.ComboBox2.Clear
     
            For I = 2 To nbLignes
                If .Range("A" & I) = Me.ComboBox1.Text Then
                    Me.ComboBox2.AddItem .Range("B" & I)
                End If
            Next
        End With
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim I As Long, nbLignes As Long
     
        With Sheets("Feuil1")
            nbLignes = .Cells(.Rows.Count, "A").End(xlUp).Row
            For I = 2 To nbLignes
                'Vérifie que la donnée n'est pas déjà dans la liste
                If Not IsInCombo(.Range("A" & I), Me.ComboBox1) Then
                    Me.ComboBox1.AddItem .Range("A" & I).Value
                End If
            Next
        End With
    End Sub
     
    Function IsInCombo(Valeur, Combo As Control) As Boolean
        Dim I As Long
     
        For I = 0 To Combo.ListCount - 1
            If Combo.List(I) = Valeur Then
                IsInCombo = True
                Exit Function
            End If
        Next
    End Function

  6. #6
    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,


    >j'ai essayé de transposer votre macro combobox sur mon outil, mais je n'ariive pas du tout à la faire fonctionner, je suis un peu perdu...



    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
     
        Dim f, Tbl()
        Set f = Sheets("Commandes")
        Tbl = Application.Transpose(f.Range("C2:C" & f.[C65000].End(xlUp).Row).Value)
        'Tri le contenu du ComboBox par ordre alphabétique
        Tri Tbl, LBound(Tbl), UBound(Tbl)
        Me.ComboBox3.List = Tbl
        For i = 1 To 3 'on lance une boucle de valeur mini 1 et maxi 8
        Me.Controls("TextBox" & i).Visible = True 'affiche les données dans les textbox
      Next i
    End Sub
     
        Sub Tri(a(), gauc, droi)          ' Quick sort
          Dim ref, g, d, temp
          ref = a((gauc + droi) \ 2)
           g = gauc: d = droi
           Do
             Do While a(g) < ref: g = g + 1: Loop
             Do While ref < a(d): d = d - 1: Loop
             If g <= d Then
               temp = a(g): a(g) = a(d): a(d) = temp
               g = g + 1: d = d - 1
             End If
           Loop While g <= d
           If g < droi Then Call Tri(a, g, droi)
           If gauc < d Then Call Tri(a, gauc, d)
         End Sub

    Boisgontier
    http://boisgontierjacques.free.fr
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XL-2010] Filtre élaboré (excel-vba)
    Par denkae dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/09/2015, 12h32
  2. [XL-2007] excel vba boucler dans un filtre pour remplacer des formules
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/11/2014, 13h43
  3. Filtre multicritères Excel/VBA
    Par cydzeboss dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/12/2008, 11h43
  4. Filtre élaboré de Excel en VBA
    Par Bilre dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/07/2007, 18h10
  5. excel VBA et désactivation du filtre
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/10/2006, 17h29

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