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

djam28

XLDnaute Occasionnel
Sur la feuille en question "enregistrement total" il y'a 2 boutons. Le bouton recherche fait appel à mon userform2 . Ce dernier, comporte un bouton accueil qui n'est fonctionnel car j'ai supprimé la page d'accueil pour simplifier les choses.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Bon, il semblerait que ça marche correctement. La recherche se fait sur les colonnes A à H et L. La Listbox1 n'affiche que ces colonnes. La recherche se fait désormais sur le début des mots et non plus sur les lettre contenues dans le mot. Avant tu tapais ovo et la ligne 4 s'affichait car le client se nomme VOVOU. Maintenant pour voir ce client il faudra taper V, ou VO, ou... Le début des mots...
Évite les On Error Resume Next si tu ne veux pas que le code fasse n'importe quoi. Un erreur ça se gère...
N'utilise plus ton fichier qui est défectueux. Comme je te l'avais signalé dans un post précédent, je suis parti d'un fichier vierge et j'ai tout copier/coler...

le code :

VB:
Private O As Worksheet 'déclare la variable O (Onglet)
Private TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Private NL As Integer 'déclare la variable NL (Nombre de Lignes)

Private Sub Userform_Initialize() 'à l'initialisation de l'UserForm
Set O = Sheets("enregistrement total") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes de TV
Me.ListBox1.ColumnCount = 10 '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)
Me.ListBox1.ColumnWidths = "0 pt;60;60;60;60;60;60;60;60;60;60" 'masque la première colonne de la ListBox1 (celle ou sera stocké le numéro de la ligne) et définit la taille des autres
End Sub

Private Sub TextBox1_Change() 'au changement dans la TextBox1
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 L As Byte '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
If Me.TextBox1.Value = "" Then Exit Sub 'si la TextBox1 est effacée, sort de la procédure
K = 1 'initialise la variable K
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    For J = 1 To 12 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
        Select Case J 'agit en fonction de la valeur de J
            Case 1 To 8, 12 'cas des colonne 1 à 8 (A à H) et 12 (L)
                'condition : si les X caractères éditées dans la TextBox1 correspondent aux X premiers caractères de la donnée ligne I colonne J de TV (converties en majuscules les deux)
                If UCase(Me.TextBox1.Value) = UCase(Left(TV(I, J), Len(Me.TextBox1.Value))) Then
                    ReDim Preserve TL(1 To 10, 1 To K) 'redimensionne le tableau de lignes TL (10 lignes, K colonnes)
                    TL(1, K) = I 'récupère dans la ligne 1, colonne K de TL le numéro de ligne (masqué)
                    For L = 2 To 9 'boucle sur toutes les colonnes 2 à 9
                        TL(L, K) = TV(I, L - 1) 'récupère dans la ligne L de TL la valeur de la colonne L-1 de TV (=> Transposition)
                    Next L 'prochaine colonne de la boucle 2
                    TL(10, K) = TV(I, 12) 'récupère dans la ligne 10 de TL, la donnée colonne 12 de TV
                    K = K + 1 'incrémente K
                    Exit For 'sort de la boucle 2
                End If 'fin de la condition
        End Select
    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(1 To 10, 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
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

Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub CommandButton2_Click()
Sheets("TB").Activate
End Sub

Le fichier :
 

Pièces jointes

  • Djam_ED_v02.xlsm
    266.1 KB · Affichages: 8

frederio

XLDnaute Impliqué
Bonjour vous connais comment faire à un bouton de contrôle nom RETOUR et contrôle de formulaire d’un chiffre suite choix 1-34
Si tu veux être d’accord avec moi ??? vous m’aidez a expliqué comme Excel Merci
 

Pièces jointes

  • ALLEMAGNE.xlsx
    340 KB · Affichages: 7

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi