Trouver le nom d'une plage en connaissant une cellule de cette plage

zephir94

XLDnaute Impliqué
Bonjour à tous,
Je voudrais connaître le nom d'une plage contenant une cellule.
J'ai des plages nommées avec des mots, après une recherche find je trouve les coordonnées de la cellule contenant le mot recherché mais je voudrais connaître le nom de la plage nommée ou se situe cette cellule !
Des idées ?
Par avance merci à vous tous
Bien cordialement
Zephir94
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Bonjour

S'il est possible d'isoler la plage nommée possible dont la cellule pourrait faire partie, comme par exemple s'il s'agissait d'une partie de la colonne entière comprise entre deux lignes connues, ce Rg là étant déduit de la cellule, on peut prendre : On Error Resume Next: Nom = Rg.Name.Name
Sinon je ne vois pas d'autre solution que d'explorer tous les noms du classeur jusqu'à en trouver un dont le RefersToRange offre une intersection avec la cellule.
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Bonjour,

Code:
Sub Essai()
  MsgBox NomChamp(Range("i6"))
End Sub

Function NomChamp(cel As Range)
 For Each n In ActiveWorkbook.Names
    If Not Intersect(Range(n), cel) Is Nothing Then NomChamp = n.Name
  Next n
End Function

JB
 

zephir94

XLDnaute Impliqué
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Merci à vous deux,

Voici mon début de code :

Code:
With Feuil8
Feuil8.Select
Set x = Cells.find(ComboBox1.Text, , xlValues, xlWhole, , , False)
If Not x Is Nothing Then
        l = x.Row
 Range("I" & l).Select

J'ai oublié de préciser que mes plages sont sur des lignes, mon range trouvé est la première cellule d'une liste .
Connaissant la ligne et la première cellule d'une ligne il faut que je trouve le nom de cette zone !
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Code:
Sub Essai()
  Set x = Cells.Find("kkk", , xlValues, xlWhole, , , False)
  If Not x Is Nothing Then
    MsgBox NomChamp(Range(x.Address))
  End If
End Sub

Function NomChamp(cel As Range)
 For Each n In ActiveWorkbook.Names
    If Not Intersect(Range(n), cel) Is Nothing Then NomChamp = n.Name
  Next n
End Function

JB
 

zephir94

XLDnaute Impliqué
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Bonjour BOISGONTIER ,
euh je comprends rien au code, je le met dans un module fonction et end fonction ?
et la variable n correspond à quoi ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Essayez comme ça :
VB:
Sub MonDébutDeCode()
Dim X As Range, Y As Range
Feuil8.Select
Set X = Cells.Find(ComboBox1.Text, , xlValues, xlWhole, , , False)
If Not X Is Nothing Then
   Set Y = Cells(X.Row, "I")
   MsgBox "Le nom cherché est """ & NomPlgContenant(Y) & """."
   End If
End Sub

Function NomPlgContenant(ByVal Cel As Range) As String
Dim N As Name, R As Range
On Error Resume Next
For Each N In ActiveWorkbook.Names
   Err.Clear: Set R = N.RefersToRange
   If Err = 0 Then
      If Not Intersect(N.RefersToRange, Cel) Is Nothing Then
         NomChamp = N.Name: Exit Function: End If: End If: Next N
NomPlgContenant = "(aucun)"
End Function
 

job75

XLDnaute Barbatruc
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Re,

La fonction de JB complétée pour le cas où des noms ne définissent pas une plage de cellules :

Code:
Function NomChamp$(cel As Range)
Dim n As Name
For Each n In ActiveWorkbook.Names
  If TypeOf Evaluate(n.Name) Is Range Then _
    If Not Intersect(Range(n), cel) Is Nothing Then NomChamp = n.Name
Next
End Function
A+
 

zephir94

XLDnaute Impliqué
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Bonsoir job75,

J'ai essayé ton code mais il ne cherche pas dans ma feuille 8 donc il ne trouve pas.
J'ai exécuté en mode pas a pas j'ai donc essayé de modifier comme ceci :
Code:
For Each n In Feuil8.Names
  
  If TypeOf Evaluate(n.Name) Is Range Then _
    If Not Intersect(Range(n), cel) Is Nothing Then NomChamp = n.Name
Next
t = NomChamp
End With
End Function

la il saute la recherche, avec ActiveWorkbook.Names la variable n est sur une autre page que la feuille 8 !
Une idée ?
 

Dranreb

XLDnaute Barbatruc
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Ma fonction, corrigée.
VB:
Function NomPlgContenant(ByVal Cel As Range) As String
Dim Cls As Workbook, N As Name, R As Range
Set Cls = Cel.Worksheet.Parent
On Error Resume Next
For Each N In Cls.Names
   Err.Clear: Set R = N.RefersToRange
   If Err = 0 Then
      If Not Intersect(R, Cel) Is Nothing Then
         NomPlgContenant = N.Name: Exit Function: End If: End If: Next N
NomPlgContenant = "(aucun)"
End Function
 

job75

XLDnaute Barbatruc
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Bonjour zephir94, JB, Bernard,

S'il y a des plages nommées sur plusieurs feuilles il faut un test supplémentaire :

Code:
Function NomChamp$(cel As Range)
Dim n As Name
For Each n In ActiveWorkbook.Names
  If TypeOf Evaluate(n.Name) Is Range Then _
    If Range(n).Parent.Name = cel.Parent.Name Then _
      If Not Intersect(Range(n), cel) Is Nothing Then NomChamp = n.Name
Next
End Function
A+
 

job75

XLDnaute Barbatruc
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Re,

Un seul test avec On Error Resume Next :

Code:
Function NomChamp$(cel As Range)
Dim n As Name
On Error Resume Next
For Each n In ActiveWorkbook.Names
  If Intersect(Range(n), cel) Is Nothing Then Else NomChamp = n.Name
Next
End Function
A+
 
Dernière édition:

zephir94

XLDnaute Impliqué
Re : Trouver le nom d'une plage en connaissant une cellule de cette plage

Bonsoir à vous tous,
ça fonctionne parfaitement merci à vous deux pour cette aide
Job75 un grand merci pour ce rajout de code concernant plusieurs feuilles même si je n'en ai qu'une je prend ! :cool:
Amicalement

Zephir94
 

Discussions similaires

Statistiques des forums

Discussions
312 169
Messages
2 085 926
Membres
103 043
dernier inscrit
nouha nj