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

Recherche de la derniere ligne avec le filtre automatique

8 réponses
Avatar
PAN GOT
Bonjour, bonsoir
J'ai un petit bug sur ces lignes de codes.
J'ai mon entête de tableau à la ligne 6. J'ai X lignes dans mon tableau.
J'ai choisi la colonne "N" pour ma recherche de derniere ligne parce que les
cellules des autres colonnes ne sont pas forcement remplies.
Cette macro est déclanchée par l'évenement "Worksheet_Calculate()".
cette macro fonctionne bien tant que je ne fait pas un filtre automatique
(positionné sur la ligne 6).
Si je fait un filtre automatique qui ne contient pas la derniere ligne du
tableau, alors la valeur renvoyée pour Derlign = 6.
Je peux mettre arbitrairement une valeur maxi mais je cherchais justement à
éviter ça.
Si quelqu'un a une solution ou une idée.
D'avance, merci.
Patrick

Sub Prevision()
'on enregistre la position actuelle
Position = ActiveCell.Address
'gele des evenements
Application.EnableEvents = False
'gele de l'affichage
Application.ScreenUpdating = False
'initialisation des variables
Col_AA = 27
Col_AO = 41

'derniere ligne du tableau
Derlign = ActiveSheet.Range("N6:N65000").Find(What:="*", LookIn:=xlFormulas,
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'On se positionne sur le haut de la colonne
Range("AA7").Select
Do
'deplace la selection
ActiveCell.Offset(rowOffset:=1).Activate
'definit la reference
Select Case Cells(Selection.Row, Col_AO).Value
Case "Validé TQC" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray50
Case "Supprimé" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray25
Case Else
Cells(Selection.Row, Col_AA).Interior.Pattern = xlSolid
End Select
'si la selection correspond au bas du tableau, sortie de la boucle
If Selection.Row = Derlign Then Exit Do
Loop
'retour à la position initiale
Range(Position).Select
'réactivation de l'affichage
Application.ScreenUpdating = True
'réactivation des événements
Application.EnableEvents = True
End Sub

8 réponses

Avatar
Daniel.C
Bonjour.
Cette macro te donne la dernière ligne filtrée :

Sub test1()
Dim Plage As Range, ligne As Long
Set Plage = Intersect([N:N],
[_filterdatabase]).SpecialCells(xlCellTypeVisible)
Set Plage = Plage.Areas(Plage.Areas.Count)
ligne = Plage.Rows.Count + Plage.Row - 1
If ligne > [_filterdatabase].Row Then
MsgBox ligne
Else
MsgBox "Pas de ligne filtrées"
End If
End Sub

Daniel

Bonjour, bonsoir
J'ai un petit bug sur ces lignes de codes.
J'ai mon entête de tableau à la ligne 6. J'ai X lignes dans mon tableau.
J'ai choisi la colonne "N" pour ma recherche de derniere ligne parce que les
cellules des autres colonnes ne sont pas forcement remplies.
Cette macro est déclanchée par l'évenement "Worksheet_Calculate()".
cette macro fonctionne bien tant que je ne fait pas un filtre automatique
(positionné sur la ligne 6).
Si je fait un filtre automatique qui ne contient pas la derniere ligne du
tableau, alors la valeur renvoyée pour Derlign = 6.
Je peux mettre arbitrairement une valeur maxi mais je cherchais justement à
éviter ça.
Si quelqu'un a une solution ou une idée.
D'avance, merci.
Patrick

Sub Prevision()
'on enregistre la position actuelle
Position = ActiveCell.Address
'gele des evenements
Application.EnableEvents = False
'gele de l'affichage
Application.ScreenUpdating = False
'initialisation des variables
Col_AA = 27
Col_AO = 41

'derniere ligne du tableau
Derlign = ActiveSheet.Range("N6:N65000").Find(What:="*", LookIn:=xlFormulas,
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'On se positionne sur le haut de la colonne
Range("AA7").Select
Do
'deplace la selection
ActiveCell.Offset(rowOffset:=1).Activate
'definit la reference
Select Case Cells(Selection.Row, Col_AO).Value
Case "Validé TQC" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray50
Case "Supprimé" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray25
Case Else
Cells(Selection.Row, Col_AA).Interior.Pattern = xlSolid
End Select
'si la selection correspond au bas du tableau, sortie de la boucle
If Selection.Row = Derlign Then Exit Do
Loop
'retour à la position initiale
Range(Position).Select
'réactivation de l'affichage
Application.ScreenUpdating = True
'réactivation des événements
Application.EnableEvents = True
End Sub
Avatar
PAN GOT
Bonsoir,
çà fonctionne nickel.
Merci et bonne soirée à tous.
Patrick

"Daniel.C" a écrit dans le message de news:
OK%
Bonjour.
Cette macro te donne la dernière ligne filtrée :

Sub test1()
Dim Plage As Range, ligne As Long
Set Plage = Intersect([N:N],
[_filterdatabase]).SpecialCells(xlCellTypeVisible)
Set Plage = Plage.Areas(Plage.Areas.Count)
ligne = Plage.Rows.Count + Plage.Row - 1
If ligne > [_filterdatabase].Row Then
MsgBox ligne
Else
MsgBox "Pas de ligne filtrées"
End If
End Sub

Daniel

Bonjour, bonsoir
J'ai un petit bug sur ces lignes de codes.
J'ai mon entête de tableau à la ligne 6. J'ai X lignes dans mon tableau.
J'ai choisi la colonne "N" pour ma recherche de derniere ligne parce que
les cellules des autres colonnes ne sont pas forcement remplies.
Cette macro est déclanchée par l'évenement "Worksheet_Calculate()".
cette macro fonctionne bien tant que je ne fait pas un filtre automatique
(positionné sur la ligne 6).
Si je fait un filtre automatique qui ne contient pas la derniere ligne du
tableau, alors la valeur renvoyée pour Derlign = 6.
Je peux mettre arbitrairement une valeur maxi mais je cherchais justement
à éviter ça.
Si quelqu'un a une solution ou une idée.
D'avance, merci.
Patrick

Sub Prevision()
'on enregistre la position actuelle
Position = ActiveCell.Address
'gele des evenements
Application.EnableEvents = False
'gele de l'affichage
Application.ScreenUpdating = False
'initialisation des variables
Col_AA = 27
Col_AO = 41

'derniere ligne du tableau
Derlign = ActiveSheet.Range("N6:N65000").Find(What:="*",
LookIn:=xlFormulas, SearchOrder:=xlByRows,
SearchDirection:=xlPrevious).Row
'On se positionne sur le haut de la colonne
Range("AA7").Select
Do
'deplace la selection
ActiveCell.Offset(rowOffset:=1).Activate
'definit la reference
Select Case Cells(Selection.Row, Col_AO).Value
Case "Validé TQC" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray50
Case "Supprimé" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray25
Case Else
Cells(Selection.Row, Col_AA).Interior.Pattern = xlSolid
End Select
'si la selection correspond au bas du tableau, sortie de la boucle
If Selection.Row = Derlign Then Exit Do
Loop
'retour à la position initiale
Range(Position).Select
'réactivation de l'affichage
Application.ScreenUpdating = True
'réactivation des événements
Application.EnableEvents = True
End Sub




Avatar
michdenis
Bonjour,

Tu peux utiliser ceci pour trouver la dernière ligne de la colonne N

A )
Derlign = Worksheets("Feuil1").AutoFilter.Range.Rows.Count + 5

Ceci fonctionne SI ET SEULEMENT SI le filtre automatique a déjà
été exécuté. Cette méthode retourne la dernière ligne de la plage
sur laquelle le dernier filtre a été exécuté. Par exemple, si depuis
le dernier filtre, tu as ajouté des nouvelles lignes à ton tableau de
données, elles ne seront pas prises en compte par cette façon de faire.

B ) Quand tu utilises cette méthode, pourquoi ne pas faire la recherche sur
la totalité de la plage :

With Worsheets("NomDeLaFeuille")
DerLig =.Range("A:AG").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With

La procédure va se charger de trouver la dernière ligne peu importe
la colonne la plus longue.



"PAN GOT" a écrit dans le message de groupe de discussion
:
Bonjour, bonsoir
J'ai un petit bug sur ces lignes de codes.
J'ai mon entête de tableau à la ligne 6. J'ai X lignes dans mon tableau.
J'ai choisi la colonne "N" pour ma recherche de derniere ligne parce que les
cellules des autres colonnes ne sont pas forcement remplies.
Cette macro est déclanchée par l'évenement "Worksheet_Calculate()".
cette macro fonctionne bien tant que je ne fait pas un filtre automatique
(positionné sur la ligne 6).
Si je fait un filtre automatique qui ne contient pas la derniere ligne du
tableau, alors la valeur renvoyée pour Derlign = 6.
Je peux mettre arbitrairement une valeur maxi mais je cherchais justement à
éviter ça.
Si quelqu'un a une solution ou une idée.
D'avance, merci.
Patrick

Sub Prevision()
'on enregistre la position actuelle
Position = ActiveCell.Address
'gele des evenements
Application.EnableEvents = False
'gele de l'affichage
Application.ScreenUpdating = False
'initialisation des variables
Col_AA = 27
Col_AO = 41

'derniere ligne du tableau
Derlign = ActiveSheet.Range("N6:N65000").Find(What:="*", LookIn:=xlFormulas,
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'On se positionne sur le haut de la colonne
Range("AA7").Select
Do
'deplace la selection
ActiveCell.Offset(rowOffset:=1).Activate
'definit la reference
Select Case Cells(Selection.Row, Col_AO).Value
Case "Validé TQC" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray50
Case "Supprimé" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray25
Case Else
Cells(Selection.Row, Col_AA).Interior.Pattern = xlSolid
End Select
'si la selection correspond au bas du tableau, sortie de la boucle
If Selection.Row = Derlign Then Exit Do
Loop
'retour à la position initiale
Range(Position).Select
'réactivation de l'affichage
Application.ScreenUpdating = True
'réactivation des événements
Application.EnableEvents = True
End Sub
Avatar
JB
Bonsoir,

DerLigne=
Cells([_filterdatabase].Offset(1).SpecialCells(xlCellTypeLastCell).Row,
1).Row

JB
http://boisgontierjacques.free.fr/

On 22 avr, 18:20, "PAN GOT" wrote:
Bonjour, bonsoir
J'ai un petit bug sur ces lignes de codes.
J'ai mon ent te de tableau la ligne 6. J'ai X lignes dans mon tableau.
J'ai choisi la colonne "N" pour ma recherche de derniere ligne parce que les
cellules des autres colonnes ne sont pas forcement remplies.
Cette macro est d clanch e par l' venement "Worksheet_Calculate()".
cette macro fonctionne bien tant que je ne fait pas un filtre automatique
(positionn sur la ligne 6).
Si je fait un filtre automatique qui ne contient pas la derniere ligne du
tableau, alors la valeur renvoy e pour Derlign = 6.
Je peux mettre arbitrairement une valeur maxi mais je cherchais justement
viter a.
Si quelqu'un a une solution ou une id e.
D'avance, merci.
Patrick

Sub Prevision()
'on enregistre la position actuelle
Position = ActiveCell.Address
'gele des evenements
Application.EnableEvents = False
'gele de l'affichage
Application.ScreenUpdating = False
'initialisation des variables
Col_AA = 27
Col_AO = 41

'derniere ligne du tableau
Derlign = ActiveSheet.Range("N6:N65000").Find(What:="*", LookIn:=xl Formulas,
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'On se positionne sur le haut de la colonne
Range("AA7").Select
Do
    'deplace la selection
    ActiveCell.Offset(rowOffset:=1).Activate
    'definit la reference
    Select Case Cells(Selection.Row, Col_AO).Value
    Case "Valid TQC" '
        Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray5 0
    Case "Supprim " '
        Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray2 5
    Case Else
        Cells(Selection.Row, Col_AA).Interior.Pattern = xlSolid
    End Select
    'si la selection correspond au bas du tableau, sortie de la boucl e
    If Selection.Row = Derlign Then Exit Do
Loop
'retour la position initiale
Range(Position).Select
'r activation de l'affichage
Application.ScreenUpdating = True
'r activation des v nements
Application.EnableEvents = True
End Sub
Avatar
Caetera
J'ai choisi la colonne "N" pour ma recherche de derniere ligne parce que les
cellules des autres colonnes ne sont pas forcement remplies.



***********************

derL = [N:N].End(xlUp).Row

PS : la méthode avec "SpecialCells(xlCellTypeLastCell)" est à déconseiller
absolument !

Etc
Avatar
PAN GOT
Bonjour,
Je n'utilise pas toutes les colonnes du tableau pour ma recherche de
derniere ligne parce que sous mon tableau principale, j'ai un autre petit
tableau qui fait une synthese sur certaines des données et sur d'autres
colonnes, j'ai des totaux.
Je vais assayer ces differentes options.
Merci beaucoups
bon WE. A+
Patrick

"michdenis" a écrit dans le message de news:
eKmPa%
Bonjour,

Tu peux utiliser ceci pour trouver la dernière ligne de la colonne N

A )
Derlign = Worksheets("Feuil1").AutoFilter.Range.Rows.Count + 5

Ceci fonctionne SI ET SEULEMENT SI le filtre automatique a déjà
été exécuté. Cette méthode retourne la dernière ligne de la plage
sur laquelle le dernier filtre a été exécuté. Par exemple, si depuis
le dernier filtre, tu as ajouté des nouvelles lignes à ton tableau de
données, elles ne seront pas prises en compte par cette façon de faire.

B ) Quand tu utilises cette méthode, pourquoi ne pas faire la recherche
sur
la totalité de la plage :

With Worsheets("NomDeLaFeuille")
DerLig =.Range("A:AG").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End With

La procédure va se charger de trouver la dernière ligne peu importe
la colonne la plus longue.



"PAN GOT" a écrit dans le message de
groupe de discussion
:
Bonjour, bonsoir
J'ai un petit bug sur ces lignes de codes.
J'ai mon entête de tableau à la ligne 6. J'ai X lignes dans mon tableau.
J'ai choisi la colonne "N" pour ma recherche de derniere ligne parce que
les
cellules des autres colonnes ne sont pas forcement remplies.
Cette macro est déclanchée par l'évenement "Worksheet_Calculate()".
cette macro fonctionne bien tant que je ne fait pas un filtre automatique
(positionné sur la ligne 6).
Si je fait un filtre automatique qui ne contient pas la derniere ligne du
tableau, alors la valeur renvoyée pour Derlign = 6.
Je peux mettre arbitrairement une valeur maxi mais je cherchais justement
à
éviter ça.
Si quelqu'un a une solution ou une idée.
D'avance, merci.
Patrick

Sub Prevision()
'on enregistre la position actuelle
Position = ActiveCell.Address
'gele des evenements
Application.EnableEvents = False
'gele de l'affichage
Application.ScreenUpdating = False
'initialisation des variables
Col_AA = 27
Col_AO = 41

'derniere ligne du tableau
Derlign = ActiveSheet.Range("N6:N65000").Find(What:="*",
LookIn:=xlFormulas,
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'On se positionne sur le haut de la colonne
Range("AA7").Select
Do
'deplace la selection
ActiveCell.Offset(rowOffset:=1).Activate
'definit la reference
Select Case Cells(Selection.Row, Col_AO).Value
Case "Validé TQC" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray50
Case "Supprimé" '
Cells(Selection.Row, Col_AA).Interior.Pattern = xlGray25
Case Else
Cells(Selection.Row, Col_AA).Interior.Pattern = xlSolid
End Select
'si la selection correspond au bas du tableau, sortie de la boucle
If Selection.Row = Derlign Then Exit Do
Loop
'retour à la position initiale
Range(Position).Select
'réactivation de l'affichage
Application.ScreenUpdating = True
'réactivation des événements
Application.EnableEvents = True
End Sub

Avatar
PAN GOT
Bonjour Etc,
Je ne l'ai pas encore essayee mais pourquoi tu deconseille cette methode?
Patrick

"Caetera" <EtiennePloufCahé@wanadoo.fr> a écrit dans le message de news:

J'ai choisi la colonne "N" pour ma recherche de derniere ligne parce que
les cellules des autres colonnes ne sont pas forcement remplies.



***********************

derL = [N:N].End(xlUp).Row

PS : la méthode avec "SpecialCells(xlCellTypeLastCell)" est à déconseiller
absolument !

Etc

Avatar
Caetera
PS : la méthode avec "SpecialCells(xlCellTypeLastCell)" est à déconseiller
absolument !



Je ne l'ai pas encore essayee mais pourquoi tu deconseille cette methode?



Parceque si une quelconque cellule, en dehors du tableau, est formatée
différemment ou même si une cellule a eu un contenu quelqonque (même effacé)
c'est cette cellule que XL considèrera comme "xlCellTypeLastCell"
Teste et tu verras le résultat...

Etc