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 :

Recherche par Option Boutton


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut Recherche par Option Boutton
    Bonsoir

    J'ai un petit souci avec mon code.

    Voilà j'ai fichier avec une feuille nommer "Choix" avec une liste de races de chien et leurs correspondances
    ex; Chien de berger, chien d'aveugle ect... de la colonne "D : CZ".
    J'ai un formulaire avec des optionboutton et 3 combobox alimenter: 1 Groupe, 1 Taille, 1 Pays d'origine;
    J'aimerai faire une recherche en fonction des critères sélectionner.
    ex: je coche chien de Compagnie, du groupe 9 par la combobox1, Angleterre parla combobox1 "Pays d'Origine" et petite taille par la combobox3.
    Et j'aimerai que tous les chiens de compagnie du groupe 9 d'Angleterre et de petite taille se copie sur la feuille nommer "Résultat"
    Je vous Joint mon code:
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Private Sub CommandButton1_Click()
    Dim c As Object 'déclare la variable c (onglet Choix)
    Dim r As Object 'déclare la variable r (onglet Résiltats)
    Dim dl As Long 'déclare la variable dl (Dernière Ligne)
    Dim pl As Range 'déclare la variable pl (PLAGE)
    Dim pspl As Range 'déclare la variable pspl (Plage Sans Première Ligne)
    Dim ctrl As Control 'déclare la variable ctrl (ConTRôLe)
    Dim col As Byte 'déclare la variable col (COLonne)
    Dim test As Boolean 'déclare la variable test
     
    Set c = Sheets("Choix") 'définit l'onglet c
    Set r = Sheets("Résultats") 'définit l'onglet r
    r.Range("A6").CurrentRegion.Clear 'efface les éventuelles anciennes données de l'onglet r
    r.Range("I1:I3").Clear
    dl = c.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A) de l'onglet c
    Set pl = c.Range("A3:T" & dl) 'définit la plage pl
    Set pspl = c.Range("A4:T" & dl) 'définit la plage pspl (Plage pl Sans la Première Ligne)
    For Each ctrl In Me.Controls 'boucle sur tous les contrôles de l'UserForm
       If TypeOf ctrl Is msforms.OptionButton Then 'condition 1 : si le contrôle est un bouton d'option
           If ctrl = True Then 'condition 2 : si le bouton est coché
               col = CByte(ctrl.Tag) 'récupère la colonne dans la propriété "Tag" du contrôle
               test = True 'définit la variable test
               r.Range("I1") = ctrl.Caption 'place l'aptitude en I1 de l'onglet r
               Exit For 'sort de la boucle
           End If 'fin de la condition 2
       End If 'fin de la condition 1
    Next ctrl 'prochain contrôle de la boucle
    If c.FilterMode = True Then pl.AutoFilter 'si la plage pl est en mode filtre automatique, supprime le filtre automatique
    If test = True Then pl.AutoFilter Field:=col, Criteria1:="X" 'filtre la plage par rapport au X dans la colonne col
    If Me.ComboBox1.Value <> "" Then 'condition : si la ComboBox1 n'est pas vide
       pl.AutoFilter Field:=3, Criteria1:=Me.ComboBox1.Value 'filtre la plage pl par rapport au groupe
       r.Range("I2").Value = Me.ComboBox1.Value 'place le groupe en I2 de l'onglet r
    End If 'fin de la condition
    If Me.ComboBox2.Value <> "" Then 'condition si la ComboBox2 n'est pas vide
       Select Case Me.ComboBox2.Value 'agit en fonction de la valeur de la ComboBox2
           Case "Petite Taille" 'cas "Petite Taille"
               col = 18 'définit la colonne col
               r.Range("I3").Value = "Petite Taille" 'place la taille en I3 de l'onglet r
           Case "Moyenne Taille" 'cas "Moyenne Taille"
               col = 19 'définit la colonne col
               r.Range("I3").Value = "Moyenne Taille" 'place la taille en I3 de l'onglet r
           Case "GrandeTaille" 'cas "GrandeTaille" (il n'y a pas d'espace ?)
               col = 20 'définit la colonne col
               r.Range("I3").Value = "Grande Taille" 'place la taille en I3 de l'onglet r
       End Select 'fin de l'action en fonction de ...
       pl.AutoFilter Field:=col, Criteria1:="X" 'filtre par rapport au X dans la colonne col
    End If 'fin de la condition
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante
    'copie les coloones A à C de la plage pspl visible dans A6 de l'onglet r (génère une erreur si la plage pspl visible est vide)
    Application.Intersect(pspl.SpecialCells(xlCellTypeVisible), c.Columns("A:C")).Copy r.Range("A6")
    ' If Err <> 0 Then MsgBox "Aucune chien trouvé avec ces critères" 'si une erreur a été générée, message
    pl.AutoFilter 'supprime le filtre automatique
    r.Select 'sélectionne l'onglet r
    test = False 'initialise la variable test
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim rg As Range
     
        'Groupe
       Set rg = Feuil3.Range("C2:C" & Feuil3.Range("C" & Rows.Count).End(xlUp).Row)
        Unique_Sorted_ComboList Me.ComboBox1, rg
     
        'Taille
       Set rg = Feuil3.Range("E2:E" & Feuil3.Range("E" & Rows.Count).End(xlUp).Row)
        Unique_Sorted_ComboList Me.ComboBox2, rg
     
        'Flag
       Set rg = Feuil3.Range("A2:A" & Feuil3.Range("A" & Rows.Count).End(xlUp).Row)
        Unique_Sorted_ComboList Me.ComboBox3, rg
     
    End Sub
    Je vous remercie de votre aide et vous souhaite une bonne journée

    Cordialement

    Max
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Qu'est-ce qui ne fonctionne pas dans ton code ?

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut
    Bonjour Daniel,,

    Si je recherche ex: un chien de compagnie du "groupe 9" d'un pays "Angleterre" de "Petite taille sa ne fonctionne pas?

    Bonne journée

    Max

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Est-ce qu'il faut obligatoirement sélectionner un bouton d'option ?

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 629
    Par défaut
    Re,

    Oui ! Pourquoi

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Tu devrais rectifier tes entêtes qui ne correspondent pas aux valeurs des comboboxes. Ton problème vient en partie au moins de là; par exemple la valeur "Petite Taille" est libellée "Petite Taille " dans l'entête.

Discussions similaires

  1. Réponses: 11
    Dernier message: 04/03/2013, 10h52
  2. Recherche par mots clés
    Par legillou dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 17/06/2005, 10h56
  3. changement d'image par radio boutton
    Par ph_anrys dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 14/03/2005, 16h27
  4. Probleme de recherche par listbox
    Par haigwepa dans le forum IHM
    Réponses: 6
    Dernier message: 12/10/2004, 19h57
  5. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07

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