XL 2010 code VBA recherche DBB

djam28

XLDnaute Occasionnel
Bonjour à tous,
J"ai un code VBA qui me permet de faire une recherche par mot clé dans ma BDD. J'accepte l'enregistrement des douublants. Quand je l'application rechercher ,il me trouve les doublons, (pas de problème) que je clique sur la ligne voulu, c'est une autre qui s'affiche comme si il reste figé: exp: (fichier ci joint) ; je lance la recherche du numéro 48444, il me sort plusieurs lignes, quand je sélectionne la ligne 13, c'est la ligne 6 qui sort par défaut
Je vous remercie par avance de votre aide les amis
DE
 

Pièces jointes

  • Latop_v01.xlsm
    27.3 KB · Affichages: 11

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Il manquait une référence à ListBox1 dans ListBox1_Click .
Remplacez la procédure par celle-ci:
VB:
Private Sub ListBox1_Click()    'au clic dans la ListBox1
    With ListBox1
        ' Si un choix a été effectué
        If .ListIndex > -1 Then
            O.Rows(.Column(0, .ListIndex)).Select    'sélectionne la ligne de l'élément sélectionné
        End If
    End With
    Unload Me    'vide et ferme l'UserForm
End Sub

En mettant Option Explicit en tête de module, le compilateur vous aurait signalé que le deuxième ListIndex ne faisait référence à aucune variable ni propriété dans: O.Rows(ListBox1.Column(0,ListIndex).

Bonne journée
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Djam, bonjour le forum,

Je connais ce code :p. Voici la correction :

VB:
Private O As Worksheet 'déclare la variable O (Onglet)
Private TC As Variant 'déclare la variable TC (Tableau de Cellules)
Private NL As Integer 'déclare la variable NL (Nombre de Lignes)
Private NC As Byte 'déclare la variable NC (Nombre de colonnes)

Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Set O = Sheets("base de données") 'définit l'onglet O
TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
NL = UBound(TC, 1) 'définit le nombre de lignes de TC
NC = UBound(TC, 2) 'définit le nombre de colonnes de TC
Me.ListBox1.ColumnCount = NC 'définit le nombre de colonnes de la ListBox1 (à adapter, dans cet exemple je recherche dans la ligne entière. +1 pour le numéro de ligne)
End Sub

Private Sub TextBox1_Change() 'au changement dans la TesxBox1
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Me.ListBox1.Clear 'vide la ListBox1
K = 1 'initialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tabelau de cellules TC (en partant de la seconde)
    For J = 1 To NC 'boucle 2 : sur toutes les colonnes J du tabelau de cellules TC
        If InStr(1, TC(I, J), Me.TextBox1.Value, vbTextCompare) <> 0 Then 'condition : si le texte de la TextBox1 est contenu dans la donnée ligne I colonne J (sans tenir compte de la casse)
            ReDim Preserve TL(1 To NC + 1, 1 To K) 'redimensionne le tableau de lignes TL
            For L = 1 To NC 'boucle sur toutes les colonnes de TC
                TL(L, K) = TC(I, L) 'récupère dans la ligne L, colonne K de TC la valeur de la ligne I , colonne L de TC (transposition)
            Next L 'prochaine colonne de la boucle 2
            K = K + 1 'incrémente K
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
If K > 1 Then 'condition : si K est supérieur à 1 (au moins une occurrence a été trouvé)
    If K = 2 Then ReDim Preserve TL(NC + 1, 1 To 2) 'si une seule occurrence trouvée, redimensionne TL pour pouvoir transposer
    Me.ListBox1.List = Application.Transpose(TL) 'alimente la ListBox1 avec le tableau TL transposé
End If 'fin de la condition
End Sub

Private Sub ListBox1_Click() 'au clic dans la ListBox1
O.Rows(Me.ListBox1.Column(0, Me.ListBox1.ListIndex) + 1).Select 'sélectionne la ligne de l'élément sélectionné
Unload Me 'vide et ferme l'UserForm
End Sub

[Édition]
Bonjour Roblochon, nos posts se sont croisés...
 

djam28

XLDnaute Occasionnel
Bonjour Roblochon et Robert,
J’aurais besoin de votre aide de nouveau, toujours au sujet de ce code. Le souci c’est que quand j’etire mes formules dans mon tableau ( ou faire des copier coller dans mon tableau) , la recherche perd en précision. La barre de recherche affiche le nom recherché avec d’autres nom qui n’ont rien avoir..
Auriez vous des suggestions ou des pistes pour y remédier ?
En vous remerciant par avance
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Le souci c’est que quand j’etire mes formules dans mon tableau ( ou faire des copier coller dans mon tableau) , la recherche perd en précision. La barre de recherche affiche le nom recherché avec d’autres nom qui n’ont rien avoir..

Envoie le fichier car dans le premier il n'y a pas de formules. Du coup, je ne comprends rien à ta nouvelle requête...
 

djam28

XLDnaute Occasionnel
Alors pour précision,
j'ai rajouté On Error Resume Next car j'avais une erreur d'exécution Incompatibilité type lorsque je tape la 2ème lettre, ca affiche ceci:
If InStr(1, TC(i, j), Me.TextBox1.Value, vbTextCompare) <> 0 Then
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Dans le premier fichier il n'y avait que 8 colonnes. Là, il y en a que 97 ! La Listbox ne peut en afficher que 10 maximum (9 s'il y peut y avoir des doublons de nom !... Quelle sont les colonnes où la recherche va se faire et quelles sont les (9 ou 10) colonnes que tu souhaites afficher dans la ListBox ?
 

Discussions similaires

Statistiques des forums

Discussions
312 090
Messages
2 085 210
Membres
102 820
dernier inscrit
SIEG68