Microsoft 365 obtenir le nom d'un tableau

  • Initiateur de la discussion Initiateur de la discussion rafi93
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

rafi93

XLDnaute Occasionnel
bonjour à tous

je cherche à récupérer le nom d'un tableau sur le quel je pointe, et j'ai trouvé ce code de Job75

mais j'ai 2 problèmes + 1 question :
1/ quand j'appelle la fonction (cf. fichier test ci joint) elle plante quand je sélectionne une cellule hors du tableau, ce qui me semble normal car la fonction telle que écrite retourne soit "" soit un array, et donc il y a incompatibilité de type
mais comme je suppose qu'il n'y a pas d'erreur avec le code de Job75, comment l'utiliser ?
en plus, une déclaration de fonction ne doit t elle pas préciser le type qu'elle retourne ?

2/ pourquoi ce code scanne t il tous les listobjects de la feuille, si on veut juste récupérer le nom du tableau que l'on pointe ?

3/ une question : je n'arrive pas à comprendre comment comprendre "r.Parent.ListObjects" si "r" est la "cellule active"

merci...

1679676529868.png
 

Pièces jointes

Bonsoir.
Cette Function pourrait s'écrire plus simplement vu qu'un objet Range possède une propriété ListObject représentant directement le tableau auquel appartient une cellule de la plage qu'il représente, et Nothing s'il ne peut en être trouvé un.
À mettre dans un module standard plutôt que dans un module d'objet Worksheet :
VB:
Option Explicit
Function NomTableau(ByVal R As Range) As String
   Application.Volatile
   Dim LOt As ListObject
   Set LOt = R.ListObject
   If Not LOt Is Nothing Then NomTableau = LOt.Name
   End Function
Sub test()
   Dim Nom As String
   Nom = NomTableau(ActiveCell)
   If Nom = "" Then
      MsgBox "pas tableau"
   Else
      MsgBox "tableau """ & Nom & """."
      End If
   End Sub
 
Dernière édition:
Non. Réservez les modules objets implantés par l'application hôte aux prises en charges d'évènements que ces objets déclenchent. À la rigueur vous pouvez y mettre aussi des procédure exclusivement invoquées par ces procédures de prises en charge.
 
Bonjour tous
juste en passant
2 fonction qui ont tres bien leur place dans un xlb
VB:
Sub test()
    MsgBox GetNameTableOfCell(ActiveCell)
End Sub

Function GetNameTableOfCell(ByVal cel As Range) As String
'renvoie "FAUX" si pas de table
    Dim LstO As lisobject
    GetNameTableOfCell = CStr(False)
    Set LstO = cel.ListObject
    If Not LstO Is Nothing Then GetNameTableOfCell = lo.Name
End Function

Sub test2()
    MsgBox GetNameRangeOfCell(ActiveCell)
End Sub

Function GetNameRangeOfCell(ByVal cel As Range) As String
'renvoie "FAUX" si pas de name
    Dim Nam As Name, Nom$
    GetNameRangeOfCell = CStr(False)
    For Each Nam In Names
        Nom = Replace(Nam.RefersTo, "=", "")
        If Not Intersect(Range(Nom), cel) Is Nothing Then GetNameRangeOfCell = Nam.Name
    Next
End Function
 
Bonjour rafi93, le fil,

Puisqu'il s'agit de mon code je me dois de répondre.
2/ pourquoi ce code scanne t il tous les listobjects de la feuille, si on veut juste récupérer le nom du tableau que l'on pointe ?
Dans ma fonction la variable r peut être une cellule ou une plage de cellules à cheval sur plusieurs tableaux.

Testez le fichier joint avec votre macro test que j'ai corrigée :
VB:
Sub test()
Dim cel As Range
Dim nom As Variant

Set cel = Selection
nom = NomTableau(cel)

If IsArray(nom) Then
    MsgBox Join(nom)
Else
    MsgBox "pas tableau"
End If
End Sub
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
544
Réponses
4
Affichages
147
Retour