Bonjour
Décidément, les moteurs de recherche ce n'est pas simple. J'ai le cerveau en ébullition ! Aussi avant que ça ne chauffe de trop, je me tourne vers vous une fois de plus ! Messieurs les développeurs, j'ai besoin de vos connaissances, oh combien précieuses.
Le code ci-dessous s’exécute bien mais qu'est-ce que c'est long !!! En l'état ce n'est pas jouable !
J'imagine qu'il analyse ligne par ligne et vu que le fichier est volumineux c'est l'enfer ! Au secours !
Qui plus est la valeur cherchée ne s'affiche dans ma Textbox qu'à l'issue de la recherche et j'ai l'impression que la recherche se fait les caractères les uns après les autres. Ce qui n'arrange pas mes affaires !!
L'idée est de pouvoir rechercher une valeur saisie via la txtbox et qui serait comprise dans la colonne A (code) et une fois trouvée de filtrer sur la ligne correspondante.
Si la valeur n'est pas trouvée, afficher une msgbox qui dit "valeur non trouvée, vérifier votre saisie"
+ le bouton "Réinitialiser" pour revenir à la base de données.
+ si possible une réinitialisation de la base de la feuille concernée par défaut à l'ouverture ou fermeture du classeur. Sachant qu'il comporte plusieurs feuilles.
Option Explicit
Option Compare Text
Private Sub Worksheet_Activate()
'Réinitialise la recherche et le filtrage
If TextBox1.Text <> "" Then TextBox1.Text = "" _
Else init_rech
With Range("tableau4").ListObject
.AutoFilter.ShowAllData
End With
End Sub
Private Sub init_rech() 'Initialisation de la recherche
With Range("tableau4").ListObject
.Range.Cells(8, 1).Select
.DataBodyRange.EntireRow.Hidden = False
.DataBodyRange.Interior.ColorIndex = xlNone
End With
' TextBox1.Clear
End Sub
Public Sub BoutonReinitialiser_Click() 'Code relatif au bouton Reset qui est sur la feuille et sur le userform
Worksheet_Activate
End Sub
'Recherche filtrante
Private Sub TextBox1_Change()
Dim cell As Range, i As Long, lig As Long, col As Long, nbt As Integer
Application.ScreenUpdating = False
'If TextBox1 = Empty Then init_rech: Exit Sub
If TextBox1.Value <> "" Then
End If
' TextBox1.Clear
With Range("tableau4").ListObject
'Restauration du filtrage initial
' .AutoFilter.ShowAllData: Filtrer crit1, crit2, crit3
'Restauration de la recherche
.DataBodyRange.Interior.ColorIndex = xlNone
.DataBodyRange.EntireRow.Hidden = False
'Nouvelle recherche
For i = 1 To .ListRows.Count
Set cell = .ListRows(i).Range.Find(TextBox1.Value)
If cell Is Nothing Then
.ListRows(i).Range.EntireRow.Hidden = True
End If
Next i
End With
End Sub