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 :

[E-97] Recherche multi-critères


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut [E-97] Recherche multi-critères
    Bonjour,

    Je fais une fonction de recherche adaptée à mon tableau. Suite à de divers topics et posts, j'arrive à faire un affichage à la suite d'une recherche sur un critère.

    Maintenant, je dois faire la même chose avec 1 ou plusieurs critères.

    Soyons plus clair, je dois pouvoir effectuer une recherche avec ma fonction qu'il y ai 1, 2,....,x paramètres rentrés dans mon usf.

    J'ai bien la possibilité de mettre tous mes paramètres les uns à cotés des autres mais cela risque de me faire une ligne immense.

    Voilà le code (qui ne fonctionne pas) auquel j'ai pensé: (ici il n'y a que deux paramètres)
    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
    Private Sub CommandButton1_Click()
    Dim thecell As Range
    Feuil1.Activate
    For Each thecell In Range("B1", Cells(Rows.Count, "B").End(xlUp))
        With thecell.Offset(0, 1)
            .EntireRow.Hidden = Year(CDate(.Value)) <> CInt(TextBox_annee.Value)
        End With
    Next
    and '<- erreur à ce niveau
    For Each thecell In Range("B1", Cells(Rows.Count, "B").End(xlUp))
        With thecell.Offset(0, 1)
            .EntireRow.Hidden = (.Value) <> CInt(TextBox_valeur.Value)
        End With
    Next
     
    End Sub
    Je vous mets le fichier (disons que pour les besoins de l'exemple, je n'ai besoins d'avoir que les lignes contenant l'année 2009 et la valeur 10 sur la même ligne).


    Merci pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    je viens d'essayer ton code, eet j'ai corrigé comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
    Dim thecell As Range
    Feuil1.Activate
    For Each thecell In Range("B1", Cells(Rows.Count, "B").End(xlUp))
        With thecell.Offset(0, 1)
            .EntireRow.Hidden = Year(CDate(.Value)) <> CInt(TextBox_annee.Value) And .EntireRow.Hidden = (.Value) <> CInt(TextBox_valeur.Value)
     
        End With
    Next
     
    Unload UserForm1
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 086
    Par défaut
    Salut
    Heu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .EntireRow.Hidden = Year(CDate(.Value)) <> CInt(TextBox_annee.Value) And .EntireRow.Hidden = (.Value) <> CInt(TextBox_valeur.Value)
    Je suis pas d'accord

    ce serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .EntireRow.Hidden = (Year(CDate(.Value)) <> CInt(TextBox_annee.Value)) Or (.Value <> CInt(TextBox_valeur.Value))
    surement un copier coller malheureux ^^

    [Edit]
    Pour ce qui est d'avoir plusieurs critères, tout dépend de la nature des ces critères, s'ils sont tous des entiers, il te suffit de passer un tableau d'entier et de boucler sur chaque valeur, si les critères sont de natures différentes, le mieux serait peut etre de passer par un tableau de string.
    [/Edit]
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    Salut,

    En fait le tableau que j'utilise comporte des entier amis aussi des chaines de caractères.

    Et donc je veux pouvoir combiner les chiffres ainsi que les caractères pour arriver par exemple si j'ai un tableau avec plus de 1000 lignes (ça m'étonnerais que cela arrive) à disons une dizaine (ou plus ou moins) de résultats correspondant aux critères rentrés.

    Par exemple, l'année (2007), une commune (XXXX), fourchette de prix ( min et max) .....
    Le (ou les) résultats seront de la commune X durant l'année 2007 et dans la fourchettes de prix min max.

    Au passage comme les trois quarts des posts que j'ai fait sur excel, je passe par un usf et j'ai donc plusieurs textbox et surement une combo.


    bon j'ai essayé avec le or et je perds tout (ce qui ne serait pas genant si j'utilisais des valeurs inexistantes dans le tableau). Au niveau du And cela fonctionne mais je suis obligé de rentrer toutes mes valeurs ce que je ne souhaite pas forcément faire.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 239
    Par défaut
    Salut,

    j'ai tenté une recherche sur un string "tout court" et cela a fonctionné. Mais lorsque j'ai fait un And:
    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
    Private Sub CommandButton1_Click()
    Dim thecell As Range, champ1 As Variant
    Feuil1.Activate
    If (TextBox_annee.Value <> "") Then
        champ1 = TextBox_annee.Value
        Else
        champ1 = Null
    End If
     
    For Each thecell In Range("B1", Cells(Rows.Count, "B").End(xlUp))
        With thecell.Offset(0, 1)
            .EntireRow.Hidden = (Year(CDate(.Value)) <> CInt(champ1)) And (.Value <> CStr(TextBox_valeur.Value))
        End With
    Next
     
    Unload UserForm1
    End Sub
    Il s'arrete à la recherche sur l'année. Sachant que cela pourra arriver, je voudrais aussi résoudre ce problème en plus de celui de ne pas avoir un nombre de champ rempli fixe (je dois pouvoir faire un tri sur un seul champ malgré le fait d'avoir 8 champs potentiellements remplissables).

    Une solution à mes problèmes serait une recherche séquentielle de mes paramètres mais je voudrais faire ça qu"en une seule fois comme cela si un paramètre manqueon peut continuer (enfin je crois et surtout j'espère).


    J'ai résolu mon problème merci
    voici le 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
    Private Sub CommandButton1_Click()
    Dim thecell As Range
    Feuil1.Activate
     
    If (TextBox_annee.Value <> "") Then
        For Each thecell In Range("B1", Cells(Rows.Count, "B").End(xlUp))
            With thecell.Offset(0, 1)
                .EntireRow.Hidden = Year(CDate(.Value)) <> CInt(TextBox_annee.Value)
            End With
        Next
    End If
     
    If (TextBox_valeur.Value <> "") Then
        For Each thecell In Range("B1", Cells(Rows.Count, "B").End(xlUp))
            With thecell.Offset(0, -1)
                .EntireRow.Hidden = .Value <> CLng(TextBox_valeur.Value)
            End With
        Next
    End If
     
    If (ComboBox1.Value <> "") Then
        For Each thecell In Range("A1", Cells(Rows.Count, "A").End(xlUp))
            With thecell.Offset(0, 1)
                .EntireRow.Hidden = (.Value) <> CStr(ComboBox1.Value)
            End With
        Next
    End If
    Unload UserForm1
    End Sub

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

Discussions similaires

  1. [MySQL] Recherche multi-critères ou un seul
    Par jack1234 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/12/2005, 08h56
  2. Recherche multi-critères
    Par PAUL87 dans le forum Access
    Réponses: 66
    Dernier message: 13/12/2005, 12h12
  3. problème SQL avec le tutoriel recherche multi critère
    Par qbihlmaier dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/12/2005, 19h33
  4. problème avec résultat de recherche multi-critères
    Par audrey_desgres dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 11h00
  5. Procédure stockée: recherche multi-critères
    Par biroule dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 01/09/2004, 16h02

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