Dernière ligne éditée d'un Tableau

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour à tous,

En pièce jointe un petit fichier exemple avec un tableau (hé oui, j'ai voulu écouter Misange mais je m'en mord les dents...)
Avant cette invention diabolique, quand on voulait, par VBA, déterminer la dernière cellule éditée d'une colonne on écrivait (pour la colonne B par exemple) :

Code:
DL = Cells(Application.Rows.Count, 2).End(xlUp).Row
on obtenait la ligne 29...
Dans l'exemple joint, ce même code me renvoie la ligne 33 qui est la dernière ligne éditée du tableau.
J'ai vu qu'avec ce genre de bestiole il fallait utiliser des Range("Tableau1[#All]") mais après quelques essais je ne suis pas arrivé à obtenir DL = 29 (toujours pour la colonne B).
C'est pourquoi je m'adresse à vous, avant d'adresser des Emails perso à Misange avec des menaces de représailles sérieuses, des Hou...., des sifflets si flais qu'ils font tomber les oreilles, des reproches, des invectives, voire même un désamour immédiat et irrémédiable.
C'est dire si je compte sur vous pour pouvoir, comme avant, être redevable, admiratif, fan, bref, retrouver l'amour non pas des tableaux mais de Misange...
 

Pièces jointes

  • Tableau de M.xlsm
    15.6 KB · Affichages: 68

Pierrot93

XLDnaute Barbatruc
Re : Dernière ligne éditée d'un Tableau

Bonjour Robert:),

essaye peut être ceci, espérant que cela te fera retrouver tes sentiments pour Misange:)
Code:
Sub Macro1()
Dim y As Range
Set y = Feuil1.ListObjects(1).ListColumns(2).DataBodyRange.Find("*", , xlValues, , 1, 2, 0)
MsgBox y.Row
End Sub

bonne journée
@+

Edition : bonjour PierreJean:), mapomme:)
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Dernière ligne éditée d'un Tableau

Bonjour Robert :)

Bienvenue au "club" :p. J'avais déjà remarqué cette cochonceté. J'avais travaillé dessus pour trouver une solution universelle (liste ou pas) applicable avec la même syntaxe. N'étant pas chez moi, je ne peux retrouvrer mon fichier pour savoir si j'avais trouvé ou non. je crois bien que non... :(. Wait and see. Quant à Misange.....:mad:. Mais non bien sûr! comment donc lui en vouloir ! :)
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Dernière ligne éditée d'un Tableau

Bonjour robert

Veux-tu tester ceci avant d'envisager les derniers outrages envers Misange que nous adorons tous

Code:
Sub test()
Dim DL As Integer
DL = Range("Tableau1")(Range("Tableau1").Rows.Count, 2).End(xlUp).Row
MsgBox (DL)
End Sub

Edit : Salut Pierrot Salut mapomme

NB: Le résultat restera valable si l'on déplace le tableau
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Dernière ligne éditée d'un Tableau

Bonjour à tous :)

N'étant pas chez moi, je ne peux retrouvrer mon fichier pour savoir si j'avais trouvé ou non. je crois bien que non...

Je crois que je m'en souviens. Cela fait 4 lignes au lieu d'une seule. Un essai dans le fichier joint (qui teste les deux cas)
VB:
On Error Resume Next
DL = 0: DL = Application.WorksheetFunction.Match("zzzz", Columns(maCol), 1)
D2 = 0: D2 = Application.WorksheetFunction.Match(1E+99, Columns(maCol), 1)
On Error GoTo 0: If D2 > DL Then DL = D2 + 1 Else DL = DL + 1

edit: petite correction
 

Pièces jointes

  • Derniere cellule v1a.xls
    47 KB · Affichages: 46
Dernière édition:

Si...

XLDnaute Barbatruc
Re : Dernière ligne éditée d'un Tableau

salut

autre proposition (syntaxe tableau)

Code:
  '[Tableau1].Rows.Count : nombre le lignes du tableau
  '[Tableau1].Rows(0).Row : numéro de la ligne des titres du tableau
  Dl1 = [Tableau1].Rows.Count + [Tableau1].Rows(0).Row

avec ou sans lignes d'en-tête affichées ou cachées

Ajout : Si… on veut choisir la colonne, comme le fait si bien mapomme ;), on utilise l’expression [Tableau1[Colonne n]] où Colonne n = en-tête de la colonne
 

Pièces jointes

  • Dernière ligne d'un Tableau.xlsm
    20.7 KB · Affichages: 45
Dernière édition:

job75

XLDnaute Barbatruc
Re : Dernière ligne éditée d'un Tableau

Bonjour les ami(e)s,

Avec ce code il n'y a pas de problème si le tableau est filtré :

Code:
Sub Macro1()
Dim DL1&, DL2&, DL&
On Error Resume Next
DL1 = Application.Match("zzz", Columns(2))
DL2 = Application.Match(9 ^ 9, Columns(2))
DL = IIf(DL1 > DL2, DL1, DL2)
MsgBox DL
End Sub
Edit : a pardon mapomme, pas rafraîchi, tu as donné une solution du même genre...

A+
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Dernière ligne éditée d'un Tableau

Bonjour le fil, bonjour le forum,

Je savais que je pouvais compter sur vous pour retrouver le corazón de la Misange !
MaPomme parle de cochonceté j'aurais plutôt tendance à traiter ces tableaux de m... infâme ! Mais bon, c'est comme le reste, au début je râle puis, avec le temps, je trouve ça génial et finit par ne plus pouvoir m'en passer... En tous cas, faut avouer qu'au niveau du code ça ne simplifie pas les choses.

Merci à tous pour votre aide !
 

job75

XLDnaute Barbatruc
Re : Dernière ligne éditée d'un Tableau

Re,

Une solution très rapide avec un tableau VBA :

Code:
Dim col%, t, DL&
col = 2 'n° de colonne du tableau
t = [Tableau1].Resize(, col + 1) 'au moins 2 éléments
For DL = UBound(t) To 1 Step -1
  If Not IsEmpty(t(DL, col)) Then Exit For
Next
DL = DL + [Tableau1].Row - 1
MsgBox DL
A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Dernière ligne éditée d'un Tableau

Bonjour le fil, bonjour le forum,

Ha PierreJean ! Je ne like rien à vrai dire... Je subis ! Je like ce que je comprends et j'avoue que cette Application.Match a longtemps été un mystère pour moi car sous Excel 2003 il n'y avait pas d'aide. Là je viens de comprendre (enfin!) mais ce qui reste mystérieux c'est "zzz" ou pire 9 ^ 9.
Ta proposition :

Code:
Range(Tableau1) (Range((Tableau1).Rows.count,2).End(xlup).Row
était celle qui m'a le plus séduite car proche du code que j'ai l'habitude d'utiliser. Mais elle a l'inconvénient de renvoyer la valeur de la première ligne du tableau si la colonne est totalement remplie. Tu me diras c'était pareil avec une plage ordinaire mais il était assez rare qu'une colonne soit éditée jusqu'à la dernière ligne. Ça m'oblige à comparer la première et la dernière pour être sûr de la dernière.

Voilà où j'en suis. J'ai ingurgité et archivé et je verrai à l'usage ce qui me conviendra le mieux... Mais, encore une fois, je ne like rien ! Ou plutôt, je like mes vieilles plages de cellules...
 
G

Guest

Guest
Re : Dernière ligne éditée d'un Tableau

Bonjour le beau monde,

Où cela se complique si l'on prend en compte la ligne d'entête affichée ou non, et la ligne des totaux, affichée ou non:
Code:
With Feuil1.ListObjects(1)
        DL = .Range.Row - .ShowHeaders + .ListRows.Count - .ShowTotals - 1
    End With
...arf
A+ à tous
 
Dernière modification par un modérateur:
G

Guest

Guest
Re : Dernière ligne éditée d'un Tableau

Re,

Pas de pub.... mais encore une injection pour donner mal de tête:
Fonction plus haut simplifiée qui n'a pas besoin de prendre en compte la ligne de d'entête:
Code:
With Feuil1.ListObjects(1)
    DerLigneTableau = .DataBodyRange.Row + .DataBodyRange.Rows.Count - 1 - .ShowTotals
End With

... re ...arf

mais tout dépend de ce que tu veux exactement.

Aplouss
 

Statistiques des forums

Discussions
312 177
Messages
2 085 976
Membres
103 076
dernier inscrit
LoneWolf90