bonjour, bien fait par mafraise, mais c'était moi qui avait mis cette valeur erronée pour faire des testes, désolé !
Mafraise a bien résolu mon erreur
Mais, je présente une autre solution, plus/trop(?) difficile qui traite & sauvegarde toutes les bonnes données dans une matrice en mémoire et les passe au Listbox1 au bout. Est-ce mieux que les passer au début et puis traiter les erreurs et les formats ? (les goûts et les couleurs ne se discutent pas)
'*** RECHERCHE INTUITIVE *********************************************************************************
Private Sub TextBox1_Change()
Dim i As Long, C As Integer, N%, Cl As Range, s As Variant, Arr0, Arr1, j, bVide As Boolean, LR As Long
Me.ListBox1.Clear 'RAZ listbox1
s = "" 's commence comme "string"
For i = 1 To Range("TS_Data").Rows.Count
bVide = (Len(Me.TextBox1.Value) = 0)
If Not bVide Then Set Cl = Range("TS_Data").Rows(i).Find(Me.TextBox1.Value, lookat:=xlPart)
If Not Cl Is Nothing Or bVide Then s = s & " " & i 'mémoriser toutes les LRs correspondantes
Next
If Len(s) > 0 Then 'il y a des LRs qui correspondent !
'************************************************************************************************
'on fait toute la préparation du contenu du listbox1 en mémoire et charge le résultat au bout en une fois dans le listbox
'cepandant, on traite les valeurs vides, erronées et les met, si nécessaire dans le bon format numérique dépendant de la colonne
'************************************************************************************************
Arr0 = Range("TS_Data").Value2 'lire contenu du tableau dans une matrice
s = Split(s) 'séparer les LRs mémorisées, s est maintenant array
ReDim Arr1(1 To UBound(s), 1 To UBound(Arr0, 2)) 'préparer une matrice pour le résultat avec autant de LRs que nécessaire (nombre de s)
For i = 1 To UBound(s) ' s(0) est vide ! Donc à partir du premier au dernier
LR = s(i) 'Numero du "listrow"
For j = 1 To UBound(Arr0, 2) 'boucler toutes les colonnes
Select Case VarType(Arr0(i, j)) 'type de cet élément de Arr0
Case vbEmpty, vbNull, vbError 'si vide, null ou erronée = ignorer
Case Else 'les autres cas
Select Case j 'dépendant de la colonne
Case 1: Arr1(i, j) = Format(Arr0(LR, j), "0000") '* format iD
Case 6: Arr1(i, j) = Format(Arr0(LR, j), "General Date") '* format date
Case 7, 8: Arr1(i, j) = f_Exotique(Arr0(LR, j)) 'format exotique
Case Else: Arr1(i, j) = Arr0(LR, j) 'le reste, simple copie-colle
End Select
End Select
Next
Next
Me.ListBox1.List = Arr1 'colle matrice résultat dans le listbox1
End If
End Sub