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
 

Pierrot93

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

Bonjour Bernard

A priori ton fichier n'est pas passé...

bonne journée
@+
 

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
 

Fichiers joints

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 édition 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 a 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+++
 

bbb38

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

Bonjour Pierrot, Jean-Marie, Chris, Roger2327, Hasco, le forum,
Un grand merci pour votre amabilité, vos réponses ou vos explications, sans oublier vos compétences (que vous voulez bien partager).
Je vais étudier toutes vos propositions, et essayer de comprendre les codes (une bonne nuit de sommeil ne sera pas de trop).
Encore MERCI à tous.
Cordialement,
Bernard
 

Si...

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

salut

autre solution avec le nom du tableau (ici TA)* !
Code:
Private Sub CommandButton1_Click()
  Dim N As Long, L As Long, C As Long, s As String
  N = [TA].Rows.Count: L = [TA].Rows(0).Row 'nombre de lignes du tableau et n° de ligne des titres
  For C = 1 To [TA].Columns.Count
    s = s & N - Application.CountBlank([TA].Columns(C)) + L & vbLf
  Next
  MsgBox s
End Sub
Autre exeemple pour avoir le nombre de cellules non vides par colonne.

* comme de nombreux exemples joints, cela coince avec des colonnes trouées :eek:
 

Fichiers joints

Dernière édition:

Staple1600

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

Bonsoir Si..., re à tous

Pour continuer à commencer de finir cet A-M pluvieux
(A tester sur tableaux "intègres", c'est à dire sans vide)
Code:
Sub CommandButtonKlickIV()
Dim i&, t$
With [TA]
    For i = 1 To .Columns.Count
    t = t & .Item(1, i).End(-4121).Row & vbLf
    Next
End With
MsgBox t
End Sub
Code:
Sub CommandButtonKlickIII()
Dim lo As ListObject, lc As ListColumn, txt As String
Set lo = Sheets(1).ListObjects(1)
txt = "Dernière ligne de la colonne : " & Chr(10)
For Each lc In lo.ListColumns
    txt = txt & Chr(10) & lc.Name & ": " & _
    lc.DataBodyRange.End(xlDown).Row
Next
MsgBox txt
End Sub
PS: Si...: L = [TA].Rows(0).Row génère une erreur chez moi (XL2013)
j'ai remplacé par
L = [TA].Item(1).Row
et modifié ainsi sinon je trouve pas le numéro de la dernière ligne de chaque colonne du tableau
s = s & N - Application.CountBlank([TA].Columns(C)) & vbLf ' + L & vbLf
 
Dernière édition:

ROGER2327

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

Bonsoir à tous.


Encore un essai (plus un récapitulatif jusqu'au message #16).​


ℝOGER2327
#7303


Vendredi 13 Palotin 141 (Esquive de Saint Léonard (de Vinci), illusioniste - fête Suprême Quarte)
13 Floréal An CCXXII, 7,6727h - bâton-d'or
2014-W18-5T18:24:52Z
 

Fichiers joints

Dernière édition:

mapomme

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

Bonjour à tous,

Une autre version avec une recherche via FIND. Suivant qu'on recherche dans les valeurs ou formules, le résultat peut différer (voir résultat colonne H qui contient une formule renvoyant une valeur "" ou non ( =SI([@Colonne4]="";"";[@Colonne4]) )
 

Fichiers joints

Dernière édition:

Discussions similaires


Haut Bas