VBA Fonction Find

Résolu/Fermé
dan03 Messages postés 31 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 16 décembre 2021 - Modifié le 12 oct. 2020 à 15:33
dan03 Messages postés 31 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 16 décembre 2021 - 15 oct. 2020 à 10:17
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

yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 Ambassadeur 1 551
12 oct. 2020 à 13:31
bonjour,
merci d'utiliser les balises de code quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

exemple:
Dim Ligne as long, An As Integer, trouve1 as range, trouve2 as range

set trouve1=Columns(2).Find(AChaineDate, lookat:=xlWhole)
Ligne = trouve1.Row
set trouve2=Columns(2).FindNext(trouve1)
0
dan03 Messages postés 31 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 16 décembre 2021 2
12 oct. 2020 à 14:18
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
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
12 oct. 2020 à 15:28
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
dan03 Messages postés 31 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 16 décembre 2021 2 > yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024
12 oct. 2020 à 16:00
Bonjour,
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
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551 > dan03 Messages postés 31 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 16 décembre 2021
12 oct. 2020 à 16:06
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
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551 > dan03 Messages postés 31 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 16 décembre 2021
12 oct. 2020 à 16:07
tu trouveras un exemple ici: https://www.commentcamarche.net/faq/18696-vba-recherche-find-avec-retour-multiple
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703 > yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024
12 oct. 2020 à 16:53
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
12 oct. 2020 à 14:26
0
dan03 Messages postés 31 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 16 décembre 2021 2
12 oct. 2020 à 18:18
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
12 oct. 2020 à 19:00
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729 > cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024
Modifié le 13 oct. 2020 à 09:19
Voilà 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
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
12 oct. 2020 à 19:48
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dan03 Messages postés 31 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 16 décembre 2021 2
15 oct. 2020 à 10:17
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