Adresse de la dernière cellule d'un tableau

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

J'ai un tableau avec x colonnes et y lignes. Toutes les cellules du tableau sont évidemment encadrées.
Je connais l'adresse de la 1ère cellule du tableau.
Je voudrais connaître l'adresse de la dernière cellule du tableau, que celle-ci soit vide ou pas.

Merci pour tout conseil.
 

job75

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Bonjour Efgé, heureux de te croiser :)

Bien d'accord avec ta solution (très simple) mais il a été dit au post #9 :

Oublions définitivement que le tableau soit nommé.
Reprenons le problème.
En, supposons, A356 nous avons la 1ère cellule du tableau.
Cela dit en général Magic_Doctor nomme tous ses tableaux...

Mais justement peut-être veut-il connaître la dernière cellule pour le faire...

A+
 

MJ13

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Re

Sinon, vous avez aussi ces codes, développées grâce à la denière technologie de Microsoft, le HenrySense :eek::

Code:
Sub Dernière_Cellule_Feuille()
    MsgBox ActiveCell.SpecialCells(xlLastCell).Address
End Sub
Sub Dernière_Cellule_tableau_Zaza()
    MsgBox [zaza].SpecialCells(xlLastCell).Address
End Sub
 

job75

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Re,

Pour illustrer ce que je disais au post #17, cette macro dans le code de la feuille :

Code:
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
On Error Resume Next 'sécurité
Range(Cells.Find("TABLEAU", , xlValues, xlWhole)(1, 2)).Name = "zaza"
Application.EnableEvents = True
End Sub
Le tableau est nommé à chaque recalcul de la feuille (ne pas oublier que la fonction DERCEL est volatile).

Ajoutez (ou supprimez) des lignes ou colonnes au tableau.

Fichier (4).

A+
 

Pièces jointes

  • DERCEL(4).xls
    40.5 KB · Affichages: 43

Efgé

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Re
Il ya quand même des questions dont les réponses ne pourrons venir que de Magic_doctor:
Si il y a des bordures au tableau, il y a forçément un moment ou on connait le tableau d'origine...
Si on insert des lignes ou colonnes dans le tableau, celui ci va s'agrandir dynamiquement...
Si on ajoute, par macro, une ligne sous ou une colonne à coté du tableau, on peut le redimentionner...
Enfin bref, nous avons beaucoups de solutions mais pas de problème clairement expliqué avec... ...comment appele-t-on ça ?... Ah oui, un fichier exemple :D
Cordialement
 

job75

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Re Efgé,

Je pense que Magic_Doctor veut en effet un tableau nommé dynamiquement (automatiquement).

Mais en s'appuyant sur ses bordures et pas sur ce que contiennent ses cellules.

D'où mon dernier fichier (4)...

A+
 

Magic_Doctor

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Amigos, buenos días,

Je réponds un peu tard. Décalage horaire oblige !

T’as raison Efgé, aujourd’hui j’ai été poupouné !

MJ13, si, par hasard, tu tombes su un de mes autres fils, tu remarqueras que je ne suis pas pingre en explications et exemples divers. Seulement voilà, cette fois-ci tout tenait en une simple phrase et, en guise d’exemple, j’aurais posté une feuille avec un tableau et… c’est tout.
En revanche, MJ13, le « HenrySense » kézako ? J’ai cherché pour ne pas mourir idiot et pouvoir frimer devant les copains après qu’ils m’aient bien pris la tête avec leur « fútbol » et autres « ¡¡¡goooooooooooool!!! », mais j’ai rien trouvé sur le net.

Bravo job ! Je ne pense pas que sous ma latitude beaucoup auraient trouvé…

Je dois avouer que tes deux petites fonctions ont un caractère cabalistique qui conduit le pèlerin qui les lit dans une méditation teintée de perplexité et d’humilité. Que de questions en si peu de phrases… Même lire du René Guénon c’est de la rigolade à côté ! Par exemple, pourquoi faire une boucle de 7 à 10 (d’accord, 4 bords) et non pas de 1 à 4 ? Mais, comme la conjecture de Poincaré (redoutable remède contre les maux de tête), j’admettrai sans trop chercher à comprendre. Ça marche au quart de tour et là est l’essentiel ! Et, qui plus est, tu as pris en compte des situations auxquelles je n’avais absolument pas pensé.
Job, encore merci !

Job est observateur. Il est vrai que je nomme beaucoup de choses ; la raison en est très simple. Si dans une macro il y a, par exemple, [A10] et que, par la suite, je modifie ma feuille et que A10 se retrouve en B25, pfffff… il faut retourner dans la macro et la modifier en conséquence. Si je nomme cette cellule, par exemple « Zaza » (j’aime bien Zaza…), [A10] devient donc [Zaza] et, quoi que l’on fasse dans la feuille, Zaza restera toujours Zaza et l’on n’aura pas à revenir sempiternellement dans la macro. Enfin, c’est comme ça que je vois les choses. Puisque je nomme tous mes tableaux (en général il n’y en n’a pas 36 sur mes feuilles…) je connais donc toujours l’adresse de la 1ère cellule de chacun de mes tableaux nommés (par ex. : [Zaza].Cells(1).Address). La difficulté était de récupérer automatiquement l’adresse de la dernière cellule d’un tableau (nommé) au cas où on modifie sa taille (en général en rajoutant des lignes).
J’aime bien encadrer les cellules de ma feuille où il se passe quelque chose, d’autant plus que je m’évertue, dans la mesure du possible, d’avoir le moins de cellules possibles -que l’on occulte par la suite car inutiles et encombrantes à la vue- en les remplaçant par des calculs dans les macros. Mais, pourquoi pas, après tout, des tableaux sans bordures…

La finalité de tout ça… job l’a très bien comprise en me coupant l’herbe sous les pieds quand il précise dans son dernier post : « Je pense que Magic_Doctor veut en effet un tableau nommé dynamiquement (automatiquement) ». Ainsi, après modification du tableau, on n’a pas à revenir dans la macro pour y faire les reparamétrages.

En revanche, job, si tu me lis, dans la macro événementielle dans le module de feuille, tu as écrit : Range(Cells.Find("TABLEAU", , xlValues, xlWhole)(1, 2)).Name = "zaza"

Je veux bien renoncer à saisir toutes les subtilités de tes deux fonctions, mais là j’aimerais bien comprendre (ce "TABLEAU", par exemple, qui est-il ? d’où sort-il ?). Mais comme (en tout cas dans ma feuille) quand je modifie la taille d’un tableau je suis obligé de modifier similairement celle de trois autres tableaux (par ex. "bibi", "toto" et "lulu") pour des histoires lourdingues de transferts de données, comment transcrire tous ces événements dans la macro ?

J’ai dit !

Bonne après-midi à tous et encore un très grand merci.

¡Y sigue la revolución del VBA!
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Re Magic_Doctor,

Dans mon fichier (4) la recherche du mot TABLEAU permettait de trouver la cellule contenant l'adresse du tableau.

Dans le fichier (5) ci-joint j'ai nommé REFER1 et REFER2 les cellules D14 et I14, la macro devient :

Code:
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
On Error Resume Next 'sécurité
Range([REFER1]).Name = "zaza"
Range([REFER2]).Name = "bibi"
Application.EnableEvents = True
End Sub
Enfin pour la numérotation des bordures vois ceci :

Code:
Sub Test()
MsgBox "xlEdgeLeft = " & xlEdgeLeft, , "Bordure"
MsgBox "xlEdgeTop = " & xlEdgeTop, , "Bordure"
MsgBox "xlEdgeBottom = " & xlEdgeBottom, , "Bordure"
MsgBox "xlEdgeRight = " & xlEdgeRight, , "Bordure"
End Sub
A+
 

Pièces jointes

  • DERCEL(5).xls
    43 KB · Affichages: 35

Magic_Doctor

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Bon, j'ai opté pour String et ça marche.
Plutôt que de devoir monopoliser 2 cellules de la feuille (en fait autant de cellules que de tableaux modifiables présents dans la feuille), j'ai préféré utiliser une matrice dans la macro.
 

Pièces jointes

  • DERCEL(5').xls
    48 KB · Affichages: 33

job75

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Re,

Ah là Magic_Doctor tu fais des choses sans comprendre... Pas bien ça :eek:

Sélectionne la plage A11: D11 et supprime les bordures sauf celles du haut.

Appuie ensuite sur F9 : les cellules B14 et D14 s'actualisent bien sur D10.

Mais pas le nom "zaza" qui reste défini par =Feuil1!$A$1:$D$11

Bien sûr quand tu ajoutes ou supprimes des cellules du tableau le nom s'adapte, c'est pourquoi tu crois que ta solution est bonne.

Mais elle ne vaut rien car REFER(1) et REFER(2) ne sont pas définies (il ne suffit pas de les déclarer !!).

A+
 

job75

XLDnaute Barbatruc
Re : Adresse de la dernière cellule d'un tableau

Re Magic_Doctor,

Je te laisse méditer sur cette macro :

Code:
Private Sub Worksheet_Calculate()
'job75
Application.EnableEvents = False
On Error Resume Next 'sécurité
Range([zaza].Cells(1), DERCEL([zaza])).Name = "zaza"
Range([bibi].Cells(1), DERCEL([bibi])).Name = "bibi"
Application.EnableEvents = True
End Sub
Elle est lancée grâce à la fonction volatile AUJOURDHUI() en B1.

La fonction DERCEL n'étant plus utilisée dans la feuille n'a plus besoin d'être volatile.

Fichier (6).

A+
 

Pièces jointes

  • DERCEL(6).xls
    51 KB · Affichages: 35

Herdet

Nous a quitté
Repose en paix
Re : Adresse de la dernière cellule d'un tableau

Bonsoir,
Un solution assez simple qui teste, à partir de la cellule active, uniquement les encadrements haut et gauche jusqu'aux cellules non encadrées

Cordialement
Robert
-------------------------------------------------------------------
Sub Derniere_cellule_encadree()
' à partir de la 1ere celllule d'un tableau
If Selection.Borders(xlEdgeTop).LineStyle = xlNone Or _
Selection.Borders(xlEdgeLeft).LineStyle = xlNone Then
MsgBox "Cellule de départ non encadrée à gauche ou en haut"
Else
For Li = 1 To 65000
If Selection.Offset(Li, 0).Borders(xlEdgeLeft).LineStyle = xlNone Then Exit For
Next
For Col = 1 To 256
If Selection.Offset(0, Col).Borders(xlEdgeTop).LineStyle = xlNone Then Exit For
Next
MsgBox "Tableau : " & Li & " lignes, " & Col & " colonnes" & vbLf & _
"Dernière ligne : " & Selection.Row - 1 + Li & vbLf & _
"Dernière colonne : " & Selection.Column - 1 + Col

End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35