Le fonction Find ne trouve pas tout

Bonjour

J'utilise la fonction find pour trouver des valeurs, et afficher dans une listbox des informations correspondantes (qui sont sur la même ligne).

Ceci fait, je trouve beaucoup moins de valeurs qu'une recherche classic via Ctrl+F.

1 -Par exemple le je recherche le mot "ESCA" qui se trouve dans plein de case, mais il n'en trouve que quelque une...

2- Autre chose, est il possible qu'il ne prenne pas en compte les majuscules dans le terme recherché, et dans les valeurs qu'il cherche afin de pouvoir trouver: Esca, ESCA, esca...?

Merci

Mon code:

Sub search()

If TextSearch <> "" Then

                Dim w As Worksheet
                For Each w In Worksheets
                Set Result = w.Cells.Find("*" + TextSearch + "*", , LookAt:=xlPart)

                Set Result = w.Cells.Find(TextSearch, LookAt:=xlPart, MatchCase:=True)
                If Not Result Is Nothing Then
                    FirstAddress = Result.Address
                    Do
                    FirstAddress = Result.Address

                    j = Range(FirstAddress).Row 'designe j = ligne de le cellule selectionnée

                    Recherche.ListBox1.ColumnCount = 4
                    Recherche.ListBox1.ColumnWidths = "50;200;10;50"
                    Recherche.ListBox1.AddItem w.Cells(j, "B").Value
                    Recherche.ListBox1.List(Recherche.ListBox1.ListCount - 1, 1) = w.Cells(j, "C").Value
                    Recherche.ListBox1.List(Recherche.ListBox1.ListCount - 1, 2) = w.Name
                    Recherche.ListBox1.List(Recherche.ListBox1.ListCount - 1, 3) = FirstAddress
                    Loop While Not Result Is Nothing And Result.Address <> FirstAddress
                End If

                Next w
            End If
End Sub

Ce que je trouve via la macro (3 resultats)

captur10

Ce que je trouve via la Ctrl + F (521 resultats)

capteu10

Est ce par rapport au varialble Look at? look In? MatchCase? MatchByte?

https://msdn.microsoft.com/fr-fr/library/office/ff839746.aspx

Mercii

Bonjour

Crdlt

Voilà mais il s'agissait d'un document confidentiel, j'ai donc supprimé presque toutes des valeurs des cellules.

Merci

Bonjour,

Je pense que la seconde moitié de cette page peut vraiment t'aider (la réponse à ta deuxième question y est également) :

https://www.excel-pratique.com/fr/vba/conditions_suite.php

Et un tuto vidéo en cas de besoin : https://www.blog-excel.com/creer-un-champ-de-recherche-vba/

Cordialement,

Okay merci,

1) je nai pas utiliser la fonction Find, mais jai demander de regarder dans chaques cellules des collone B et C (pas plus de collones sinon ca bug, vus la talle du fichier).

2) Pour que les variable ne prenne pas en compte les majuscules (A=a),

Placez "Option Compare Text" au dessus de tout les sub.

Merci encore!

Public TextSearch As String
Public xlApp As Excel.Application
Public xlWB As Excel.Workbook
Public Rowselect As String
Public Row As Worksheet
Public CaseSelect As String
Public C As Range
Public w As Worksheet

Option Compare Text

Sub Macro1()

Load Recherche: Recherche.Show:
'If TestF = True Then 'Si testf est vrais
End Sub

Sub search()

If TextSearch <> "" Then
                    Recherche.ListBox1.ColumnCount = 4
                    Recherche.ListBox1.ColumnWidths = "50;200;50;50"

                For Each w In Worksheets
               ' Dim R As Range
                'For Each R In w.Rows
                'Dim C As Range
                For Each C In w.UsedRange.Columns("B").Cells
                    If C.Value Like "*" + TextSearch + "*" Then
                        Call listboxsearchadditem
                    End If
                Next C
                    For Each C In w.UsedRange.Columns("C").Cells
                    If C.Value Like "*" + TextSearch + "*" Then

                    Call listboxsearchadditem
                    End If
                Next C

                Next w
            End If
            Recherche.TextBoxSearch.Value = TextSearch
End Sub
Sub listboxsearchadditem()
Recherche.ListBox1.AddItem Cells(C.Row, "B").Value
Recherche.ListBox1.List(Recherche.ListBox1.ListCount - 1, 1) = w.Cells(C.Row, "C").Value
Recherche.ListBox1.List(Recherche.ListBox1.ListCount - 1, 2) = w.Name
Recherche.ListBox1.List(Recherche.ListBox1.ListCount - 1, 3) = C.Address
End Sub

Bonjour

Voici avec paramétrage.

Les variables publics sont à proscrire

Bonjour

Merci beaucoup, en effet ton code est fonctionnel et élégant!

Pourquoi les variables public sont elles à proscrire? je m'en sert car elle sont plus simple à utiliser entre les différents procédés.

Bonjour

Avantage des variables public :

-pas besoin de paramétrer, accessible partout dans le programmes.

Inconvénients:

- Utilisent de l'espace mémoire tout au long du programme.

- Lorsqu'il y a plusieurs millier de ligne de code, difficile de savoir d'ou un éventuel problème d'initialisation peut provenir.

- Lorsqu’utilisé par plusieurs fonction, entre généralement en conflit, surtout si ces fonctions sont elle aussi public.

- Empêche le "Multi-tasking"

Rechercher des sujets similaires à "fonction find trouve pas tout"