Bonjour à tous,

J'ai une base de donnée de 15 colonnes et des lignes dynamiques. C'est à dire que les lignes s'incrémentent au fur et à mesure de la saisie via un formulaire userform.

pour faire simple: mon formulaire est pourvu d'une textbox, la 18, qui peut contenir un nombre à 10 chiffres (au delà j'ai une erreur et je ne sais pas pourquoi alors j'ai limité à 10 chiffres). lorsque je saisis par exemple dans la textbox18 la valeur 1, le code va vérifier dans la base si le nombre 1 existe (Ma base de donnée est telle que les nombres sont classés en ordre décroissant). Si tel est le cas alors affiche le contenu du row (soit les 15 colonnes) dans d'autres textbox's' d'affichage pour IHM. Mais après avoir codé je me rends compte que si ma base s'accroit à 1000 lignes enregistrées alors le séquençage devient long (j'aimerai pouvoir traité jusqu'à 100 000lignes). C'est à dire si je tape 15000 dans mon textbox le temps qui balaye les lignes je peux aller me faire un café. après cette prise de conscience, je me prends maintenant la tête...

comment puis-je rendre ma routine plus fluide dans le traitement de lecture de la base et y afficher le contenu associé selon la ligne saisie dans le champ textbox18 ?
Ma première idée serait de traiter par paquet de ligne. Si ma valeur saisie est 50 alors balaye uniquement la base de 1 à 500. Si ma valeur à présent serait de 4500 alors balaye de 4000 à 4500 mais je ne sais guère par où commencer ? tout ce que je peux comprendre est la "longueur" de traitement en faisant
Range("B9").End(xlDown).Row mais après comment découper ce truc en paquet équitable sachant que ma base s'alimente à chaque saisie, soit en dynamique ?

voici un début de mon code mais pas sur que cela d'une grande aide aux spécialistes. car il n'est pas adapté en cours mais je ne sais pas comment m'y prendre en fait. pour ceux qui on eu la patience de me lire, Ici Ticket correspond à un numéro de ligne en quelque sorte

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Function recherche(ByVal ticket As Long, ByVal debut As Integer) As String
Dim i, initial, final, facteur As Double
facteur = 10 ^ (Len(TextBox18.Value) - 1)
 
If ticket < 500*facteur Then 'Len(TextBox18.Value) < 4 And Then
initial = Range("B9").End(xlDown).Row - 10 * facteur: final = initial + 10 * facteur
ElseIf ticket > 499 And ticket < 1000 Then
initial = Range("B9").End(xlDown).Row - 1000: final = initial + 1000
ElseIf ticket > 1499 And ticket < 2000 Then
initial = Range("B9").End(xlDown).Row - 1500: final = initial + 1500
End If
 
 
For i = initial To final
 
 
If Cells(i, 2).Value = ticket Then
Me.Controls("TextBox" & debut).Value = Cells(i, 4)
Me.Controls("TextBox" & debut + 1).Value = Cells(i, 6)
Me.Controls("TextBox" & debut + 2).Value = Cells(i, 10)
Me.Controls("TextBox" & debut + 3).Value = Cells(i, 8)
End If
If Cells(i, 2).Value = ticket And (Cells(i, 10).Value = "T" Or Cells(i, 10).Value = "C" Or Cells(i, 10).Value = "N") Then
Me.Controls("TextBox" & debut + 4).Value = Cells(i, 12)
Me.Controls("TextBox" & debut + 5).Value = Cells(i, 14)
recherche = Cells(i, 10)
Exit Function
End If
mais je ne traite pas en dynamique et ma formule ne convient et pas et surtout je voudrais généraliser, si c'est possible, pour éviter des if à gogo pour chaque intervalle. faut il se lancer dans des suites ???

Quelqu'un sait il s'y prendre avec ce genre de problème ?

merci d'avance..