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 :

code vba recherche [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut code vba recherche
    Bonjour à tous,

    j'aimerais réaliser un outil de recherche dans une base de données.
    Le principe serait que selon le choix de la liste deroulante, cela actualiserais la listbox.
    Mais je ne sais pas du tout par quoi commencer et comment faire donc si quelqu'un pouvait m'aider, MERCI.
    Et bonne journée.
    Images attachées Images attachées  

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Bonjour Marc31,

    Tu devrais tout d'abord jeter un coup d'oeuil sur cet (excellent) tutoriel:
    http://silkyroad.developpez.com/VBA/UserForm/

    Sinon, tu devrais sûrement utiliser les fonctions Userform_Initialize et Listbox_Click qui te permettront de modifier les valeurs de tes listboxs.

    J'espère que ça te permettra d'avancer dans ta réalisation

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut heu
    bonjour
    je suppose que ta recherche va se faire en fonction des criteres obtenus avec tes comboboxs ?

    Les méthodes find et findnext me semblent tout indiquées

    avec des conditions sur les offset de la cellule trouvée avec l' un des critères

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut code vba recherche
    Merci pour l'aide Ariaar et patrick!!

    Oui là recherche va se faire en fonction des choix dans les listes deroulantes.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut Initialisation de la listBox et changement de valeur après sélection
    Un peu de code pour te guider :

    Pour initialiser tes ListBoxs, si c'est en fonction d'une recherche
    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
    Private Sub UserForm_Initialize()
     
        Dim myRange As excel.Range
     
        ' Utilisation de la fonction Find dont patricktoulon à parler
        ' Elle te retournera la première cellule contenant la valeur cherchée trouver
        Set myRange = excel.Range("maPlage").Find(What:="maValeur1", [Autres arguments facultatifs])
        If Not myRange Is Nothing Then
            Dim addr As String
     
            ' On stocke l'adresse de la cellule dans addr
            addr = myRange1.Address
            ' Cette boucle va ajouter toutes les valeurs cherchée dans ta ListBox
            Do
                ListBox.AddItem myRange.Value
                Set myRange = excel.Range("maPlage").FindNext(myRange)
            Loop While Not myRange Is Nothing And myRange.Address <> addr
        End If
     
    End Sub
    Et pour actualiser la ListBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ListBox_Click()
     
        ' ici, tu pourras effectuer toutes les opération que tu veux sur toutes tes listBoxs,
        ' et notamment les mettre à jour en fonction des valeurs de ListBox
     
    End Sub
    La méthode Clear des ListBoxs te permettra de supprimer tous les éléments de la listBox, et tu pourras y ajouter les éléments trouver grâce à Find en lui donnant en paramètre ListBox.Value!

    Voilà, j'espère que c'est plus clair pour toi ^^

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut code vba recherche
    Ahh ouiiii merci parce que la je sais même pas par où commencer!!!!
    mais je vois deja un probleme car ma plage de données va être variable puisque c'est une base de données que l'on remplit au fur et à mesure!

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Alors soit tu as une plage nommée et l'avantage c'est qu'elle sera dynamique, sinon c'est à toi de récupérer les bons paramètres dans ta base de données.

  8. #8
    Inactif  
    Homme Profil pro
    Agent Admin
    Inscrit en
    Novembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Agent Admin

    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    bonjour,

    j'ai eu un code similaire sur ce forum qui a resolue mon probleme
    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
    Private Sub TextBox1_Change()
    Dim Plage As Range, cell As Range
    Dim Recherche As String, Adresse As String
    Dim Ligne As Integer, n As Integer
    Dim C As Range
    ListBox1.Clear
    n = 0
    Recherche = TextBox1.Value
    Range("a2").Select
    Ligne = Sheets("Base De Données").Range("a" & "65536").End(xlUp).Row
    Set Plage = Sheets("Base De Données").Range("a" & "1:" & "a" & Ligne)
    With Plage
    Set C = .Find(Recherche, , xlValues)
    If Not C Is Nothing Then
    Adresse = C.Address
    Do
        If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
              ListBox1.AddItem C.Offset(0, 0), n
            ListBox1.List(n, 0) = C
             ListBox1.List(n, 1) = C.Offset(0, 1)
              ListBox1.List(n, 2) = C.Offset(0, 2)
               ListBox1.List(n, 3) = C.Offset(0, 3)
                ListBox1.List(n, 4) = C.Offset(0, 4)
                 ListBox1.List(n, 5) = C.Offset(0, 5)
                 ListBox1.List(n, 6) = C.Offset(0, 6)
                 ListBox1.List(n, 7) = C.Offset(0, 7)
                  ListBox1.List(n, 8) = C.Offset(0, 8)
     
                    n = n + 1
        End If
        Set C = .FindNext(C)
        Loop While Not C Is Nothing And C.Address <> Adresse
        End If
    End With
    End Sub
    Images attachées Images attachées  

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut
    Merci pour le code parce que là j'avoue que je suis un peu largué....!!!
    C'est dur de partir de 0

    merci beaucoup le code marche super!!!!
    Par contre est il possible de faire une 1 recherche est que cela affiche le resultat puis une seconde recherche qui affinerais la premiere recherche?
    Enfin je sais pas si je me fais bien comprendre.
    Petit exemple: 1 er recherche(choix liste deroultante) :association
    2 ieme recherche(choix liste deroultante): ville (toulouse)

    donc on obtiendrez toutes les associations de la ville de toulouse par exemple!
    Encore merci

    J'avais une petit question par rapport au code vba en fait, quand je fais une recherche sur une colonne par exemple la ville, il m'affiche dans mon tableau la ville en premier champ et le reste derriere mais comment faire si je veux afficher le nom de la structure en premier champ puis la ville en second?
    Merci et bonne journée

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Marc31 Voir le message
    Par contre est il possible de faire une 1 recherche est que cela affiche le resultat puis une seconde recherche qui affinerais la premiere recherche?
    Si tu veux qu'une recherche soit générée à chaque fois que l'utilisateur fait un choix dans une de tes liste déroulantes, il te suffit d'effectuer les recherches/modifications sur le champs où sont affichées les résultats avec la procédure ListBox_Click dont je t'ai parlé précédemment.

    Exemple:
    • L'utilisateur choisi association dans ListBox1, tu affiches dans un Label (par exemple, je ne connais pas ton programme) les différents résultats que tu auras trouvé grâce à ListBox1_Click
    • L'utilisateur choisi Toulouse dans ListBox2, tu effectues une première recherche, qui va te donner la liste des entreprises et associations de Toulouse. Tu n'as plus qu'à récupérer les associations seulement, ou de ne garder que les associations présentes dans le Label ET dans le résultat de ta recherche

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut code vba recherche
    Encore merci pour votre aide....
    Et oui c'est tout à fait ça mais je ne vois pas comment faire pour parce que il y a une premiere liste deroulante puis il faut aller choisir le choix de la seconde en fonction de la premiere.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Je reprends l'exemple des associations et des villes, dans ListBox1 et ListBox 2.

    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
    ' Initialisation du UserForm
    Private Sub UserForm_Initialize()
    ' ici tu reprends le code que je t'ai donné plus haut
    End sub
     
    ' Opération se déclenchant lorsque l'utilisateur fait un choix sur la ListBox
    ' contenant les types de structures
    Private Sub ListBox1_Click()
     
        ' pour vider la deuxième ListBox
        ListBox2.Clear
     
        ' Tu peux remplir la ListBox avec ce que tu veux
        ' avec la même technique que dans le UserForm_Initialize
     
        ' Ajoute le choix de l'utilisateur dans le Label affichant le résultat
        Label.Value = Label.Value & vbLf & ListBox1.Value
     
    End Sub
     
    ' Opération se déclenchant lorsque l'utilisateur fait un choix sur la ListBox
    ' contenant les villes
    Private Sub ListBox2_Click()
     
        ' Ici tu peux faire les même opérations que dans ListBox1_Click
     
    End Sub

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut code vba recherche
    En fait j'ai qu'une listbox et plusieurs combobox avec du contenu definis.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Alors c'est ton jour de chance parce que ça fonctionne quasiment de la même manière

  15. #15
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut code vba recherche
    Oui c'est bizarre car habituellement la chance n'est pas avec moi en vba!!!

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Lol, bah teste le code et surtout oublie pas de marquer le poste comme résolu si ça marche

    Si ça marche pas, cette fois il va me falloir un peu plus de détails parce que j'ai absolument aucune vision de ton code ou même de ton userform!

    Bon courage

  17. #17
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut code vba recherche
    ben voilà pour le userform mais pour le code je vais encore essayer ce soir et si cela ne marche pas je le mettrais!
    Images attachées Images attachées  

  18. #18
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut code vba recherche
    Alors j'ai essayé plein de choses mais je suis revenu au code qui marchait.
    Mais actuellement, les combobox sont indépendantes, elles affichent dans la listbox le résultat mis dans la 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Private Sub ComboBox1_Change()
     
    'type structure
     
    Dim Plage As Range, cell As Range
    Dim Recherche As String, Adresse As String
    Dim Ligne As Integer, n As Integer
    Dim C As Range
    ListBox1.Clear
    n = 0
    Recherche = ComboBox1.Value
    Range("K2").Select
    Ligne = Sheets("BDD").Range("K" & "65536").End(xlUp).Row
    Set Plage = Sheets("BDD").Range("K" & "2:" & "K" & Ligne)
    With Plage
    Set C = .Find(Recherche, , xlValues)
    If Not C Is Nothing Then
    Adresse = C.Address
    Do
        If UCase(Recherche) = UCase(Left(C, Len(Recherche))) Then
              ListBox1.AddItem C.Offset(0, 0), n
            ListBox1.List(n, 0) = C
             ListBox1.List(n, 1) = C.Offset(0, -1)
              ListBox1.List(n, 2) = C.Offset(0, 1)
               ListBox1.List(n, 3) = C.Offset(0, 4)
                ListBox1.List(n, 4) = C.Offset(0, -10)
                 ListBox1.List(n, 5) = C.Offset(0, -9)
                 ListBox1.List(n, 6) = C.Offset(0, -8)
                 ListBox1.List(n, 7) = C.Offset(0, 5)
                  ListBox1.List(n, 8) = C.Offset(0, 7)
     
     
                    n = n + 1
        End If
        Set C = .FindNext(C)
        Loop While Not C Is Nothing And C.Address <> Adresse
        End If
    End With
     
    End Sub

  19. #19
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 27
    Points : 33
    Points
    33
    Par défaut
    Pour que les ComboBoxs soient "dépendantes", il te suffit de changer leur contenu dans ComboBox1_Change(), en faisant la même chose que sur ListBox1

  20. #20
    Membre habitué
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1 010
    Points : 181
    Points
    181
    Par défaut
    Oui j'ai essayé mais je comprends pas comment faire car il y a plusieurs combobox et le premier choix peut être l'une des 8 combobox.

    Je n'arrive pas à l'intégrer.....

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Recherche de Code VBA
    Par duplaly dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/03/2011, 18h32
  2. [WD-2003] Recherche code vba destruction fichier
    Par vieuxmonsieur dans le forum VBA Word
    Réponses: 15
    Dernier message: 05/06/2009, 10h46
  3. recherche du code VBA pour executer ma requete
    Par gwems dans le forum VBA Access
    Réponses: 28
    Dernier message: 20/03/2009, 00h26
  4. Code de recherche vba
    Par akmer dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/08/2008, 13h17
  5. [VBA] code pour recherche automatique de données
    Par lg022 dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/02/2007, 11h20

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