VBA se servir d'une combobox pour rechercher

Résolu
Usgpa Messages postés 14 Statut Membre -  
 Usgpa -
Bonjour,

Je suis débutant en matière de VBA excel et je soumets un cas qui vous semblera surement très simple.

En fait, j'ai une liste de document en Feuil2 avec 4 colonnes de caracteristiques (A, B, C et D). j'ai crée un Userform ou j'ai un combobox qui permet de sélectionné un objet de la liste par sa caractéristiques A. Je souhaiterai savoir comment faire pour faire apparaitre dans les Trois Textbox de mon Userform les données B, C et D correspondant à mon objet.

Merci d'avance pour le temps que vous m'accorderez.

18 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Sous Microsoft Visual Basic, double clic sur la combobox, le code suivant apparait :

    Private Sub ComboBox1_Change()
    
    End Sub


    Entre ces deux lignes écrire :

    Private Sub ComboBox1_Change()
    Dim a As Integer
    Dim cherche As String
    cherche = ComboBox1.Value
    a = Sheets("Feuil1").Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
    TextBox1 = Range("A" & a).Offset(0, 1).Value
    TextBox2 = Range("A" & a).Offset(0, 2).Value
    TextBox3 = Range("A" & a).Offset(0, 3).Value

    End Sub
    A adapter bien sur
    3
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    essaie sans Sheets("Feuil2") comme ceci :
    a = Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row

    Sinon comment complètes tu ta combobox?
    2
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,
    Bien sur. Le code :
    a = Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
    te renvoie un chiffre : le numéro de la ligne. Après, tu peux t'en servir pour supprimer une ou plusieurs cellules :
    Range("B" & a).Delete

    ou
    Range(Cells(1,a),Cells(6,a)).Delete
    pour supprimer de colonne A à colonne F
    1
  4. Usgpa Messages postés 14 Statut Membre 1
     
    Merci Pijaku. Apparament mon Vba bloque sur le :
    a = Sheets("Feuil2").Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row

    Il me le surligne en jaune et me signale une erreur de Type "9".
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Derme une erreur de type "9"? Quel est le message d'erreur complet?
    0
  7. Usgpa Messages postés 14 Statut Membre 1
     
    l'indice n'appartient pas à la sélection...
    0
  8. Usgpa Messages postés 14 Statut Membre 1
     
    Pijaku Merci !!! Ta deuxième solution était la bonne !!! Mzerci beaucoup et bonne journée à toi !
    0
  9. Usgpa
     
    Bonjour,

    J'aimerais savoir si il était possible, grâce à un bouton "supprimer" d'un userform, de supprimer les cellules ainsi trouvées sans devoir supprimer toute la ligne.

    Merci d'avance.
    0
  10. Usgpa
     
    Merci encore Pijaku. encore une fois ton code fonctionne mais malheureusement une fois les cellules supprimé, c'est ma premiere userform qui bug vu que le code (a = Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row) qui jaunit vu que la valeur qui servait de référent n'existe plus. Le bug existe également si je l'unload à l'ouverture de la seconde userform...

    As-tu une idée ?
    0
  11. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    On en revient à ma question du post 5 : Sinon comment complètes tu ta combobox?
    Je ne comprends pas non plus, pourquoi tu ne souhaites pas supprimer la ligne entière? En gestion de base de données, soit tu remplaces, soit tu supprimes toute une ligne, mais laisser des cellules vides n'est absolument pas bon pour une bdd...
    0
  12. Usgpa
     
    Ma combobox, reprend la première colonne de ma feuille qui est une des caracteristiques des objets listés.

    En fait je souhaitais, ne pas supprimer la ligne en entier pour ne pas supprimer des boutons et des statistiques que j'ai placé à droite du tableau... si cela pose un problème, je les placerais dans une autre feuille, je n'ai pas encore l'esprit VBA.. et donc pas encore les réflexes utiles :)

    Merci
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      effectivement, ta feuille contenant les données ne doit contenir... que les données.
      Si tu supprimes des cellules, tu dois avoir des vides dans ta combo?
      0
  13. Usgpa
     
    En fait ne sachant pas comment programmer une combo pour contenir uniquement les cellules pleines d'une colonne, je l'ai programmé afin qu'elle reprenne toutes les cellules de la colonne A. Du coup les cellules qui disparaissent ne se voient pas.

    Je vais donc faire une page d'accueil avec les boutons etc.. ainsi je pourrai supprimer toute la ligne. Peux tu me donner la formule pour supprimer toute une ligne ?
    0
  14. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Tout simplement, adapté à ton cas :
    a = Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row
    Rows(a).Delete
    0
  15. Usgpa
     
    Merci beaucoup. Cependant, une fois la ligne supprimé, il y a tout de même un message d'erreur surlignant en jaune :

    a = Feuil2.Cells.Find(What:=cherche, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlNext).Row

    du premier userform...

    Erreur 1004
    0
  16. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    oui puisque tu cherches à nouveau (je ne sais pas pourquoi d'ailleurs) la valeur "cherche" que tu viens de supprimer...
    0
  17. Usgpa
     
    En fait j'ai programmé, que la recherche se lance à chaque changement dans la combobox1. (Private Sub ComboBox1_Change()). L'étrange, c'est que la recherche se lance alors que mon userform contenant la combobox est fermé... je pensais que ca règlerai le problème mais apparament non ...
    0
  18. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    salut,
    tu l'as fermé comment? si tu n'as fait que :
    UserForm1.Hide 
    ça ne suffit pas.
    Essaie :
    Unload UserForm1

    Le mieux serait tout de même que tu places tout ton code ici et que l'on regarde pourquoi cela ne fonctionne pas. J'aurais un peu de temps demain si tu veux...
    0
  19. Usgpa
     
    J'avais fermé comme ça mais malheureusement, ca continue...
    0