Macro permettant se savoir si une cellule porte déjà un nom

Chebe

XLDnaute Nouveau
Bonjour

Je recherche une macro qui permette de savoir si une cellule porte déjà un nom

J’ai trouvé cette macro sur ne Net
Mais elle n’est parfaite :

1) Si il existe un seul nom qui renvoi à rien, elle plante obligatoirement
Exemple : 1 ligne supprimée qui comportait une cellule nommée et dont le nom serait resté dans le gestionnaire des noms.

2) Si il existe un seul nom qui renvoi à des cellules non contigües,
Elle plante également irrémédiablement.

3) Il y a d’autre cas, ou elle plante également (Dans des fichiers comportant un grand nombre de noms, sans que je sois parvenu à trouver la cause exacte ??

4) Si une cellule qui comporte deux noms, voir plus
Elle donnera seulement le dernier nom dans l’ordre alphanumérique

5) Une cellule comportant un nom, elle-même dans un groupe de cellules nommées
Elle donnera seulement le nom du groupe de cellules
Exemple : Cellule A1 nommée « Case »
Cellules A1 : D5 nommées « Zone »
A1 renvoie « Zone »


Si quelqu’un connait ou a déjà programmé une autre macro sans ces inconvénients …

Merci d’avance


Code:
Sub Nom_de_Cellule()
    'déclarations
    Dim nms As Names
    Dim Ok As Boolean
    Dim i As Integer
    Dim Indice As Integer
    Dim Nom_Cell As String
    'initialisations
    Ok = False
    Set nms = ActiveWorkbook.Names
    'teste si la cellule active correspond à un des noms
 
    For i = 1 To nms.Count
        'If nms(i).RefersToRange.Address = ActiveCell.Address Then Ok = True
        If Not Intersect(ActiveCell, nms(i).RefersToRange) Is Nothing Then
            Ok = True
            Indice = i
        End If
    Next
    'si oui
    If Ok = True Then
        Nom_Cell = nms(Indice).Name
        MsgBox Nom_Cell
      'sinon
      Else
        MsgBox "Sans nom défini"
    End If
End Sub
 

job75

XLDnaute Barbatruc
Re : Macro permettant se savoir si une cellule porte déjà un nom

Bonjour Chebe,

Si l'on recherche les noms qui ont pu être donnés à une seule cellule (la cellule active), pourquoi ne pas utiliser simplement :

Code:
Sub ChercheNom()
Dim a$, n As Name
a = "=" & ActiveSheet.Name & "!" & ActiveCell.Address
For Each n In ThisWorkbook.Names
  If n.RefersTo = a Then MsgBox n.Name, , "Nom"
Next
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Macro permettant se savoir si une cellule porte déjà un nom

Re,

Si l'on préfère :

Code:
Sub ChercheNom()
Dim a$, n As Name, flag As Boolean
a = "=" & ActiveSheet.Name & "!" & ActiveCell.Address
For Each n In ThisWorkbook.Names
  If n.RefersTo = a Then MsgBox n.Name, , "Nom": flag = True
Next
If Not flag Then MsgBox "Aucun nom..."
End Sub
A+
 

Chebe

XLDnaute Nouveau
Re : Macro permettant se savoir si une cellule porte déjà un nom

Bonjour Job et Eric

Merci Job, plus de plantage !

Et on peut lister tous les noms existants pour une cellule !

Mais par contre pour les zones de plusieurs cellules
Du coup on ne peut plus savoir s’il y a un nom ?

Pour les zones de cellules non contigües, pas de plantage non plus
Mais la macro ne donne pas pour autant le nom ?

Éric
Je m’excuse
Mais pas bien compris ?

Merci
 

eriiic

XLDnaute Barbatruc
Re : Macro permettant se savoir si une cellule porte déjà un nom

Re,

Éric
Je m’excuse
Mais pas bien compris ?

Et bien je répond à ta question initiale, à moins que je l'ai mal comprise...
Si tu veux savoir si la cellule A1 a un nom ces 2 lignes de code te donnent le nom s'il existe (vide sinon) sans avoir besoin de boucler sur tous les noms.
Il suffit de tester...

Et pour une plage :
Code:
On Error Resume Next
nom = [A1:A5].Name.Name

Maintenant pour savoir si une cellule appartient à une plage nommée tu n'échapperas pas à une boucle.

eric
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Macro permettant se savoir si une cellule porte déjà un nom

Bonsoir Chebe, le forum,

Pour le fun, une petite variation pour essayer de trouver les noms qui dans leur définition aboutissent à une zone dont la cellule active pourrait faire partie. Les noms dynamiques empêchent à mon avis d'affirmer qu'on a trouvé tous les cas.

VB:
Sub Nom_de_Cellule()
Dim test, OK As Boolean
Dim xN As Name, sh As Worksheet
Dim Niv, Nom, Formul, Plage, RgPlage As Range

On Error Resume Next
For Each xN In ThisWorkbook.Names
  Niv = "": Nom = "": Formul = "": Plage = "": Set RgPlage = Nothing
  Niv = xN.Parent.Name
  Nom = xN.Name
  Formul = xN.RefersTo
  Set RgPlage = xN.RefersToRange

  'cas où la plage n'existe pas (nom dynamique ?)
  If RgPlage Is Nothing Then
    'on tente d'évaluer le nom et sa plage
    Set RgPlage = Application.Evaluate(xN.RefersTo)
  End If
  
  If Not Intersect(ActiveCell, RgPlage) Is Nothing Then
    MsgBox " Pour la cellule =>      " & ActiveCell.Address(0, 0) & "      <=" & vbLf & vbLf & _
      "Niveau:   " & Niv & vbLf & vbLf & "Nom:   " & Nom & vbLf & vbLf & _
      "Formule:   " & Formul & vbLf & vbLf & "Plage:   " & RgPlage.Address(-1, -1, xlA1, True)
  End If
Next xN
Exit Sub
End Sub

edit : v2
 

Pièces jointes

  • Les Noms pour une cellule v2.xlsm
    23.4 KB · Affichages: 44
Dernière édition:

job75

XLDnaute Barbatruc
Re : Macro permettant se savoir si une cellule porte déjà un nom

Re,

Si l'on veut aussi repérer les cellules (ou plages) définies par des formules du genre :

Code:
=DECALER(Feuil1!$A$3;;3)

=DECALER(Feuil1!$D$1;2;)
on peut utiliser cette macro :

Code:
Sub ChercheNom()
Dim n As Name, cel As Range
On Error Resume Next
For Each n In ThisWorkbook.Names
  Set cel = Nothing
  Set cel = Intersect(ActiveCell, Evaluate(n.Name))
  If Not cel Is Nothing Then
    MsgBox n.Name & n.RefersToLocal, , "Nom"
    flag = True
  End If
Next
If Not flag Then MsgBox "Aucun nom..."
End Sub
Elle liste tous les noms de plages où la cellule active se trouve.

La formule est restituée en même temps...

A+
 

job75

XLDnaute Barbatruc
Re : Macro permettant se savoir si une cellule porte déjà un nom

Bonjour le fil, le forum,

Il peut y avoir des noms définis dans la feuille, comme par exemple Zone_d_impression.

Si l'on veut les distinguer de ceux définis dans le classeur :

Code:
Sub ChercheNom()
Dim n As Name, cel As Range, titre$
On Error Resume Next
For Each n In ThisWorkbook.Names
  Set cel = Nothing
  Set cel = Intersect(ActiveCell, Evaluate(n.Name))
  If Not cel Is Nothing Then
    titre = "Nom dans la feuille"
    If IsError(ActiveSheet.Names(n.Name).Name) Then titre = "Nom dans le classeur"
    MsgBox n.Name & n.RefersToLocal & String(20, " "), , titre
    flag = True
  End If
Next
If Not flag Then MsgBox "Aucun nom..."
End Sub
Edit : c'est un peu superflu car le nom défini dans une feuille est restitué avec le nom de la feuille => Feuil1!LeNom, ce qui permet d'ailleurs de simplifier :

Code:
Sub ChercheNom()
Dim n As Name, cel As Range
On Error Resume Next
For Each n In ThisWorkbook.Names
  Set cel = Nothing
  Set cel = Intersect(ActiveCell, Evaluate(n.Name))
  If Not cel Is Nothing Then
    MsgBox n.Name & n.RefersToLocal & String(20, " "), , _
    "Nom dans " & IIf(InStr(n.Name, "!"), "la feuille", "le classeur")
    flag = True
  End If
Next
If Not flag Then MsgBox "Aucun nom..."
End Sub
A+
 
Dernière édition:

Chebe

XLDnaute Nouveau
Re : Macro permettant se savoir si une cellule porte déjà un nom

Bonjour Mapomme

C’est bien plus que j'en n’attendais !
Tu sembles avoir tout prévu
La perfection

- Une petite question ?
Tu utilise le terme « Niveau » pour lister le nom du classeur
Est-ce que ce terme s'utilise pour désigner habituellement un classeur ?
Ou il y a une autre raison ?

- Juste un petit regret
Il n’y a rien de prévu pour indiquer quand la cellule n’a pas de nom
J’ai bien essayé de mettre une MsgBox « Pas de nom » avec succès
Mais comme je ne suis pas doué, elle s’affiche aussi s’il y a un nom !

- Je suis quand même arrivé à la prendre en défaut
Dans le cas, peut courant, il est vrai, que l’on utilise un même nom pour plusieurs cellules dans 2 feuilles du classeur
Exemple « Total » pour Feul1 :A20 et Feuil2 : A30

- Une autre question :
Je vois que dans ton exemple, tu as mis un nom de formule « Pi_2 »
Mais les noms de formules ne sont pas rattachés à une cellule
Donc ta macro n’apporte rien dans ce cas, non ??

Merci beaucoup pour ta solution
Et bravo pour la présentation

A+
 

Chebe

XLDnaute Nouveau
Re : Macro permettant se savoir si une cellule porte déjà un nom

Bonjour Job75

Plus simple, mais l’essentiel est bien là !

Il peut y avoir des noms définis dans la feuille, comme par exemple Zone_d_impression.

Si l'on veut les distinguer de ceux définis dans le classeur :

J'ai pas bien compris ce que tu voulais dire ?
Et je ne vois pas vraiment de différence avec la première solution

J'avais pensé un instant que tu faisais référence à des noms communs à plusieurs cellules dans plusieurs feuille du même classeur, (voir mon post précédant) ?
Mais il ne sont pas listés non plus

Merci aussi
A+
 

job75

XLDnaute Barbatruc
Re : Macro permettant se savoir si une cellule porte déjà un nom

Re Chebe,

Quand vous nommez une plage, le nom est généralement défini dans le classeur.

Mais on peut le définir seulement dans la feuille, par exemple avec cette macro :

Code:
Sub Nomme()
ActiveSheet.Names.Add "aaa", ActiveCell
End Sub
Voyez bien comment ces noms définis diffèrent.

La solution donnée au post #9 liste tous les noms des plages auxquelles appartient la cellule active.

A+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Macro permettant se savoir si une cellule porte déjà un nom

Bonjour Chebe, Job75,

Tu utilise le terme « Niveau » pour lister le nom du classeur
Est-ce que ce terme s'utilise pour désigner habituellement un classeur ?
Ou il y a une autre raison ?

Comme l'a précisé Job75, le "niveau" désigne le nom du classeur si le nom retenu pour la cellule est défini pour tout le classeur. Si le nom est seulement défini pour une feuille, "niveau" indique le nom de cette feuille.

Il n’y a rien de prévu pour indiquer quand la cellule n’a pas de nom
J'ai tenté de le rajouter.

Je suis quand même arrivé à la prendre en défaut. Dans le cas, peut courant, il est vrai, que l’on utilise un même nom pour plusieurs cellules dans 2 feuilles du classeur
Devrait être rajouté.

Je vois que dans ton exemple, tu as mis un nom de formule « Pi_2 »
Mais les noms de formules ne sont pas rattachés à une cellule
Donc ta macro n’apporte rien dans ce cas, non ??
C'est pour le test, la macro doit aussi traiter ce cas dans sa boucle.

nb: la programmation est nulle! :( mais je n'avais pas l'intention d'y passer du temps.
 

Pièces jointes

  • TrouverNom.xlsm
    25.1 KB · Affichages: 41
Dernière édition:

Chebe

XLDnaute Nouveau
Re : Macro permettant se savoir si une cellule porte déjà un nom

Bonjour Job75

Merci pour ce renseignement.

Je n’avais jamais fait attention à ce que l’on pouvait mettre un nom dans une feuille plutôt que dans la classeur.
En plus d’une macro, j’aurais appris une chose de plus sur Excel. :)

Du coup plutôt que de mettre un même nom dans le classeur pour des cellules différentes sur plusieurs feuilles du classeur, on peut nommer ces cellules avec le même nom mais dans chaque feuille concernée.

Cela évite de prendre à défaut la macro, qui ne voit pas les cellules nommées dans le classeur avec le même nom sur plusieurs feuilles.


Bonjour Mapomme
la programmation est nulle!
Pour une macro nulle, en ce qui me concerne, elle me va très bien ! :eek:

mais je n'avais pas l'intention d'y passer du temps
Soit tu es modeste, soit tu travaille très vite ! :p

Après coup, j’avais trouvé quelques bugs dans ta première version, mais dans celle-ci, mis à part le cas des noms dans le classeur pour plusieurs cellules sur plusieurs feuilles, cela me semble parfait.

Merci à tous les deux
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 336
Messages
2 087 389
Membres
103 534
dernier inscrit
Kalamymustapha