Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

7 réponses
Avatar
Patrednef
Bonsoir =E0 tous,

je sollicite nos g=E9nereux contributeurs ....
Un petit probl=E8me que je n'arrive pas =E0 r=E9soudre avec Find et Findnex=
t
Je sais que find conserve les param=E7etres entre les appels.... mais
pas findnext ?
Ce que je cherche =E0 r=E9aliser ce soir:

Titre est en A1

je cherche =E0 faire un fichier txt qui contient les 3 derniers num=E9ros
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 =E0 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=E8me 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 =E0 d=E9passer quelques milliers de codes (enfin
je pense)
Le param=EAtre searchdirection:=3DxlPrevious fonctionne bien avec Find,
mais ne fonctionne pas, il me semble, avec FindNext

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

pouvez-vous me donner le chemin et la forme pour faire cela, le but
=E9tant d'afficher par la suite les 3 derni=E8res factures du client
55000, celles ci =E9tant dans un tableau =E0 colonne, tri=E9 par date
croissant (depuis le 01/01 jusqu'=E0 la derni=E8re date disponible)

Je vous remercie vivement de votre coup de main, je reste =E0 l'=E9coute
de vos suggestions, toujours Excel...lente !!!

Bien =E0 vous,

PatRednef

7 réponses

Avatar
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
Avatar
Patrednef
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 wrote:
bonjour PatRednef,

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

--
isabelle
Avatar
MichD
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
Avatar
MichD
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
Avatar
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, _
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
Avatar
isabelle
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
Avatar
Patrednef
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" wrote:
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