XL 2019 VBA & Find plus leger

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

sebastien450

XLDnaute Occasionnel
Bonjour,
J'utilise depuis longtemps cette trame de find mais qui est lourde à insérer car parfois imbriquée plusieurs fois,
Avez-vous une piste pour alléger, la difficulté étant une recherche qui ne s'arrête pas au premier objet trouvé!

VB:
Set plage = Range(Cells(6, R2 - 48), Cells(213, R2 + 100)) ' sur ma plage de R2-48h à R2 +1000
                                                          With plage 'defini le range de travail, qui va devenir variable
                                                            Set c = .Find("CIBLE", LookIn:=xlValues, lookat:=False)
                                                            If Not c Is Nothing Then
                                                                Add1 = c.Address
                                                              Do
                                                                    'MsgBox c.Row & c.Column
                                                                Set c = .FindNext(c)
                                                              Loop While Not c Is Nothing And c.Address <> Add1
                                                            End If
                                                          End With

Merci

Sébastien
 
Bonjour sebastien450, le forum,

En effet la méthode Find n'est pas très rapide, il vaut mieux utiliser un tableau VBA (matrice) :
VB:
Set plage = Range(Cells(6, R2 - 48), Cells(213, R2 + 100))
ncol = plage.Columns.Count
tablo = plage 'matrice, plusrapide
For i = 1 To UBound(tablo)
    For j = 1 To ncol
        If UCase(tablo(i, j)) = "CIBLE" Then
            'code si la valeur est trouvée
        End If
Next j, i
Nota : ici R2 est une variable, si c'est une cellule la remplacer par [R2]

Edit : pour une recherche partielle utiliser If UCase(tablo(i, j)) Like "*CIBLE*" Then

A+
 
Dernière édition:
Mais je ne trouve pas comment récupérer l'adresse, car du coup la position est relative.
Une adresse c'est une adresse :
VB:
Set plage = Range(Cells(6, R2 - 48), Cells(213, R2 + 100))
ncol = plage.Columns.Count
tablo = plage 'matrice, plusrapide
For i = 1 To UBound(tablo)
    For j = 1 To ncol
        If UCase(tablo(i, j)) = "CIBLE" Then mes = mes & " - " & plage(i, j).Address(0, 0)
Next j, i
MsgBox "'CIBLE' " & IIf(mes = "", "non trouvé", "trouvé en " & Mid(mes, 4))
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
557
Réponses
12
Affichages
995
Réponses
0
Affichages
476
Réponses
28
Affichages
2 K
Retour