VBA - Lire une liste par le bas .... Find ? boucle ? For i = 1 To Application.CountIf(Plg, "55000")

Le
Patrednef
Bonsoir à tous,

je sollicite nos génereux contributeurs .
Un petit problème que je n'arrive pas à résoudre avec Find et Findnex=
t
Je sais que find conserve les paramçetres entre les appels. mais
pas findnext ?
Ce que je cherche à réaliser ce soir:

Titre est en A1

je cherche à faire un fichier txt qui contient les 3 derniers numéros
de lignes d'un code en particulier (On prend comme exemple le 55000)

Dans la colonne A il peut y avoir des dizaines, ou des centaines voir
des milliers de codes (et donc de lignes)
Je cherche à lister dans un fichier Txt les 3 derniers 55000 (en fait
la ligne de ces 3 derniers) de cette liste
Par exemple, ci dessous, il faudrait commencer par la fin de la liste
et lister les lignes:
11
9
7
Comme cela en colonne, ne prenant pas en compte ici le 4ème code 55000
qui se trouve sur la ligne 5
Ce qui correspond aux lignes, 11,9 et 7 ou se trouvent les derniers
55000

titre
20120
20120
20120
55000
20120
55000
22156
55000
11000
55000
22120

Je fais avec Find et findnext, car les boucles me semblent trop
longues si la liste vient à dépasser quelques milliers de codes (enfin
je pense)
Le paramêtre searchdirection:=xlPrevious fonctionne bien avec Find,
mais ne fonctionne pas, il me semble, avec FindNext

je sais gérer le fichier texe, l'inputbox avec sa gestion d'erreur
pour choisir le "55000" ainsi que la Plage (Plg) ou se trouvent les
données, (Set Plg = .Range("A2", .Range("A2").End(xlDown)))

pouvez-vous me donner le chemin et la forme pour faire cela, le but
étant d'afficher par la suite les 3 dernières factures du client
55000, celles ci étant dans un tableau à colonne, trié par date
croissant (depuis le 01/01 jusqu'à la dernière date disponible)

Je vous remercie vivement de votre coup de main, je reste à l'écoute
de vos suggestions, toujours Excellente !!!

Bien à vous,

PatRednef
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #23903721
bonjour PatRednef,

For i = Range("A65536").End(xlUp).Row To Range("A65536").End(xlUp).Row - 3 Step -1
x = Range("A" & i)
Next



--
isabelle
Patrednef
Le #23903831
Bonsoir Isabelle,

Merci pour ta réponse, mais cette boucle (la valeur x) me donne que
les 3 derniers chiffres de la colonne, je cherche le numéro de ligne
des 3 derniers 55000 dans la liste, soit les réponses 11, 9 et 7 qui
sont le numéro des lignes des 3 derniers "55000" dans cette liste

Dans ma boucle, ou par find je cherche:

"trouve moi les 3 dernieres fois ou apparait le code 55000, et donne
moi alors le numéo de chacune de ces lignes, en commencant par la
ligne la plus basse jusqu'à la plus haute, attention, si il n'y a que
un seul code "55000", ne me donner qu'un seul numéro de ligne, ou si
2, alors que deux numéros de ligne

Merci pour votre aide, au plaisir de vous lire

PatRednef


On 25 oct, 19:47, isabelle
bonjour PatRednef,

For i = Range("A65536").End(xlUp).Row To Range("A65536").End(xlUp).Row - 3 Step -1
x = Range("A" & i)
Next

--
isabelle
MichD
Le #23903961
Bonjour,

Une autre approche :

'-------------------------------------------
Sub test()
Dim V As Double, A As Integer
Dim Rg As Range, X As String

'Tu détermine la valeur recherchée dans la feuille
V = 55000

With Worksheets("Feuil2") 'Nom feuille à adapter
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

For A = 1 To 3
X = X & Evaluate("LARGE(IF(" & Rg.Address & "=" & _
V & ",ROW(" & Rg.Address & "))," & A & ")") & ", "
Next
If X <> "" Then
X = Left(X, Len(X) - 2)
MsgBox "Les 3 lignes où on retrouve la valeur """ & V & _
""" par ordre décroissant sont : " & X
Else
MsgBox "La valeur n'a pas été trouvé dans la plage."
End If
End Sub
'-------------------------------------------



MichD
------------------------------------------
"Patrednef" a écrit dans le message de groupe de discussion :


Bonsoir à tous,

je sollicite nos génereux contributeurs ....
Un petit problème que je n'arrive pas à résoudre avec Find et Findnext
Je sais que find conserve les paramçetres entre les appels.... mais
pas findnext ?
Ce que je cherche à réaliser ce soir:

Titre est en A1

je cherche à faire un fichier txt qui contient les 3 derniers numéros
de lignes d'un code en particulier (On prend comme exemple le 55000)

Dans la colonne A il peut y avoir des dizaines, ou des centaines voir
des milliers de codes (et donc de lignes)
Je cherche à lister dans un fichier Txt les 3 derniers 55000 (en fait
la ligne de ces 3 derniers) de cette liste
Par exemple, ci dessous, il faudrait commencer par la fin de la liste
et lister les lignes:
11
9
7
Comme cela en colonne, ne prenant pas en compte ici le 4ème code 55000
qui se trouve sur la ligne 5
Ce qui correspond aux lignes, 11,9 et 7 ou se trouvent les derniers
55000

titre
20120
20120
20120
55000
20120
55000
22156
55000
11000
55000
22120

Je fais avec Find et findnext, car les boucles me semblent trop
longues si la liste vient à dépasser quelques milliers de codes (enfin
je pense)
Le paramêtre searchdirection:=xlPrevious fonctionne bien avec Find,
mais ne fonctionne pas, il me semble, avec FindNext

je sais gérer le fichier texe, l'inputbox avec sa gestion d'erreur
pour choisir le "55000" ainsi que la Plage (Plg) ou se trouvent les
données, (Set Plg = .Range("A2", .Range("A2").End(xlDown)))

pouvez-vous me donner le chemin et la forme pour faire cela, le but
étant d'afficher par la suite les 3 dernières factures du client
55000, celles ci étant dans un tableau à colonne, trié par date
croissant (depuis le 01/01 jusqu'à la dernière date disponible)

Je vous remercie vivement de votre coup de main, je reste à l'écoute
de vos suggestions, toujours Excel...lente !!!

Bien à vous,

PatRednef
MichD
Le #23904371
Bonjour,

Une autre approche :

'-------------------------------------------
Sub test()
Dim V As Double, A As Integer
Dim Rg As Range, X As String

'Tu détermine la valeur recherchée dans la feuille
V = 55000

With Worksheets("Feuil2") 'Nom feuille à adapter
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

For A = 1 To 3
X = X & Evaluate("LARGE(IF(" & Rg.Address & "=" & _
V & ",ROW(" & Rg.Address & "))," & A & ")") & ", "
Next
If X <> "" Then
X = Left(X, Len(X) - 2)
MsgBox "Les 3 lignes où on retrouve la valeur """ & V & _
""" par ordre décroissant sont : " & X
Else
MsgBox "La valeur n'a pas été trouvé dans la plage."
End If
End Sub
'-------------------------------------------



MichD
------------------------------------------
"Patrednef" a écrit dans le message de groupe de discussion :


Bonsoir à tous,

je sollicite nos génereux contributeurs ....
Un petit problème que je n'arrive pas à résoudre avec Find et Findnext
Je sais que find conserve les paramçetres entre les appels.... mais
pas findnext ?
Ce que je cherche à réaliser ce soir:

Titre est en A1

je cherche à faire un fichier txt qui contient les 3 derniers numéros
de lignes d'un code en particulier (On prend comme exemple le 55000)

Dans la colonne A il peut y avoir des dizaines, ou des centaines voir
des milliers de codes (et donc de lignes)
Je cherche à lister dans un fichier Txt les 3 derniers 55000 (en fait
la ligne de ces 3 derniers) de cette liste
Par exemple, ci dessous, il faudrait commencer par la fin de la liste
et lister les lignes:
11
9
7
Comme cela en colonne, ne prenant pas en compte ici le 4ème code 55000
qui se trouve sur la ligne 5
Ce qui correspond aux lignes, 11,9 et 7 ou se trouvent les derniers
55000

titre
20120
20120
20120
55000
20120
55000
22156
55000
11000
55000
22120

Je fais avec Find et findnext, car les boucles me semblent trop
longues si la liste vient à dépasser quelques milliers de codes (enfin
je pense)
Le paramêtre searchdirection:=xlPrevious fonctionne bien avec Find,
mais ne fonctionne pas, il me semble, avec FindNext

je sais gérer le fichier texe, l'inputbox avec sa gestion d'erreur
pour choisir le "55000" ainsi que la Plage (Plg) ou se trouvent les
données, (Set Plg = .Range("A2", .Range("A2").End(xlDown)))

pouvez-vous me donner le chemin et la forme pour faire cela, le but
étant d'afficher par la suite les 3 dernières factures du client
55000, celles ci étant dans un tableau à colonne, trié par date
croissant (depuis le 01/01 jusqu'à la dernière date disponible)

Je vous remercie vivement de votre coup de main, je reste à l'écoute
de vos suggestions, toujours Excel...lente !!!

Bien à vous,

PatRednef
MichD
Le #23904361
Si tu préfères la méthode Find...FindNext


'----------------------------------------------
Sub test()

Dim V As Double, A As Integer, T As String
Dim S As Integer, Adr As String

'Tu détermine la valeur recherchée dans la feuille
V = 55000

With Worksheets("Feuil2") 'Nom feuille à adapter
With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
S = Application.CountIf(.Cells, V)
Set trouve = .Find(What:=V, LookIn:=xlValues, _
lookat:=xlWhole)
If Not trouve Is Nothing Then
Adr = trouve.Address
Do
A = A + 1
If A > S - 3 Then
T = trouve.Row & ", " & T
End If
Set trouve = .FindNext(trouve)
Loop Until trouve.Address = Adr
End If
End With
End With
If T <> "" Then
T = Left(T, Len(T) - 2)
MsgBox "Les 3 dernières lignes, s'il y a lieu , " & _
"par odre décroissant : " & T
Else
MsgBox "Rien trouvé."
End If
End Sub
'----------------------------------------------



MichD
------------------------------------------
"MichD" a écrit dans le message de groupe de discussion : j86vo7$pv9$

Bonjour,

Une autre approche :

'-------------------------------------------
Sub test()
Dim V As Double, A As Integer
Dim Rg As Range, X As String

'Tu détermine la valeur recherchée dans la feuille
V = 55000

With Worksheets("Feuil2") 'Nom feuille à adapter
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

For A = 1 To 3
X = X & Evaluate("LARGE(IF(" & Rg.Address & "=" & _
V & ",ROW(" & Rg.Address & "))," & A & ")") & ", "
Next
If X <> "" Then
X = Left(X, Len(X) - 2)
MsgBox "Les 3 lignes où on retrouve la valeur """ & V & _
""" par ordre décroissant sont : " & X
Else
MsgBox "La valeur n'a pas été trouvé dans la plage."
End If
End Sub
'-------------------------------------------



MichD
------------------------------------------
"Patrednef" a écrit dans le message de groupe de discussion :


Bonsoir à tous,

je sollicite nos génereux contributeurs ....
Un petit problème que je n'arrive pas à résoudre avec Find et Findnext
Je sais que find conserve les paramçetres entre les appels.... mais
pas findnext ?
Ce que je cherche à réaliser ce soir:

Titre est en A1

je cherche à faire un fichier txt qui contient les 3 derniers numéros
de lignes d'un code en particulier (On prend comme exemple le 55000)

Dans la colonne A il peut y avoir des dizaines, ou des centaines voir
des milliers de codes (et donc de lignes)
Je cherche à lister dans un fichier Txt les 3 derniers 55000 (en fait
la ligne de ces 3 derniers) de cette liste
Par exemple, ci dessous, il faudrait commencer par la fin de la liste
et lister les lignes:
11
9
7
Comme cela en colonne, ne prenant pas en compte ici le 4ème code 55000
qui se trouve sur la ligne 5
Ce qui correspond aux lignes, 11,9 et 7 ou se trouvent les derniers
55000

titre
20120
20120
20120
55000
20120
55000
22156
55000
11000
55000
22120

Je fais avec Find et findnext, car les boucles me semblent trop
longues si la liste vient à dépasser quelques milliers de codes (enfin
je pense)
Le paramêtre searchdirection:=xlPrevious fonctionne bien avec Find,
mais ne fonctionne pas, il me semble, avec FindNext

je sais gérer le fichier texe, l'inputbox avec sa gestion d'erreur
pour choisir le "55000" ainsi que la Plage (Plg) ou se trouvent les
données, (Set Plg = .Range("A2", .Range("A2").End(xlDown)))

pouvez-vous me donner le chemin et la forme pour faire cela, le but
étant d'afficher par la suite les 3 dernières factures du client
55000, celles ci étant dans un tableau à colonne, trié par date
croissant (depuis le 01/01 jusqu'à la dernière date disponible)

Je vous remercie vivement de votre coup de main, je reste à l'écoute
de vos suggestions, toujours Excel...lente !!!

Bien à vous,

PatRednef
isabelle
Le #23904231
voilà,

Sub Macro1()
z = 55000
With Worksheets(1)
nb = Application.CountIf(.Range("A:A"), z)
Select Case nb
Case Is > 3: nb = 3
Case Is = 2: nb = 2
Case Is = 1: nb = 1
End Select

n = .Range("A65536").End(xlUp).Row + 1
For i = 1 To nb
With .Range("a1:a" & n - 1)
Set c = .Find(z, LookIn:=xlValues, SearchDirection:=xlPrevious)
If Not c Is Nothing Then
n = c.Row: LesLignes = LesLignes & n & ", "
MsgBox n
End If
End With
Next
End With
MsgBox LesLignes
End Sub





--
isabelle



Le 2011-10-25 13:58, Patrednef a écrit :
Bonsoir Isabelle,

Merci pour ta réponse, mais cette boucle (la valeur x) me donne que
les 3 derniers chiffres de la colonne, je cherche le numéro de ligne
des 3 derniers 55000 dans la liste, soit les réponses 11, 9 et 7 qui
sont le numéro des lignes des 3 derniers "55000" dans cette liste

Dans ma boucle, ou par find je cherche:

"trouve moi les 3 dernieres fois ou apparait le code 55000, et donne
moi alors le numéo de chacune de ces lignes, en commencant par la
ligne la plus basse jusqu'à la plus haute, attention, si il n'y a que
un seul code "55000", ne me donner qu'un seul numéro de ligne, ou si
2, alors que deux numéros de ligne

Merci pour votre aide, au plaisir de vous lire

PatRednef
Patrednef
Le #23911131
Bonsoir et merci à vous 2

Toutes les solutions répondent à ma demande, même si le chemin est
différent, le find findnext de Denis semble un peu plus rapide sur des
milliers de codes clients, mais la solution d Isabelle est plus proche
de ma demande


merci a nouveau de votre aide si précieuse

Au plaisir de vous lire ou de vous questionner !!!!

Bonne soirée

Patrednef


5 oct, 21:30, "MichD"
Si tu préfères la méthode Find...FindNext

'----------------------------------------------
Sub test()

Dim V As Double, A As Integer, T As String
Dim S As Integer, Adr As String

'Tu détermine la valeur recherchée dans la feuille
V = 55000

With Worksheets("Feuil2") 'Nom feuille à adapter
    With .Range("A1:A" & .Range("A65536").End(xlUp).Row)
        S = Application.CountIf(.Cells, V)
        Set trouve = .Find(What:=V, LookIn:=xlValues, _
                                    l ookat:=xlWhole)
        If Not trouve Is Nothing Then
            Adr = trouve.Address
            Do
                A = A + 1
                If A > S - 3 Then
                    T = trouve.Row & ", " & T
                End If
                Set trouve = .FindNext(trouve)
            Loop Until trouve.Address = Adr
        End If
    End With
End With
If T <> "" Then
    T = Left(T, Len(T) - 2)
    MsgBox "Les 3 dernières lignes, s'il y a lieu , " & _
        "par odre décroissant : " & T
Else
    MsgBox "Rien trouvé."
End If
End Sub
'----------------------------------------------

MichD
------------------------------------------
"MichD"  a écrit dans le message de groupe de discussion : j86vo7$pv.

Bonjour,

Une autre approche :

'-------------------------------------------
Sub test()
Dim V As Double, A As Integer
Dim Rg As Range, X As String

'Tu détermine la valeur recherchée dans la feuille
V = 55000

With Worksheets("Feuil2") 'Nom feuille à adapter
    Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

For A = 1 To 3
    X = X & Evaluate("LARGE(IF(" & Rg.Address & "=" & _
        V & ",ROW(" & Rg.Address & "))," & A & ")") & ", "
Next
If X <> "" Then
    X = Left(X, Len(X) - 2)
    MsgBox "Les 3 lignes où on retrouve la valeur """ & V & _
        """ par ordre décroissant sont : " & X
Else
    MsgBox "La valeur n'a pas été trouvé dans la plage."
End If
End Sub
'-------------------------------------------

MichD
------------------------------------------
"Patrednef"  a écrit dans le message de groupe de discussion :


Bonsoir à tous,

je sollicite nos génereux contributeurs ....
Un petit problème que je n'arrive pas à résoudre avec Find et Findn ext
Je sais que find conserve les paramçetres entre les appels.... mais
pas findnext ?
Ce que je cherche à réaliser ce soir:

Titre est en A1

je cherche à faire un fichier txt qui contient les 3 derniers numéros
de lignes d'un code en particulier (On prend comme exemple le 55000)

Dans la colonne A il peut y avoir des dizaines, ou des centaines voir
des milliers de codes (et donc de lignes)
Je cherche à lister dans un fichier Txt les 3 derniers 55000 (en fait
la ligne de ces 3 derniers) de cette liste
Par exemple, ci dessous, il faudrait commencer par la fin de la liste
et lister les lignes:
11
9
7
Comme cela en colonne, ne prenant pas en compte ici le 4ème code 55000
qui se trouve sur la ligne 5
Ce qui correspond aux lignes, 11,9 et 7 ou se trouvent les derniers
55000

titre
20120
20120
20120
55000
20120
55000
22156
55000
11000
55000
22120

Je fais avec Find et findnext, car les boucles me semblent trop
longues si la liste vient à dépasser quelques milliers de codes (enfi n
je pense)
Le paramêtre searchdirection:=xlPrevious fonctionne bien avec Find,
mais ne fonctionne pas, il me semble, avec FindNext

je sais gérer le fichier texe, l'inputbox avec sa gestion d'erreur
pour choisir le "55000" ainsi que la Plage (Plg) ou se trouvent les
données, (Set Plg = .Range("A2", .Range("A2").End(xlDown)))

pouvez-vous me donner le chemin et la forme pour faire cela, le but
étant d'afficher par la suite les 3 dernières factures du client
55000, celles ci étant dans un tableau à colonne, trié par date
croissant (depuis le 01/01 jusqu'à la dernière date disponible)

Je vous remercie vivement de votre coup de main, je reste à l'écoute
de vos suggestions, toujours Excel...lente !!!

Bien à vous,

PatRednef
Publicité
Poster une réponse
Anonyme