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 :

Sélectionner d'une liste déroulante puis filtrer EXCEL/VBA [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Par défaut Sélectionner d'une liste déroulante puis filtrer EXCEL/VBA
    Bonjour

    Je sollicite votre aide car je suis bloquée... (J'ai cherché sur le forum et d'autres site mais je ne comprend toujours pas...)


    je voudrai qu'à partir de mon userform qui apparaît au début je puisse filtrer ma feuille de commande en fonction de la référence choisie, tout cela en appuyant sur le bouton valider.

    Voici le code jusqu'à présent :

    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
    Option Explicit
     
    Private myTab()
    Private ind As Long
     
     
     
    'Private Sub Workbook_Open()
    'UserForm1.Show
    'End Sub
     
    Private Sub UserForm_Click()
     
    End Sub
     
    Private Sub UserForm_Initialize()
        initCombo
    End Sub
     
    Private Sub initCombo()
    Dim ws As Worksheet
    Dim derlig As Long
    Dim lig As Long
    Dim i As Long
     
        Set ws = ThisWorkbook.Worksheets("CRNET-CDE")
        derlig = ws.Range("A" & Rows.Count).End(xlUp).Row
        ReDim Preserve myTab(ind)
        For lig = 2 To derlig
            If ModTools.DoesExistRef(ws.Range("A" & lig).Value, myTab()) = False And ws.Range("F" & lig).Value <> "" Then
                ReDim Preserve myTab(ind)
                myTab(ind) = ws.Range("A" & lig).Value
                ind = ind + 1
            End If
        Next lig
     
        For i = LBound(myTab()) To UBound(myTab())
            Me.ComboBox1.AddItem myTab(i)
        Next i
    End Sub

    Je ne sais pas si j'ai été très claire;

    Je vous remercie d'avance de l'aide que vous pourrez apporter,
    Bonne journée.

    Laura

  2. #2
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

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

    Pourquoi n'utiliserais-tu pas directement un filtre sur ta feuille qui contient ta liste des commandes ?
    Dans l'onglet "Données", tu as le bouton "Filtrer".
    Tu peux également utiliser l'enregistreur de macros pour connaitre rapidement le code qui peut reproduire ce que tu fais manuellement et t'en inspirer.

    Cordialement,

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Par défaut réponse
    Oui j'ai déjà pensé à cette solution, mais c'était pour voir si c'était possible, car en fait on a de gros carnet de commande avec beaucoup de références, et le but et ne de pas perdre de temps d'en sélectionner qu'une.

    Voilà pourquoi

    J'ai trouvé cette formule pour filtrer un champ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("A:AO").Autofilter Field:=1,_ Criteria1:="La référence"
    Ce qui manque c'est, comment faire pour que la référence choisie de la liste déroulante de ma box soit la référence filtrée et que cela s'execute quand j'appuie sur mon bouton "validez".

    (Désolé j'ai commencé à apprendre comment utiliser VBA lundi dernier ... et mes connaissances sont super limitées en code tout court )

  4. #4
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Il n'y a pas de soucis

    Si on reprend la formule que tu as trouvé, on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("A:AO").Autofilter Field:=1,_ Criteria1:="La référence"
    Ce que tu cherches, c'est remplacer la listbox qui contient tes références comme critère de filtre. Donc, à avoir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("A:AO").Autofilter Field:=1,_ Criteria1:=me.cbo_ref ' le contrôle qui contient tes références dans ton UserForm
    Le champ "Field" correspond au numéro de colonne de ta zone de sélection (ici, c'est "A:AO") donc, le 1 correspond à A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.Range("A:AO").Autofilter Field:=1,_ Criteria1:=me.cbo_ref
    Je te conseille de remplacer ActiveSheet par le "Codename" de ton onglet.
    Comment obtenir le CodeName ?
    Dans l'éditeur de VBA, tu peux visualiser les modules, les feuilles et tes UserForms dans une petite fenêtre. Le codename de tes feuilles Excel correspond au nom indiqué.
    A noter que tu as deux noms pour chaque feuille, sous la forme : codename (nom afficher).
    Tu peux éditer le codename de ta feuille dans les propriétés (touche F4).

    Enfin, tu peux choisir plusieurs valeurs dans tes filtres, comme ceci (* code obtenu avec l'enregistreur de macro) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("$A$1:$B$4").AutoFilter Field:=1, Criteria1:="=1", Operator:=xlOr, Criteria2:="=3"
    Bon courage

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 37
    Par défaut
    Je ne comprend pas ce que c'est le CodeName Est-ce que c'est le nom qu'on donne à chaque feuille ?


    Après,
    Du coup j’insère comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Click()
    ActiveSheet.Range("A:AO").AutoFilter Field:=1, Criteria1:=Me.cbo_ref
    UserForm1.Hide
     
    End Sub

    C'est pas possible à la place de à la place de ?

    Désolé j'apprend en même temps

    Merci encore

  6. #6
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 904
    Par défaut
    Nom : Exemple.png
Affichages : 1716
Taille : 16,9 Ko

    Si tu regardes sur le fichier en pièce jointe, tu trouveras un exemple d'application de CodeName sur une feuille.

    A gauche, la fenêtre de propriétés de l'onglet et à droite la liste des feuilles.

    F_Accueil correspond au CodeName de la feuille. Il n'est modifiable que par le développeur ou par le code.
    La feuille est nommée Cover. C'est le nom que tu verras dans l'interface Excel. Il peut être modifié par les utilisateurs.

    L'avantage du code est d'utiliser simplement son nom.
    A l'inverse, le nom de l'onglet signifie que tu passes par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets("Cover")
    par exemple.

    Mais pour débuter, le nom de l'onglet est suffisant et te permettra de t'exercer à manipuler les onglets.

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

Discussions similaires

  1. Récupérer valeur sélectionnée dans une Liste déroulante
    Par coeurdange dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/08/2008, 15h27
  2. Réponses: 10
    Dernier message: 15/07/2008, 16h23
  3. Réponses: 2
    Dernier message: 25/03/2008, 10h49
  4. Réponses: 1
    Dernier message: 07/03/2008, 08h49
  5. Comment récupérer le texte sélectionné dans une liste déroulante ?
    Par Je-cherche-pfe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/09/2007, 20h35

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