Comment connaître la dernière ligne utilisée ?

Le
Gouap
Bonjour à tous,

Avec la commande "Selection.End (xlDown).Select" j'obtiens la dernière
cellule utilisée et de là, je peux en déduire le nombre de ligne utilisée
sur ma feuille. Seulement pour cela il faut que toutes les lignes soient
visibles ce qui m'interdit d'utilier un filtrage de données.

Existe-t-il un moyen de contourner le problème ?

Exemple :
J'ai une feuille dont la 1ere ligne est une ligne d'entête de colonne, les
50 lignes situées au dessous sont 50 lignes de données et j'applique un
filtre qui va masquer les lignes 5 à 10 + les lignes 25 à 50. Si dans cette
configuration je lance la commande "Selection.End (xlDown).Select" j'obtiens
comme dernière ligne la ligne 24. Comment faire pour obtenir la ligne 50 ?

@+
Philippe
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 #21334791
Bonjour.

essaie :

With ActiveSheet.[_filterdatabase]
If ActiveSheet.FilterMode = True Then
DerLig = .Row + .Rows.Count - 1
Else
DerLig = Cells.Find("*", [IV65536], , , xlByRows,
xlPrevious).Row
End If
End With

Daniel

Bonjour à tous,

Avec la commande "Selection.End (xlDown).Select" j'obtiens la dernière
cellule utilisée et de là, je peux en déduire le nombre de ligne utilisée sur
ma feuille. Seulement pour cela il faut que toutes les lignes soient visibles
ce qui m'interdit d'utilier un filtrage de données.

Existe-t-il un moyen de contourner le problème ?

Exemple :
J'ai une feuille dont la 1ere ligne est une ligne d'entête de colonne, les 50
lignes situées au dessous sont 50 lignes de données et j'applique un filtre
qui va masquer les lignes 5 à 10 + les lignes 25 à 50. Si dans cette
configuration je lance la commande "Selection.End (xlDown).Select" j'obtiens
comme dernière ligne la ligne 24. Comment faire pour obtenir la ligne 50 ?

@+
Philippe
Daniel.C
Le #21334981
ou plutôt :

With ActiveSheet.[_filterdatabase]
If ActiveSheet.FilterMode = True Then
DerLig = Application.Max(.Row + .Rows.Count - 1, _
Cells.Find("*", [IV65536], , , xlByRows, _
xlPrevious).Row)
Else
DerLig = Cells.Find("*", [IV65536], , , xlByRows, _
xlPrevious).Row
End If
End With

Par contre, ça ne résout pas le problème des éventuelles lignes
masquées. Tu peux utiliser :

With ActiveSheet.UsedRange
DerLig = .Row + .Rows.Count - 1
End With

Qui tient compte des lignes masquées et des filtres, mais qui,
malheureusemeent compte aussi les lignes sans valeur si une cellule a
un format différent du standard.

Daniel

Daniel

Bonjour.

essaie :

With ActiveSheet.[_filterdatabase]
If ActiveSheet.FilterMode = True Then
DerLig = .Row + .Rows.Count - 1
Else
DerLig = Cells.Find("*", [IV65536], , , xlByRows, xlPrevious).Row
End If
End With

Daniel

Bonjour à tous,

Avec la commande "Selection.End (xlDown).Select" j'obtiens la dernière
cellule utilisée et de là, je peux en déduire le nombre de ligne utilisée
sur ma feuille. Seulement pour cela il faut que toutes les lignes soient
visibles ce qui m'interdit d'utilier un filtrage de données.

Existe-t-il un moyen de contourner le problème ?

Exemple :
J'ai une feuille dont la 1ere ligne est une ligne d'entête de colonne, les
50 lignes situées au dessous sont 50 lignes de données et j'applique un
filtre qui va masquer les lignes 5 à 10 + les lignes 25 à 50. Si dans cette
configuration je lance la commande "Selection.End (xlDown).Select"
j'obtiens comme dernière ligne la ligne 24. Comment faire pour obtenir la
ligne 50 ?

@+
Philippe
michdenis
Le #21335171
Bonjour,

Tu as essayé quelque chose comme :

'----------------------------------------
Sub test()
Dim DerLig As Long
With Feuil1
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count
Else
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End If
End With
MsgBox DerLig
End Sub
'----------------------------------------



"Gouap"
Bonjour à tous,

Avec la commande "Selection.End (xlDown).Select" j'obtiens la dernière
cellule utilisée et de là, je peux en déduire le nombre de ligne utilisée
sur ma feuille. Seulement pour cela il faut que toutes les lignes soient
visibles ce qui m'interdit d'utilier un filtrage de données.

Existe-t-il un moyen de contourner le problème ?

Exemple :
J'ai une feuille dont la 1ere ligne est une ligne d'entête de colonne, les
50 lignes situées au dessous sont 50 lignes de données et j'applique un
filtre qui va masquer les lignes 5 à 10 + les lignes 25 à 50. Si dans cette
configuration je lance la commande "Selection.End (xlDown).Select" j'obtiens
comme dernière ligne la ligne 24. Comment faire pour obtenir la ligne 50 ?

@+
Philippe
Daniel.C
Le #21335411
Deux choses, Denis :
1. DerLig = .Range("_FilterDataBase").Rows.Count
suppose que le filtre soit sur la ligne 1.

2. Tu peux avoir avoir des valeurs en dehors de la plage filtrée,
éventuellement en dessous.

Daniel

Bonjour,

Tu as essayé quelque chose comme :

'----------------------------------------
Sub test()
Dim DerLig As Long
With Feuil1
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count
Else
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End If
End With
MsgBox DerLig
End Sub
'----------------------------------------



"Gouap"
Bonjour à tous,

Avec la commande "Selection.End (xlDown).Select" j'obtiens la dernière
cellule utilisée et de là, je peux en déduire le nombre de ligne utilisée
sur ma feuille. Seulement pour cela il faut que toutes les lignes soient
visibles ce qui m'interdit d'utilier un filtrage de données.

Existe-t-il un moyen de contourner le problème ?

Exemple :
J'ai une feuille dont la 1ere ligne est une ligne d'entête de colonne, les
50 lignes situées au dessous sont 50 lignes de données et j'applique un
filtre qui va masquer les lignes 5 à 10 + les lignes 25 à 50. Si dans cette
configuration je lance la commande "Selection.End (xlDown).Select" j'obtiens
comme dernière ligne la ligne 24. Comment faire pour obtenir la ligne 50 ?

@+
Philippe
michdenis
Le #21335561
Bon, si tu tiens vraiment à un bout de code qui tient
compte de divers scénario, teste ceci :
(je te dis toute suite, je devrai majorer la note !)
;-)
'------------------------------------
Sub test()
Dim DerLig As Long, LastRow As Long
With Feuil1
LastRow = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count + _
.Range("_FilterDataBase")(1, 1).Row - 1
End If
End With
MsgBox Application.Max(DerLig, LastRow)
End Sub
'------------------------------------



"Daniel.C"
Deux choses, Denis :
1. DerLig = .Range("_FilterDataBase").Rows.Count
suppose que le filtre soit sur la ligne 1.

2. Tu peux avoir avoir des valeurs en dehors de la plage filtrée,
éventuellement en dessous.

Daniel

Bonjour,

Tu as essayé quelque chose comme :

'----------------------------------------
Sub test()
Dim DerLig As Long
With Feuil1
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count
Else
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End If
End With
MsgBox DerLig
End Sub
'----------------------------------------



"Gouap"
Bonjour à tous,

Avec la commande "Selection.End (xlDown).Select" j'obtiens la dernière
cellule utilisée et de là, je peux en déduire le nombre de ligne utilisée
sur ma feuille. Seulement pour cela il faut que toutes les lignes soient
visibles ce qui m'interdit d'utilier un filtrage de données.

Existe-t-il un moyen de contourner le problème ?

Exemple :
J'ai une feuille dont la 1ere ligne est une ligne d'entête de colonne, les
50 lignes situées au dessous sont 50 lignes de données et j'applique un
filtre qui va masquer les lignes 5 à 10 + les lignes 25 à 50. Si dans cette
configuration je lance la commande "Selection.End (xlDown).Select" j'obtiens
comme dernière ligne la ligne 24. Comment faire pour obtenir la ligne 50 ?

@+
Philippe
Daniel.C
Le #21335541
;-)))

Daniel

Bon, si tu tiens vraiment à un bout de code qui tient
compte de divers scénario, teste ceci :
(je te dis toute suite, je devrai majorer la note !)
;-)
'------------------------------------
Sub test()
Dim DerLig As Long, LastRow As Long
With Feuil1
LastRow = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count + _
.Range("_FilterDataBase")(1, 1).Row - 1
End If
End With
MsgBox Application.Max(DerLig, LastRow)
End Sub
'------------------------------------



"Daniel.C" discussion :
Deux choses, Denis :
1. DerLig = .Range("_FilterDataBase").Rows.Count
suppose que le filtre soit sur la ligne 1.

2. Tu peux avoir avoir des valeurs en dehors de la plage filtrée,
éventuellement en dessous.

Daniel

Bonjour,

Tu as essayé quelque chose comme :

'----------------------------------------
Sub test()
Dim DerLig As Long
With Feuil1
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count
Else
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End If
End With
MsgBox DerLig
End Sub
'----------------------------------------



"Gouap"
Bonjour à tous,

Avec la commande "Selection.End (xlDown).Select" j'obtiens la dernière
cellule utilisée et de là, je peux en déduire le nombre de ligne utilisée
sur ma feuille. Seulement pour cela il faut que toutes les lignes soient
visibles ce qui m'interdit d'utilier un filtrage de données.

Existe-t-il un moyen de contourner le problème ?

Exemple :
J'ai une feuille dont la 1ere ligne est une ligne d'entête de colonne, les
50 lignes situées au dessous sont 50 lignes de données et j'applique un
filtre qui va masquer les lignes 5 à 10 + les lignes 25 à 50. Si dans cette
configuration je lance la commande "Selection.End (xlDown).Select" j'obtiens
comme dernière ligne la ligne 24. Comment faire pour obtenir la ligne 50 ?

@+
Philippe
michdenis
Le #21336021
La réponse précédente ne tenait pas compte de la possibilité
d'avoir une ligne masquée comme dernière ligne de
la plage (dans une plage non filtrée).

Pour obtenir la dernière ligne occupée par une donnée
ou formule que cette dernière soit masquée ou visible :
'------------------------------------
Sub test()
Dim L As Long
With Feuil1
Limite .Name
L = .UsedRange.Rows.Count
Do While Application.CountA(.Rows(L)) = 0
L = L - 1
Loop
End With
MsgBox L
End Sub
'------------------------------------
Sub Limite(Nom As String)
With Worksheets(Nom)
.UsedRange
End With
End Sub
'------------------------------------



"michdenis" #
Bon, si tu tiens vraiment à un bout de code qui tient
compte de divers scénario, teste ceci :
(je te dis toute suite, je devrai majorer la note !)
;-)
'------------------------------------
Sub test()
Dim DerLig As Long, LastRow As Long
With Feuil1
LastRow = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count + _
.Range("_FilterDataBase")(1, 1).Row - 1
End If
End With
MsgBox Application.Max(DerLig, LastRow)
End Sub
'------------------------------------



"Daniel.C"
Deux choses, Denis :
1. DerLig = .Range("_FilterDataBase").Rows.Count
suppose que le filtre soit sur la ligne 1.

2. Tu peux avoir avoir des valeurs en dehors de la plage filtrée,
éventuellement en dessous.

Daniel

Bonjour,

Tu as essayé quelque chose comme :

'----------------------------------------
Sub test()
Dim DerLig As Long
With Feuil1
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count
Else
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End If
End With
MsgBox DerLig
End Sub
'----------------------------------------



"Gouap"
Bonjour à tous,

Avec la commande "Selection.End (xlDown).Select" j'obtiens la dernière
cellule utilisée et de là, je peux en déduire le nombre de ligne utilisée
sur ma feuille. Seulement pour cela il faut que toutes les lignes soient
visibles ce qui m'interdit d'utilier un filtrage de données.

Existe-t-il un moyen de contourner le problème ?

Exemple :
J'ai une feuille dont la 1ere ligne est une ligne d'entête de colonne, les
50 lignes situées au dessous sont 50 lignes de données et j'applique un
filtre qui va masquer les lignes 5 à 10 + les lignes 25 à 50. Si dans cette
configuration je lance la commande "Selection.End (xlDown).Select" j'obtiens
comme dernière ligne la ligne 24. Comment faire pour obtenir la ligne 50 ?

@+
Philippe
Gouap
Le #21337521
Bonsoir,

J'ai tester toutes les macros que vous me proposez (sans réussir à les
comprendre vraiment) et ça fonctionne.
Je vais donc tenter d'en intégrer une dans mon code !
Comme celle de Michdenis me parait la plus claire je retiendrais celle-ci
même si je comprends tout pour le moment ;)

Merci à vous 2 pour votre aide.
Bonne soirée !
Philippe

"michdenis" %
La réponse précédente ne tenait pas compte de la possibilité
d'avoir une ligne masquée comme dernière ligne de
la plage (dans une plage non filtrée).

Pour obtenir la dernière ligne occupée par une donnée
ou formule que cette dernière soit masquée ou visible :
'------------------------------------
Sub test()
Dim L As Long
With Feuil1
Limite .Name
L = .UsedRange.Rows.Count
Do While Application.CountA(.Rows(L)) = 0
L = L - 1
Loop
End With
MsgBox L
End Sub
'------------------------------------
Sub Limite(Nom As String)
With Worksheets(Nom)
.UsedRange
End With
End Sub
'------------------------------------



"michdenis" discussion :
#
Bon, si tu tiens vraiment à un bout de code qui tient
compte de divers scénario, teste ceci :
(je te dis toute suite, je devrai majorer la note !)
;-)
'------------------------------------
Sub test()
Dim DerLig As Long, LastRow As Long
With Feuil1
LastRow = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count + _
.Range("_FilterDataBase")(1, 1).Row - 1
End If
End With
MsgBox Application.Max(DerLig, LastRow)
End Sub
'------------------------------------



"Daniel.C" discussion :

Deux choses, Denis :
1. DerLig = .Range("_FilterDataBase").Rows.Count
suppose que le filtre soit sur la ligne 1.

2. Tu peux avoir avoir des valeurs en dehors de la plage filtrée,
éventuellement en dessous.

Daniel

Bonjour,

Tu as essayé quelque chose comme :

'----------------------------------------
Sub test()
Dim DerLig As Long
With Feuil1
If .FilterMode = True Then
DerLig = .Range("_FilterDataBase").Rows.Count
Else
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End If
End With
MsgBox DerLig
End Sub
'----------------------------------------



"Gouap"
Bonjour à tous,

Avec la commande "Selection.End (xlDown).Select" j'obtiens la dernière
cellule utilisée et de là, je peux en déduire le nombre de ligne utilisée
sur ma feuille. Seulement pour cela il faut que toutes les lignes soient
visibles ce qui m'interdit d'utilier un filtrage de données.

Existe-t-il un moyen de contourner le problème ?

Exemple :
J'ai une feuille dont la 1ere ligne est une ligne d'entête de colonne,
les
50 lignes situées au dessous sont 50 lignes de données et j'applique un
filtre qui va masquer les lignes 5 à 10 + les lignes 25 à 50. Si dans
cette
configuration je lance la commande "Selection.End (xlDown).Select"
j'obtiens
comme dernière ligne la ligne 24. Comment faire pour obtenir la ligne 50
?

@+
Philippe



Publicité
Poster une réponse
Anonyme