voici mon canon et la première ligne, ce sont les colonnes à inspectées
Const MesColonnes = "1, 2, 3, 4, 5, 6, 7, 8, 11,100, 200, 300, 400, 500, 600, 700" '---->ces colonnes de la plage "LIOB2" doivent etre inspectées
Sub teste()
Montrer "331"
End Sub
Sub Montrer(sTexte)
t = Timer
sp = Split(MesColonnes, ",")
With Sheets("Appels")
.Range("A6:ZZ10000").Name = "liob2" 'la plage à inspecter (ici toute la feuille) >>> array
Set un = .Range("B1") 'une cellulle dehors colonne A
For i = 0 To UBound(sp) 'boucle les colonnes sélectionnées
Application.StatusBar = sp(i)
arr = Evaluate("row(Offset(liob2, , " & sp(i) - 1 & ", , 1)) & ""|"" & Offset(liob2, , " & sp(i) - 1 & ", , 1)") 'numéro de ligne & contenu de la cellule
If UBound(arr) > 65000 Then MsgBox "gros problème" 'probleme de transpose au dessus de 65.000
fl = Filter(Application.Transpose(arr), sTexte, 1, vbTextCompare) 'filtrer toutes les cellules qui commencent avec ce sTexte
If UBound(fl) > -1 Then 'il y a des lignes comme-çà
For j = 0 To UBound(fl) 'boucle toutes ces lignes
sp1 = Split(fl(j), "|")
If InStr(1, sp1(1), sTexte, 1) > 0 Then Set un = Union(un, .Range("A" & Split(fl(j), "|")(0))) 'ajouter au place "UN"
'MsgBox un.Address
Next
Set un = Intersect(un, .Columns("A"))
End If
Next
Application.StatusBar = ""
If Not .ProtectionMode And .ProtectContents Then
.Unprotect
.Protect userinterfaceonly:=True
End If
un.EntireRow.Hidden = False
End With
MsgBox "pret en " & Format(Timer - t, "0.0\s")
End Sub