VBA & listbox

Résolu
Pascal-77 Messages postés 19 Statut Membre -  
Zoul67 Messages postés 2001 Statut Membre -
Bonjour,

J'ai créé une macro ou j'écris une nom qui filtre une listbox. La source se décale correctement et, une fois que j'ai terminé de taper le nom que je cherche, le premier choix sur ma listbox est bien celui que j'ai écrit.
Seulement, quand je clique sur un nom dans ma listbox, je récupère des informations relatifs à ce nom. Ces infos sont complètement décalées.
C'est à dire que lorsque ma listbox est complète, la correspondance est parfaite, dès que je la modifie avec ma fonction de recherche, elle n'est plus calée.

Est ce quelqu'un a une solution ?

Merci de votre aide.

4 réponses

  1. Zoul67 Messages postés 2001 Statut Membre 149
     
    Bonjour,

    C'est marrant. D'habitude, les messages où on ne comprend rien sont bourrés de fautes de français.

    A+
    0
  2. Pascal-77 Messages postés 19 Statut Membre
     
    Bon c'est vrai que je n'ai peut être pas été assez clair.
    J'ai une listbox avec des noms. Lorsque je sélectionne un nom j'affiche sur ma userform des infos ( numéro de téléphone, adresse, etc ...). Si en A1 se trouve le nom, le téléphone est en B1, l'adresse en C1 etc ...
    J'ai un textbox qui me permet de filtrer ma listbox. Si je cherche un martin, je tape martin, la listbox va commencer par martin. Jusqu'ici tout va bien.

    Mon problème est que, une fois mon martin affiché en haut de liste de la listbox, lorsque je le sélectionne, ce ne sont pas ses informations qui s'affichent, il y a un décalage. Si martin se trouve en A42, je ne retrouve pas les informations de B42 et C42. mais d'autres infos. Ce décalage n'est pas constant aussi je ne peux pas le corriger simplement dans la condition de changement de la listbox.

    J'espère que cette fois c'est limpide.
    Merci de votre aide.
    0
  3. Zoul67 Messages postés 2001 Statut Membre 149
     
    J'arrête mon cynisme pour essayer de t'aider...
    Peux-tu déposer ton fichier sur un site comme www.cjoint.com puisque tu as dû implémenter pas mal de choses ?
    Je crains l'utilisation de l'index d'origine et non ListBox1.Value a priori...

    A+
    0
    1. Pascal-77 Messages postés 19 Statut Membre
       
      Salut Zoul67,

      https://www.cjoint.com/?3FuaKNutOT8
      Tu vas vite t'apercevoir du caractère amateur du fichier. L'organisation du code est à l'image de la clarté de mon premier message. Disons que je me qualifierais plus de bricoleur VBA que programmeur.
      C'est la partie "annuaire" qui pose problème.

      Merci de ton aide.
      0
    2. Zoul67 Messages postés 2001 Statut Membre 149
       
      Salut Pascal-77,

      Le VBA Excel est conçu pour faire du bricolage... Ton fichier est pas mal et les UserForms assez jolis.
      Quelques conseils toutefois :
      - indente le code ;
      - nomme les objets pour clarifier le code (ex. OK_Click est plus clair que CommandButton1_Click)
      - règle les valeurs de TabIndex pour faciliter la saisie au clavier (la touche Tabulation permet de passer d'un TextBox au suivant).
      Comme je le pensais, le problème provenait d'un index qui se met à jour de façon erronée. Comme on fait bouger la ListBox1, je pense qu'il est plus simple de se baser sur ListBox1.Value.
      Je n'ai pas trop aimé le principe du RowSource, parce que tu ne supprimais pas les dernières valeurs (ex saisir "daniel" ne supprime pas "zazie"). J'ai donc utilisé AddItem et basé le filtrage sur l'ensemble de la chaîne de caractères (des fois que tu te souviennes de "metro" et non de "zazie").

      Le code :
      Public derlig As Integer
      Public Sub UserForm_Initialize()
      derlig = Range("A65536").End(xlUp).Row
      For i = 5 To derlig
      ListBox1.AddItem Cells(i, 1).Value
      Next i
      End Sub

      Private Sub CommandButton1_Click()
      TextBox5.Value = ""
      commerciaux.Hide
      Menu.Show
      End Sub

      Private Sub CommandButton2_Click()
      For i = 5 To derlig
      If Cells(i, 1).Value = ListBox1.Value Then
      Cells(i, 2).Value = TextBox2.Value
      Cells(i, 3).Value = TextBox1.Value
      Cells(i, 4).Value = TextBox3.Value
      Cells(i, 5).Value = TextBox4.Value
      Exit Sub
      End If
      Next
      End Sub

      Private Sub ListBox1_Change()
      If ListBox1.ListIndex = -1 Then
      TextBox1.Value = ""
      TextBox2.Value = ""
      TextBox3.Value = ""
      TextBox4.Value = ""
      Exit Sub
      End If
      For lig = 5 To derlig
      If ListBox1.Value = Cells(lig, 1).Value Then
      TextBox1.Value = Cells(lig, 3).Value
      TextBox2.Value = Cells(lig, 2).Value
      TextBox3.Value = Cells(lig, 4).Value
      TextBox4.Value = Cells(lig, 5).Value
      Exit Sub
      End If
      Next lig
      End Sub

      Public Sub TextBox5_Change()
      ListBox1.ListIndex = -1
      ListBox1.Clear
      For i = 5 To derlig
      If InStr(Cells(i, 1).Value, TextBox5.Value) > 0 Then ListBox1.AddItem Cells(i, 1).Value
      Next i
      End Sub

      A+
      0
    3. Pascal-77 Messages postés 19 Statut Membre
       
      Salut Zoul67,

      Un grand, grand merci, c'est énorme.
      Heureusemenbt qu'il y a des gens comme toi pour éclairer ceux qui se perdent dans l'obscurité des codes ...

      Encore merci.
      0
    4. Zoul67 Messages postés 2001 Statut Membre 149
       
      C'était un plaisir. Les ListBox sont toujours un peu "casse-gueule". Mieux vaut n'utiliser que les propriétés les plus simples de ces monstres.
      Peux-tu passer le sujet en "Résolu" ?
      0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour tout le monde,

    Conseil de Zoul : indente le code

    Pour ça je te conseille un addin : Smart Indenter
    Très bien fait, un clic-droit sur le code et tout est indenté correctement.
    Ca facilite grandement la lecture et le contrôle des boucles.

    Compatible excel 2007-2010 même si ce n'est pas écrit sur le site : http://www.oaltd.co.uk/Indenter/

    (ne pas oublier de lire le post 6 de Zoul...)

    eric
    0
    1. Pascal-77 Messages postés 19 Statut Membre
       
      Salut eriiic,

      C'est noté. C'est vrai que je me lance dans le code sans faire d'organigramme et même parfois à l'aveuglette ce qui n'est très efficace.

      Encore merci à tous.
      0
    2. Zoul67 Messages postés 2001 Statut Membre 149
       
      Bien vu, eric ! En plus, je l'ai, ce plug-in, mais je n'ai ni pensé à l'utiliser en reprenant le fichier, ni conseillé à Pascal.
      0