Retrouver le Name d'un Range

ludo27

XLDnaute Junior
bonjour,
j'ai développé une petite fonction qui permet de retrouver le premier Name défini sur un range passé en paramètre :

Code:
Function SearchName(MyRange As Range, Optional bGlobal As Boolean = True) As Name
Dim N As Name
On Error GoTo error_SearchName

    If (bGlobal) Then
    For Each N In MyRange.Application.ActiveWorkbook.Names
        If N.RefersToR1C1 = MyRange Then
            Set SearchName = N
            Exit Function
        End If
    Next N
    Else:
        For Each N In MyRange.Worksheet.Names
        If N.RefersToR1C1 = MyRange Then
            Set SearchName = N
            Exit Function
        End If
        Next N
    End If
    
    Exit Function
error_SearchName:
    Set SearchName = Null
End Function

la ligne
Code:
If N.RefersToR1C1 = MyRange Then
me donne l'erreur :
Incompatibilité de type

Je n'arrive pas à parcourir tous les Names du classeur et à comparer la valeur de leur attribut RefersToR1C1.

Si quelqu'un a une idée, ou une autre manière de récupérer le name d'un range ...

Merci ;)
 

ludo27

XLDnaute Junior
Re : Retrouver le Name d'un Range

Bonjour Ludo27 :),
Je ne suis pas sûr d'avoir tout bien compris, mais si tu utilisais Intersect pour savoir si ton Range se croise avec ton Name ?
Bonne journée :cool:
Merci JNP; je cherche à savoir parmi les Names du workbook, lequel est défini à partir du range MyRange.

Ajouté avec :
Code:
MyRange.Application.ActiveWorkbook.Names.Add Name:=MyName, RefersToR1C1:=MyRange

Je ne vois pas de propriété Intersect aux Names.
;)


A priori N.RefersTo ou N.RefersToR1C1 renvoie un String et pas un Name.
je suis en train d'essayer de matcher N.RefersTo à MyRange.Address ... je n'arrive pas à trouver le Name qui va bien mais je n'ai plus l'erreur ...
 
Dernière édition:

ludo27

XLDnaute Junior
Re : Retrouver le Name d'un Range

J'ai trouvé :
le test à faire était :
Code:
If N.RefersToLocal = MyRange.Name Then

Code:
Function SearchName(MyRange As Range, Optional bGlobal As Boolean = True) As Name
Dim N As Name
On Error GoTo error_SearchName

    If (bGlobal) Then
    For Each N In MyRange.Application.ActiveWorkbook.Names
        If N.RefersToLocal = MyRange.Name Then
            Set SearchName = N
            Exit Function
        End If
    Next N
    Else:
        For Each N In MyRange.Worksheet.Names
      If N.RefersToLocal = MyRange.Name Then
            Set SearchName = N
            Exit Function
        End If
        Next N
    End If
    
    Exit Function
error_SearchName:
    Set SearchName = Null
End Function

:)
 

JNP

XLDnaute Barbatruc
Re : Retrouver le Name d'un Range

Re Ludo27 :),
Je pensais que tu voulais vérifier si une plage nommée correspondait à ta sélection,d'où l'idée d'utiliser Intersect pour vérifier si la plage nommée et ton range avaient une intersection...
Maintenant, en exécutant en pas à pas ta fonction, il semblerait que ton N.RefersToR1C1 renvoie quelque chose du type "=Feuil1!R9C3:R18C3", ce qui ne parait pas correspondre à l'adresse de ton Range.
Bonne journée :cool:
Modif : Impeccable, tu as trouvé
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Retrouver le Name d'un Range

bonjour a tous

pour la comparaison:

Code:
If N.RefersToR1C1 = MyRange.Address(ReferenceStyle:=xlR1C1) Then

ensuite : ne mettre la gestion d'erreur que lorsque la fonction est operationnelle

Par ailleurs

MyRange.Application.ActiveWorkbook.Names ne me semble pas correct

ActiveWorkbook.Names devant suffire

Enfin Null est de type Variant et ne peut donc faire reference a un Name

bon courage