Recherche avec .find

C

Clo

Guest
Bonjour à vous tous du forum,


J'aimerais savoir comment fonctionne l'opération .find ? Je l'utilise dans une recherche et elle ne me renvoie pas la bonne chose. Voici un petit bout de programme


Set R = .Columns(1).Find(nomkit, , , , , xlNext, True)

If Not R Is Nothing Then
Rowkit = R.Row
......
End If

Ce que j'aimerais qu'il puisse faire c'est de retouver, dans une liste, le nom du kit ( nomkit) et de retourner le valeur de la ligne. Par contre, j'ai plusieurs kits qui on des nom presque semblable, par exemple

920kitserie1a
920kitserie1
920kitserie1b

Je ne peux modifier ces noms car il provient d'une base de données. Donc si j'effectue ma recherche avec '920kitserie1', il me renvoie la ligne du premier nom qu'il retrouve commencant par '920kitserie1' soit celui qui correspond à '920kitserie1a'. Pourquoi, je ne la sais pas. J'aimerais bien comprendre le fonctionnement du .find.


Si vous avez une meilleur suggestion, j'aimerais bien le savoir, SVP.


Je vous remercie énormément de votre collaboration et de votre aide qui est toujours grandement apprécié.


Merci et bonne fin de journée



;) Clo
 

pat1545.

XLDnaute Accro
Salut,

une partie de mon code utilisé pour une recherche ( à adapter à ton besoin)

debut de code
...
...

With Worksheets('codesarticles').Range('article')
'Dim cel As Range
'err = IsError(cel.Value)
Set C = .Find(What:=Article, LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then
'firstaddress = C.Address
' trouvé
MsgBox ('trouvé ')
Dim AA, BB
'AA = C.Value & ' ' & C.Offset(0, 1) ' libellé
BB = C.Offset(0, 2).Value ' emplacement
C.Interior.Pattern = xlPatternGray50
'C.Interior.ColorIndex = xlNone
'Set C = .FindNext(C)
ElseIf C Is Nothing Then
Exit Sub
End If
End With
...
...
fin de code

Patrick
 

Gael

XLDnaute Barbatruc
Bonsoir Clo, bonsoir Patrick,

Un autre exemple avec une boucle With.

For Each cell In Selection
If cell.Value = 'PR' Then
With Worksheets('MFC')
With .Range('Feries') 'recherche si la cellule est un jour férié
Set Trf = .Find(Cells(9, cell.Column).Value, LookIn:=xlValues)
End With
With .Range('Artt') 'recherche si la cellule est un jour ARTT
Set Tra = .Find(Cells(9, cell.Column).Value, LookIn:=xlValues)
End With
End With
'Si ni férié, ni ARTT, ni WE alors remise à blanc de la cellule
If Trf Is Nothing And Tra Is Nothing And Weekday(Cells(9, cell.Column), vbMonday) < 6 Then
cell.Interior.ColorIndex = 0
cell.Font.ColorIndex = 1
cell.Value = ''
End If
End If
Next cell

Ce code marche très bien dans mon appli mais je suis débutant en VBA et ce n'est peut-être pas le meilleur exemple.

@+

Gael

Message édité par: Gael, à: 24/01/2006 22:53

Message édité par: Gael, à: 24/01/2006 22:55
 
C

Clo

Guest
Bonjour Forum, Patrick, Gael,


J'ai essayé plusieurs trucs.... et cela ne fonctionne pas.


J'aimerais effectué une recherche dans une liste et j'aimerais avoir le numéro de la ligne correspondant. Je ne comprend pas pourquoi, il ne recherche pas le mot correspondant correctement. Comme mentionné plus bas, si j'ai 2 mot qui commence pareil et que seul la fin du mot diffère d'un lettre, il me renvoie toujours le premier retrouvé dans la liste ( qui n'est pas nécessairement celui demandé ). J'aimerais comprendre.

Patrick et Gael, merci de votre aide, mais j'ai essayé vos suggestions, le résultat est le même que moi.

Merci beaucoup de votre aide, je l'apprécie.


Clo

:)
 
T

Temjeh

Guest
Bonjour le forum
Et longue vie à ce site

Bonjour Clo
Voici une idée avec combo et recherche



A++

Temjeh [file name=Recherche_Toupie_20060125044825.zip size=14450]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Recherche_Toupie_20060125044825.zip[/file]
 

Pièces jointes

  • Recherche_Toupie_20060125044825.zip
    14.1 KB · Affichages: 31

Gael

XLDnaute Barbatruc
Bonjour Clo, Bonjour Patrick, bonjour Temjeh,

Ci-joint un petit essai avec des données similaires qui marche très bien.

@+

Gael [file name=Recherche_V1.zip size=7947]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Recherche_V1.zip[/file]
 

Pièces jointes

  • Recherche_V1.zip
    7.8 KB · Affichages: 30
  • Recherche_V1.zip
    7.8 KB · Affichages: 28
  • Recherche_V1.zip
    7.8 KB · Affichages: 29

Gael

XLDnaute Barbatruc
Rebonjour à tous,

En fait mon exemple ne réponds pas correctement à ta demande ni celui de Temjeh (dont je salue au passage la qualité de la démo) car la fonction find va toujours charcher la 1ère chaîne de caractères qui correspond donc si tu as:

920kitserie1a
920kitserie1

et que tu cherches '920kitserie1', il va te retourner 1 car il trouve cette chaîne dans le premier record.

pour éviter ça, il fait faire une recherche avec une boucle For sur toutes les cellules de la sélection.

Je te joins un petit exemple, qui marche cette fois mais vu mon niveau en VBA, j'espère que Temjeh ou d'autres vont te proposer quelque chose de mieux construit.

@+

Gael [file name=Recherche_V2.zip size=8142]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Recherche_V2.zip[/file]
 

Pièces jointes

  • Recherche_V2.zip
    8 KB · Affichages: 39
T

Temjeh

Guest
Bonjour Clo et Gael

Oui effectivement Gael tu as raison avec mon Usform c'est parfait si les valeur sont uniques donc il ne lui reste plus qu'a adapté ton code dans mon userform !

Merci pour cette remarque constructive

A++

Temjeh
 
T

Temjeh

Guest
Rebonjour en méditant un peu pour la case exact on remplace xlPart par xlWhole


Cells.Find(What:=ComboBox1.Value, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False _
, SearchFormat:=False).Activate

A+

Temjeh
 

Gael

XLDnaute Barbatruc
Rebonjour à tous,

Oui, c'est tout à fait juste et j'ai aussi mieux compris ces différents paramètres.

Et de plus, il y a un piège car au bout de plusieurs essais, je ,e trouvais plus les mêmes résultats. J'ai finalement trouvé l'explication dans l'aide:

Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.

@+

Gael
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 180
dernier inscrit
Vcr