VBA Fonction Find
Résolu
dan03
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
dan03 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
dan03 Messages postés 19 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je débute en VBA
Je voudrais trouver la ligne d'une variable dans la colonne 2 (B)
Mon code:
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
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 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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)
-
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-
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?- 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 - Bonjour,
mieux vaut utiliser le lien proposé par cs_Le Piverts
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel
-
-
-
Merci pour votre aide
Mais personne ne m'a donné un exemple avec Find et l'argument After
J'aimerai un exemple concret
Cordialement-
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à- 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
-
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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