Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

bbb38

XLDnaute Accro
Bonjour le forum,
Dans le fichier ci-joint, la feuiile1 comporte 3 colonnes avec des lettres. Le code permet de connaître le nombre de lignes pour chaque colonne.
La feuille 2 contient les mêmes informations que la feuille 1, mais j’ai appliqué, en plus, un style de tableau. De ce fait, le code ne m’indique plus le nombre de lignes pour chaque colonne, mais la dernière ligne du tableau.
Avez-vous une solution pour contourner ce problème (j’ai pensé annuler le style de tableau, mais je n’ai pas trouvé) ?
Avec mes remerciements anticipés,
Bernard
 

Staple1600

XLDnaute Barbatruc
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Bonjour à tous

Détermine bien la dernière ligne de chaque colonne d'un ListObject (tableau)
(Sur la feuille 1 d'un classeur avec un tableau Tableau1 de 3 colonnes dont chaque colonne contient un nombre différent de données.)
Code:
Sub a()
Dim Tabl As ListObject, i%
Set Tabl = Sheets(1).ListObjects("Tableau1")
For i = 1 To Tabl.ListColumns.Count
MsgBox Tabl.ListRows.Count - Application.CountBlank(Tabl.DataBodyRange.Columns(i)) + 1
Next
End Sub
Reste à savoir si cela ira sur ton fichier exemple qu'on ne voit toujours pas apparaitre dans le fil ;)
 
Dernière édition:

bbb38

XLDnaute Accro
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Bonjour Pierrot, le forum,
Merci pour la remarque…. Je vais mettre cet oubli sur le compte de la fatigue….
Cordialement,
Bernard

P.S. Bonjour Jean-Marie, le forum,
Merci pour la réponse. Je teste.
Cordialement,
Bernard
 

Pièces jointes

  • Forme de tableaux Nbre de lignes.xlsm
    27.9 KB · Affichages: 25
Dernière édition:

chris

XLDnaute Barbatruc
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Bonjour
Re Staple, Coucou Pierrot;)

Ton tableau est mal conçu : il devrait être déclaré de la ligne d'en-tête 4 et non à partir de la ligne 1 d'où l'écart.

Il faut toujours partir d'une cellule non vide des données pour déclarer le tableau et vérifier que les en-têtes sont bien reconnues ou cocher si ce n'est pas le cas.

Le style de tableau n'est que la partie immergée de l'iceberg : le tableau est un objet à mi chemin entre le tableur et une table de base de donnée. Si on l'utilise correctement cela ouvre nombre de perspectives.


Edit : A65536 est suffisant dans nombre de cas mais depuis Excel 2007 on a plus d'1 million de lignes. Cells.rows.count donne la véritable dernière ligne de la version
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Re

Cela fonctionne avec ton fichier exemple en modifiant ainsi
Code:
Sub b()
Dim Tabl As ListObject, i%
Set Tabl = Sheets(2).ListObjects("Tableau1")
For i = 1 To Tabl.ListColumns.Count
MsgBox Tabl.ListRows.Count - Application.CountBlank(Tabl.DataBodyRange.Columns(i)) + 3
Next
End Sub
Question:
Pourquoi les deux lignes vides (après l'entête) ?
 

chris

XLDnaute Barbatruc
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Re,

Staple : je ne connaissais pas CountBlank. Cela va me servir...

bbb38 : pour compléter ma remarque du fil précédent. Dans un tableau, comme dans une table de BD, on se réfère aux lignes, ou enregistrements. On sort donc de l'aspect topographique d'Excel et cela impacte le VBA.
 

Staple1600

XLDnaute Barbatruc
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Re

chris
Mais si tu connais... mais peut-être plus comme ceci ;)
Sub Macro1()
ActiveCell.FormulaR1C1 = "=COUNTBLANK(R[-1]C[-4]:R[-1]C[-2])"
End Sub
Me trompe-je ? ;)
 

chris

XLDnaute Barbatruc
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Re

Arf, bien sûr ! Je crois que je n'ai jamais pensé l'utiliser en VBA où je compte souvent les pleines.

Je vais aller prendre un kawa pour finir de me réveiller....
 

ROGER2327

XLDnaute Barbatruc
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Bonjour à tous.


Une autre :​
VB:
Private Sub CommandButton1_Click()
Dim i&, l&, m$, p As ListObject, c As Range
  m = "Dernière ligne de la colonne : " & Chr(10)
  Set p = ListObjects("Tableau1")
  l = p.ListRows.Count
  For i = 1 To p.ListColumns.Count
    Set c = p.ListColumns(i).DataBodyRange(1).Offset(l - 1)
    If IsEmpty(c.Value) Then Set c = c.End(xlUp)
    m = m & Chr(10) & Split(Columns(c.Column).Address(0, 0), ":")(0) & " : " & Format(c.Row, "# ### ##0")
  Next
  MsgBox m
End Sub


ℝOGER2327
#7301


Vendredi 13 Palotin 141 (Esquive de Saint Léonard (de Vinci), illusioniste - fête Suprême Quarte)
13 Floréal An CCXXII, 4,0651h - bâton-d'or
2014-W18-5T09:45:23Z
 
G

Guest

Guest
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Bonjour les aminches,

Puis-je participer:
Code:
Private Sub CommandButton1_Click()
  Dim lc As ListColumn, txt As String
  txt = "Nombre de ligne de la colonne : " & Chr(10)
  For Each lc In Me.ListObjects(1).ListColumns
    txt = txt & Chr(10) & lc.Name & ": " & Application.Subtotal(103, lc.DataBodyRange)
  Next
  MsgBox txt
End Sub

si notre demandeur affiche la ligne des totaux en bas de son tableau il pourrait avoir directement ce nombre de ligne en choissant 'nombre' dans la liste des fonctions possibles. (Outils de tableau/création/ligne de totaux)

A+
 
Dernière modification par un modérateur:

Staple1600

XLDnaute Barbatruc
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Salut Hasco

Tu es sur que tu trouves les numéros des dernières lignes ;)
(en testant sur le fichier exemple du message #4)
EDITION: Damned! Tu éditais pendant que je rédigeais :eek:
Code:
Sub CommandButtonKlick()
Dim lo As ListObject
Dim lc As ListColumn, txt As String
Set lo = Sheets(2).ListObjects(1)
txt = "Dernière ligne de la colonne : " & Chr(10)
For Each lc In lo.ListColumns
    txt = txt & Chr(10) & lc.Name & ": " & _
    lo.ListRows.Count - Application.CountBlank(lc.DataBodyRange) + 3
Next
MsgBox txt
End Sub

PS: Si on retire les lignes vides en début de tableau , ton code initial renvoie:
17/10/6
au lieu de 18/11/7

Variante plus simple de ma précédent mouture inspirée de celle d'Hasco ;)
Code:
Sub CommandButtonKlickII()
Dim lo As ListObject, lc As ListColumn, txt As String
Set lo = Sheets(2).ListObjects(1)
txt = "Dernière ligne de la colonne : " & Chr(10)
For Each lc In lo.ListColumns
    txt = txt & Chr(10) & lc.Name & ": " & _
    Application.CountA(lc.DataBodyRange) + 1
Next
MsgBox txt
End Sub
 
Dernière édition:
G

Guest

Guest
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Re,

Hello mon ami. Aurais-je mal lu la demande:
le demandeur à dit:
Le code permet de connaître le nombre de lignes pour chaque colonne.

Par contre il est vrai que j'aurais pu corriger
txt = "Dernière ligne de la colonne : " & Chr(10)

Par
Code:
txt = "Nombre de lignes de la colonne : " & Chr(10)

Mea culpa(petite culpae) j'ai pas fais gaffe en copiant/collant les morceaux
A+
 

Staple1600

XLDnaute Barbatruc
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Re

Hasco
La demande ayant ce titre
Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau
J'ai cherché la dernière ligne de chaque colonne.
(donc son numéro de ligne)
Merci de ton passage, cela m'a inspiré (en plus du plaisir de te croiser ;))
Voir EDITION du précédent message ;)
 
G

Guest

Guest
Re : Impossible d'obtenir le numéro de la dernière ligne avec un style de tabeau

Re,

Où l'on revoit que les mots ont un sens, même (surtout) si l'on choisit ceux qu'on préfère;)

Comme ça il n'aura que l'embarras du choix, Nombre ou dernière ligne,
Si nombre, avec ou sans filtrage.

A+++
 

Discussions similaires