Problème avec procédure .find

etoumat Messages postés 54 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 5 juillet 2007 - 21 mars 2007 à 12:02
cs_Fremarx Messages postés 53 Date d'inscription vendredi 31 mars 2006 Statut Membre Dernière intervention 23 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) ......

Voila ma procédure :

   columns("E:E").Find(what:=act.Text, after:=ActiveCell, LookIn:=xlValues, lookat:= _
   xlPart, searchorder:=xlByColumns, searchdirection:=xlDown).Activate

Le problème est qu'ici vba cherche dans toute la colonne E ce qui ne m'arrange pas du tout

Quelqu'un a t-il une idée ??? Merci

4 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
21 mars 2007 à 13:13
Salut, hé bien avec le méyhode find c'est pas possible!

En revanche tu peux peut-être faire une boucle!
For i 41 to n (jusqu'où tu veux) Step 10

cells(i,5)....

Next

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
etoumat Messages postés 54 Date d'inscription vendredi 2 février 2007 Statut Membre Dernière intervention 5 juillet 2007
21 mars 2007 à 13:49
oui je sait j'ai déjà essayé avec une boucle mais s'est carément plus long...

Merci quand meme
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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

~ <small> Mortalino ~ Colorisation automatique </small>

Tu peux retrouver mon Snippet ICI

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
0
cs_Fremarx Messages postés 53 Date d'inscription vendredi 31 mars 2006 Statut Membre Dernière intervention 23 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

  "LIFE GOES ON"
0
Rejoignez-nous