etoumat
Messages postés54Date d'inscriptionvendredi 2 février 2007StatutMembreDernière intervention 5 juillet 2007
-
21 mars 2007 à 12:02
cs_Fremarx
Messages postés53Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention23 août 2010
-
13 avril 2007 à 17:06
Bonjour à tous.
J'ai un petit souci avec une procédure find.
En effet je veux que vba recherche une lettre, un mots ou tout autre chose dans une feuille excel. Mais pas dans toute la feuille, uniquement dans la colonne E ( colonne 5) et toute les 10 lignes à partir de la ligne 41. c'est à dire cells(41,5) puis cells(51,5) puis cells(61,5) ......
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 mars 2007 à 15:46
Salut
Drikce, tout est possible
Voici un exemple pour ne rechercher que la colonne E (ne pas toucher la fonction, ne modifier que la sub Exemple, et réitérer l'action sur autant de plage que tu veux) :
Public Function FindWord(ByVal sWord As String, Optional vPlage As Variant, Optional wSheet As Variant = "ActiveSheet") As String()
Dim bVerifPlage As Boolean, rStartCell As Range
If Not wSheet = "ActiveSheet" Then Sheets(wSheet).Select
'vérification de la feuille à traiter
If Not IsMissing(vPlage) Then bVerifPlage = True
'vérification d'une possible plage
Dim cMyAddress As New Collection
Dim sRes() As String
Dim ParseRange() As String
If bVerifPlage = False Then
' s'il n'y pas de plage, on vérifie dans toute la feuille
Cells.Find(What:=sWord, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate: cMyAddress.Add ActiveCell.Address
Set rStartCell = ActiveCell
Do
Cells.FindNext(After:=ActiveCell).Activate: cMyAddress.Add ActiveCell.Address
Loop While ActiveCell.Address <> Range(rStartCell).Address
' on place l'adresse des cellules dans un tableau de données
' il sera facile de savoir après quelles cellules contiennent
' les données recherchées. (où même sélectionner ces cellules)
ReDim sRes(cMyAddress.Count - 1)
For i = 0 To cMyAddress.Count - 1
sRes(i) = cMyAddress.Item(i + 1)
Next i
Else
' s'il y pas une plage, on vérifie seulement dedans
Dim rPlage As Range
Set rPlage = vPlage
' on instancie l'objet (plage) en récupérant sa valeur
ParseRange = Split(CStr(rPlage.Address), ":")
' ici je récupère la dernière cellule de recherche, afin de la sélectionner
' comme ça, le résultat sera chronologique (sinon, la recherche s'effectue
' depuis la cellule sélectionnée)
Range(ParseRange(1)).Select
rPlage.Find(What:=sWord, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate: cMyAddress.Add ActiveCell.Address
Set rStartCell = ActiveCell
Do
rPlage.FindNext(After:=ActiveCell).Activate: cMyAddress.Add ActiveCell.Address
Loop While ActiveCell.Address <> Range(rStartCell.Address).Address
' on place l'adresse des cellules dans un tableau de données
' il sera facile de savoir après quelles cellules contiennent
' les données recherchées. (où même sélectionner ces cellules)
ReDim sRes(cMyAddress.Count - 2)
For i = 0 To cMyAddress.Count - 2
sRes(i) = cMyAddress.Item(i + 1)
Next i
End If
FindWord = sRes: Set cMyAddress = Nothing: Erase sRes
End Function
Sub Exemple_Utilisation()
Dim sResult() As String, l As Integer
sResult = FindWord("b", Range("E1:E65000"), "Feuil1") ' exemple pour la colonne E
For l = 0 To UBound(sResult)
Debug.Print "-" & sResult(l) & "-"
Next l
Erase sResult
End Sub
cs_Fremarx
Messages postés53Date d'inscriptionvendredi 31 mars 2006StatutMembreDernière intervention23 août 2010 13 avril 2007 à 17:06
Salut Mortalino
je veux savoir si tu veux faire une telle recherche dans un fichier TXT que tu as au préalable importé ou ouvert avec un RichTextBox comment tu t'y prendrai.
Merci de me donner un coup de main