VBA Fonction Find

Résolu
Bonjour,

Je débute en VBA
Je voudrais trouver la ligne d'une variable dans la colonne 2 (B)
Mon code:
Dim Ligne, An As Integer
      Ligne = Columns(2).Find(AChaineDate, lookat:=xlWhole).Row


La ligne est bien trouvée, mais la prochaine recherche s'effectue à partir de la 1ère ligne de la colonne, (ActiveCell) alors que je voudrais continuer la recherche à la suite
J'ai vu que la fonction Find avait un argument After, mais je n'ai pas réussi à l'utiliser

Pouvez-vous m'aider à modifier mon code, avec quelques explications
Merci Cordialement

5 réponses

  1. Merci de ta réponse
    Mais ce code ne fonctionne pas
    Si AChaineDate existe dans une ligne précédente, Ligne reprend cette ligne
    C'est Pourquoi, je pensais utiliser l'argument After de la fonction Find
    As-tu une idée ?
    Merci
    0
    1. Contributeur
      peut-être pourrais-tu expliquer ce que tu souhaites obtenir?
      sinon, difficile de suggérer comment modifier ton code.
      pourquoi fais-tu cette recherche? que veux tu faire avec la ou les lignes trouvées?
      0
    2. @yg_beBonjour,
      En fait, j'ai 1 colonne A qui contient des Années, et 1 B qui contient Jour et Mois
      Ma variable AChaineDate contient Jour et Mois soit, colonne B
      Je veux récupérer l'Année (colonne A) qui se trouve sur la même ligne que AChaineDate
      Si la valeur AChaineDate est unique dans la colonne B, cela fonctionne avec Find (comme je l'ai fait)
      Mais si AChaineDate existe plusieurs fois, la fonction Find cherchant depuis le début de la colonne m'indique une Année fausse (celle trouvée la première)
      C'est pourquoi, je voulais utiliser l'argument "After", mais je n'ai pas réussi
      En fait, je veux que la recherche se poursuive et non reparte de B1
      0
    3. Contributeur
      @dan03quand tu écris "Je veux récupérer l'Année (colonne A) qui se trouve sur la même ligne que AChaineDate", veux-tu écrire que tu veux récupérer toutes les années? pour en faire quoi?
      0
    4. Contributeur
      @dan03tu trouveras un exemple ici: https://www.commentcamarche.net/faq/18696-vba-recherche-find-avec-retour-multiple
      0
  2. Merci pour votre aide
    Mais personne ne m'a donné un exemple avec Find et l'argument After
    J'aimerai un exemple concret
    Cordialement
    0
    1. Contributeur
      dans le lien donné il y a un exemple concret. C'est à toi de l'adapter!

      Sub Principale()
      Dim Plage As Range
      Dim Lignes(), i As Long
      Dim Texte As String
      Dim Flag As Boolean
      
      Set Plage = Sheets("Feuil1").Range("A1:A20") 'plage de recherche
      Texte = "mot"   'expression cherchée
      Flag = Find_Next(Plage, 
                                  Texte, 
                                   Lignes())  'appel de la fonction
      'si fonction retourne Vrai = expression trouvée dans la plage
      If Flag Then  
           'restitution des lignes correspondantes
          For i = LBound(Lignes) To UBound(Lignes)  
              Debug.Print Lignes(i)
          Next i
      Else
          MsgBox "L'expression : " 
                        & Texte 
                        & " n'a pas été trouvée dans la plage : " 
                        & Plage.Address
      End If
      End Sub
      
      'Sources : Michel_m
      'http://www.commentcamarche.net/forum/affich-31432413-importation-de-donnees-sans-doublons#9
      Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
      Dim Nbre As Integer, Lig As Long, Cptr As Long
      
          Nbre = Application.CountIf(Rng, Texte)
          If Nbre > 0 Then
              ReDim Tbl(Nbre - 1)
              Lig = 1
              For Cptr = 0 To Nbre - 1
                  Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
                  Tbl(Cptr) = Lig
              Next
          Else
              GoTo Absent
          End If
          Find_Next = True
          Exit Function
      Absent:
          Find_Next = False
      End Function


      voilà
      0
    2. Contributeur
      difficile de donner un exemple qui correspond à ce que tu veux réaliser, puisque tu ne l'expliques pas.

      quand tu écris "Je veux récupérer l'Année (colonne A) qui se trouve sur la même ligne que AChaineDate", veux-tu écrire que tu veux récupérer toutes les années? pour en faire quoi?
      0
    3. Contributeur
      @cs_Le PivertVoilà un exemple concret adapter à ta colonne de recherche:

      Option Explicit
      Sub Principale()
      Dim Plage As Range
      Dim Lignes(), i As Long
      Dim Texte As String
      Dim Flag As Boolean
      
      Set Plage = Sheets("Feuil1").Range("B1:B20") 'plage de recherche à adapter
      Texte = "20 mars"   'expression cherchée à adapter
      Flag = Find_Next(Plage, Texte, Lignes()) 'appel de la fonction
      'si fonction retourne Vrai = expression trouvée dans la plage
      If Flag Then
           'restitution des lignes correspondantes
          For i = LBound(Lignes) To UBound(Lignes)
              Debug.Print Lignes(i)
              Range("C" & Lignes(i)).Value = Range("A" & Lignes(i)).Value 'résultat à adapter
          Next i
      Else
          MsgBox "L'expression : " _
                        & Texte _
                        & " n'a pas été trouvée dans la plage : " _
                        & Plage.Address
      End If
      End Sub
      'Sources : Michel_m
      'http://www.commentcamarche.net/forum/affich-31432413-importation-de-donnees-sans-doublons#9
      Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
      Dim Nbre As Integer, Lig As Long, Cptr As Long
      
          Nbre = Application.CountIf(Rng, Texte)
          If Nbre > 0 Then
              ReDim Tbl(Nbre - 1)
              Lig = 1
              For Cptr = 0 To Nbre - 1
                  Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
                  Tbl(Cptr) = Lig
              Next
          Else
              GoTo Absent
          End If
          Find_Next = True
          Exit Function
      Absent:
          Find_Next = False
      End Function
      


      voilà mais la recherche est faite sur une cellule texte et non une date
      0
  3. Malgré vos explications, je n'ai pas réussi
    J'ai du mal exprimé mon problème
    Je vais modifier totalement mon code
    Je vous remercie pour votre aide et je mets le sujet en résolu
    0