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 multicritère VBA


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Recherche multicritère VBA
    Bonjour,

    Déjà bonne fête à tous!!!

    J'ai un problème, j'essaie d'intégrer une recherche multicritère à un boutton de userform mais ca rien ne se passe.

    Ci dessous le code que j'ai crée.

    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
    Private Sub CommandButton2_Click()
     
        For ln = 2 To Sheets("BDD").Range("A" & Rows.Count).End(xlUp).Row 'début de la boucle
     
             If Sheets("BDD").Range("E" & ln) = Interface.ComboBox1 Then 'Première fonction si
     
                If Sheets("BDD").Range("D" & ln) = Interface.ComboBox4 Then 'Deuxième fonction si
     
                   If Sheets("BDD").Range("F" & ln) = Interface.ComboBox2 Then 'Troisieme fonction si
     
                        If Sheets("BDD").Range("G" & ln) = Interface.ComboBox3 Then 'Quatrième fonction si
     
                            If Sheets("BDD").Range("I" & ln) = 1 Then 'Cinquième fonction si (Classement)
     
                    Resultat.Show
     
                              Sheets("BDD").Range("B" & ln).Copy Resultat.TextBox1 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("C" & ln).Copy Resultat.TextBox2 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("D" & ln).Copy Resultat.TextBox3 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("E" & ln).Copy Resultat.TextBox4 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("F" & ln).Copy Resultat.TextBox5 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("G" & ln).Copy Resultat.TextBox6 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("D" & ln).Copy Resultat.TextBox3 'Des qu'un hôtel est trouvé, le copier.
     
     
                    Else
                    MsgBox "Try again"
                           End If
                        End If
                    End If
                End If
            End If
        Next ln
     
     
    End Sub

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Tu peux exécuter ta procédure au pas à pas, sous VBE F8, et regarder ce qui se passe.

    Cordialement,

    PGZ

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour Gige91,

    C'est simplement parce que tu n'as jamais les 4 premières conditions de remplies.
    Vérifie à l'aide du mode pas à pas pour chacune de tes lignes, sur un faible nombre d'entrés, avec l'une d'entre elle passante, et tu verras d'où vient ton erreur.

    Au passage, le mot-clé "and" te permet de mettre plusieurs conditions dans un même "If".
    Mais c'est plus difficile d'analyser ce qui pose problème au debugage, forcément.

    Cordialement,
    Kimy

    EDIT : au même moment, pgz.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci de votre réponse rapide.

    J'ai oublié de vous précisez... Je suis vraiment un novice. Donc trouver une erreur va relever de l'exploit.

    Je vous joins le fichier. (Le problème se trouve sur l'Userforme "Interface")



    Fichier joint dans vos discussions


  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Gige91 Voir le message
    ... Je suis vraiment un novice. Donc trouver une erreur va relever de l'exploit...]
    bonjour,

    être novice ne te dispense pas de chercher un peu ...

    si l'utilisation du mode pas à pas comme proposé plus haut te semble insurmontable, tu pourrais aussi rajouter des message box par exemple :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (...) If Sheets("BDD").Range("E" & ln) = Interface.ComboBox1 Then 'Première fonction si
                         MsgBox  "Première fonction si  vérifiée"
                If Sheets("BDD").Range("D" & ln) = Interface.ComboBox4 Then 'Deuxième fonctio(...)
    ainsi tu pourras voir ou tu en est de tes conditions ..




    Fichier joint dans vos discussions





  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    J'ai déjà effectué cette procédure.

    La première et deuxième condition marche, puis il revient à la condition 1.

    Apparemment la troisième conditions pose problème. Pourtant j'ai bien vérifié la colonne et la textbox concerné.

  7. #7
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    J'imagine que tu auras compris que cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets("BDD").Range("F" & ln) = Interface.ComboBox2 Then
    signifie que tu vérifies que dans la feuille intitulée "BDD" tu cherches à la même ligne "ln" (qui va de 2 à la dernière ligne non-vide de la colonne A), en colonne F et tu compares avec le Combobox2.

    Les possibilités envisageables :
    1. La colonne A contient moins d'élément que ta liste à comparer.
    2. La Combobox2 n'est pas celle que tu crois.
    3. Une erreur de ta part sur la colonne ou la ligne.
    4. Des caractères différents.

    Cordialement,
    Kimy

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    en continuant avec des message box tu peu aussi écrire avant ta condition 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (..)   MsgBox  Sheets("BDD").Range("F" & ln)  & vbCrLf & Interface.ComboBox2
     
         If Sheets("BDD").Range("F" & ln) = Interface.ComboBox2 Then 'Troisieme fonction si
    (..)
    pour afficher le contenu des variables ...

    tu peu aussi arrêter ton programme à ce moment la par une instruction stop :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (..)  
         stop 
         If Sheets("BDD").Range("F" & ln) = Interface.ComboBox2 Then 'Troisieme fonction si
    (..)
    et tu passe ensuite la souris sur les variables pour voir leur valeurs s'afficher dans les bulles d'aides.... (actionne F8 ensuite pour passer ta ligne stop..)

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    J'ai trouvé grâce à votre aide, merci.

    J'ai modifier mes caractères et ça marche.

    Par contre un autre problème survient, une erreur 1004, la méthode copy. Je vais chercher encore.

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    essaies cette partie,sans avoir analyser le reste de ton programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim x As Integer
    With Sheets("BDD")
      For x = 1 To 6
        Resultat.Controls("Textbox" & x) = .Cells(Ln, x + 1) 'Des qu'un hôtel est trouvé, le copier.
     Next x
    End With
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets("BDD").Range("B" & ln).Copy Resultat.TextBox1 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("C" & ln).Copy Resultat.TextBox2 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("D" & ln).Copy Resultat.TextBox3 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("E" & ln).Copy Resultat.TextBox4 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("F" & ln).Copy Resultat.TextBox5 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("G" & ln).Copy Resultat.TextBox6 'Des qu'un hôtel est trouvé, le copier.
                             Sheets("BDD").Range("D" & ln).Copy Resultat.TextBox3 'Des qu'un hôtel est trouvé, le copier.

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci casefayere,

    Ça marche.

    Cette partie de code permet de tous copier en évitant de tous détailler?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For x = 1 To 6
        Resultat.Controls("Textbox" & x)

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim x As Integer
    With Sheets("BDD")
      For x = 1 To 6
        Resultat.Controls("Textbox" & x) = .Cells(Ln, x + 1) 'Des qu'un hôtel est trouvé, le copier.
     Next x
    End With
    copie les valeurs des cellules dans les textbox concernés, effectivement en faisant une boucle

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

Discussions similaires

  1. [AC-2003] Recherche multicritère VBA
    Par RoZyk dans le forum IHM
    Réponses: 10
    Dernier message: 09/11/2010, 17h21
  2. [vba-e] Recherche multicritére
    Par deaqu1 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/04/2007, 11h28
  3. [débutante] recherche multicritère vba
    Par Mimi64 dans le forum IHM
    Réponses: 7
    Dernier message: 01/08/2006, 10h57
  4. Réponses: 2
    Dernier message: 01/10/2005, 19h42
  5. recherche multicritères
    Par onlineduel dans le forum Débuter
    Réponses: 3
    Dernier message: 30/03/2004, 17h15

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