Recherche de la derniere ligne avec le filtre automatique

Le
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
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
Daniel.C
Le #21610911
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
PAN GOT
Le #21611091
Bonsoir,
çà fonctionne nickel.
Merci et bonne soirée à tous.
Patrick

"Daniel.C" 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




michdenis
Le #21611081
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" :
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
JB
Le #21611071
Bonsoir,

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

JB
http://boisgontierjacques.free.fr/

On 22 avr, 18:20, "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:=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
Caetera
Le #21614451
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
PAN GOT
Le #21615211
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" 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" 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

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

"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

Caetera
Le #21615741
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
Publicité
Poster une réponse
Anonyme