SAFENil
Messages postés6Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention15 janvier 2009
-
7 janv. 2009 à 17:55
SAFENil
Messages postés6Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention15 janvier 2009
-
15 janv. 2009 à 10:03
Bonjour,
J'ai un petit problème en VBScript.
Je souhaite faire une recherche dans un fichier excel, mais je ne veux obtenir que la première cellule qui contient exactement le mot recherché.
Par exemple, si je recherche 'INFO', je voudrais que la cellule renvoyée ne contienne que le mot 'INFO' et pas avoir la cellule qui contient le mot 'INFORMATIQUE'
J'ai essayé la fonction Find :
objExcel.Cells.Find(Mot_Recherché)
Mais elle me renvoie la première cellule 'INFORMATIQUE'
cs_JMO
Messages postés1854Date d'inscriptionjeudi 23 mai 2002StatutMembreDernière intervention24 juin 201827 10 janv. 2009 à 21:40
Bonsoir,
Lecture ligne par ligne et arrêt si strWord trouvé.
objExcel.ActiveWorkbook.Sheets("Feuil1").Select
strWord = "INFO"
NL = 1
Trouve = False
For L = NL To objExcel.ActiveSheet.UsedRange.Rows.Count
For C = 1 To objExcel.ActiveSheet.UsedRange.Columns.Count
If Trim(objExcel.ActiveSheet.Cells(L, C).Value) = strWord Then
MsgBox objExcel.Cells(L, C).Value & vbCrLf & _
objExcel.Cells(L, C).Address,,"mot trouvé !"
Trouve = True : Exit For
End If
Next
If Trouve = True Then Exit For
NL = NL + 1
Next
If Trouve = False Then MsgBox "mot non trouvé !"
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 7 janv. 2009 à 18:12
Salut,
La solution serait peut être que lorsque Find te renvois quelque chose, de tester si le nombre de caractères du mot recherché correspond à celui que t'a renvoyé Find...
SAFENil
Messages postés6Date d'inscriptionlundi 14 juin 2004StatutMembreDernière intervention15 janvier 2009 7 janv. 2009 à 19:03
Merci de la réponse,
Mais c'est justement ce que je faisais, et le problème est que si ce n'est pas le bon élément, je fais à nouveau une recherche, mais au final ça tourne en boucle. La fonction Find semble redémarrer à la première trouvée à chaque fois (alors qu'en VBA, elle redémarre par défaut à la dernière cellule trouvée)
Peut-être y a-t-il des paramètres à mettre mais je ne les trouve pas.
Un autre problème est que je ne connais pas le nombre d'éléments dans ma feuille excel et qu'en plus elle n'est pas homogène (les cellules ne sont pas uniformément remplies, par exemple certaines lignes peuvent avoir 1 colonne remplie, d'autres 5 ou 6 ou même plus, mais toutes les cellules "pleines" sont adjacentes)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 7 janv. 2009 à 21:13
Salut
Oui, Find commence ... depuis le début et fournit une référence de cellule.
Après avoir identifié la première cellule correspondant à la recherche, si tu désires poursuivre la recherche, il te faut utiliser la fonction FindNext sur la cellule pointée.
De plus, il faudra mémoriser la première cellule trouvée car le FindNext repartira à zéro en fin de recherche --> Il faudra le comparer à cette cellule initialement trouvée.
Tout ceci est expliqué dans l'aide de Excel pour la fonction Find :
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = . FindNext (c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Vala
Jack, =fr MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Vous n’avez pas trouvé la réponse que vous recherchez ?