Nommer et renommer une plage de cellules

bonjours a tous,

voilà, je voudrais savoir si y a possibilité de nommer ou renommer un plage de cellule par une cellule.

je m'explique, j'ai un tableau avec des listes en cascade, si ces listes change ( comme c'est le cas ) je dois modifier le nom de la plage concerner pour que ces listes en cascade fonctionne.

alors je souhaiterai par exemple : que feuil1 cellule A2 = toto, A2 = blabla, etc jusqu'a A6, si cellule A2 contient le mot Plombier la plage concerné porterai le même nom , en faite je souhaite pouvoir changer le nom ma plage de cellule à volonté sans passez par le gestionnaire de nom, rien que par le contenue de la cellule A2.

j'ai cherché sur plusieurs sites et forums et je n'ai rien trouvé à ce sujet, à croire que c'est impossible à réalisé.

et si possible une explication pour chaque ligne de commande du code, pour ma compréhension et pouvoir l'adapter pour de future projets

je vous remercie d'avance de l'aide que vous pourrez m'apporter.

cordialement

Bonjour,

Sub test()

    ActiveWorkbook.Names("ancien_nom").Delete
    ActiveWorkbook.Names.Add Name:="nouveau_nom", RefersToR1C1:="=Feuil1!R5C3:R8C3"

End Sub

Faut-il commenter ?

  • la première ligne efface le nom
  • la seconde crée un nom et affecte une plage

j'avais pensé à un truc de ce genre.

mais ce ne fonctionne pas et je n'ai pas trouvé mon erreur.

pouvez vous m'aidé merci d'avance.

cordialement

Option Explicit

Dim Tbl(1 To 5) As String

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Nom As Name

If Target.Count > 1 Then Exit Sub

If Target.Value = "" Then Exit Sub

If Intersect(Target, Range("A2:A6")) Is Nothing Then Exit Sub

Set Nom = ThisWorkbook.Names(Tbl(Target.Row))

Nom.Name = Target.Value

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

If Target.Value = "" Then Exit Sub

Tbl(1) = Range("A2")

Tbl(2) = Range("A3")

Tbl(3) = Range("A4")

Tbl(4) = Range("A5")

Tbl(5) = Range("A6")

Bonjour,

à tester,

édit: pour modifier l'adresse de la plage de cellule d'un nom existant

ActiveWorkbook.Names("LeNom").RefersTo = Range($ adresse de la  nouvelle plage de cellule)

par exemple le nom "zaza" faisant référence à "=Feuil1!A1:A5"

pour changer la référence de ce nom:

ActiveWorkbook.Names("zaza").RefersTo = Range("Feuil2!B3:B10")

Bonjour,

Comme je te l'ai donné sur l'autre forum, le code ci-dessous...

Dim Tbl(1 To 5) As String

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Nom As Name

    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    If Intersect(Target, Range("A1:A5")) Is Nothing Then Exit Sub

    Set Nom = ThisWorkbook.Names(Tbl(Target.Row))

    Nom.Name = Target.Value

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub

    Tbl(1) = Range("A1")
    Tbl(2) = Range("A2")
    Tbl(3) = Range("A3")
    Tbl(4) = Range("A4")
    Tbl(5) = Range("A5")

End Sub

...demande à ce que les cellules A1 à A5 contiennent les noms des plages, afin d'être à jour, le tableau doit être chargé donc, j'ai utilisé "SelectionChange()" afin que cela se fasse le plus souvent possible. On peut aussi utiliser "Activate()" de la feuille pour qu'il soit alimenté dès que la feuille est affichée (ce que j'ai fait dans le fichier joint) !

Dans le classeur que je t'ai posté, les zone colorées sont les zones des différentes plages nommées, une fois que tu as changé un nom dans une des cellules A1:A5, tu sélectionnes la plage en question et tu vois bien dans la zone de nom en haut à gauche qu'elle porte bien le nouveau nom donc, je ne sais pas ce que tu attends de plus ?

Je re-poste ici le classeur où j'ai rajouté un sixième zone donc, un sixième nom :

17test-noms.xlsm (19.02 Ko)

Oups, je n'avais pas regardé ta demande sur l'autre forum

voici le code prenant en compte le décalage des noms en A2:A6 :

Dim Tbl(1 To 5) As String

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Nom As Name

    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    If Intersect(Target, Range("A2:A6")) Is Nothing Then Exit Sub

    Set Nom = ThisWorkbook.Names(Tbl(Target.Row - 1))

    Nom.Name = Target.Value

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub

    Tbl(1) = Range("A2")
    Tbl(2) = Range("A3")
    Tbl(3) = Range("A4")
    Tbl(4) = Range("A5")
    Tbl(5) = Range("A6")

End Sub

Private Sub Worksheet_Activate()

    Tbl(1) = Range("A2")
    Tbl(2) = Range("A3")
    Tbl(3) = Range("A4")
    Tbl(4) = Range("A5")
    Tbl(5) = Range("A6")

End Sub

ah tu me sauve la vie.

merci theze.

bonne journée

et dans la foulée Mister Theze, peux-tu m,expliquer son fonctionnement ligne par ligne.

pour l'adapter dans de futur projet.

merci d'avance

Voici le code commenté :

'le tableau à 5 éléments est déclaré en tête de module afin
'que sa portée (durée des valeurs en mémoire) soit de niveau classeur
'(tant qu'il est ouvert, les valeurs restent dans le tableau)
Dim Tbl(1 To 5) As String

Private Sub Worksheet_Change(ByVal Target As Range)

    'déclare une variable de type objet "Name"
    Dim Nom As Name

    'si la cellule qui déclanche la procédure événementielle n'est pas
    'seule (cas où on effectue une suppression sur plusieurs cellules) on sort
    'et si la cellule est vide, on sort aussi et enfin, si la cellule
    'ne se trouve pas être une des cellules de A2 à A6, sortie aussi !
    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    If Intersect(Target, Range("A2:A6")) Is Nothing Then Exit Sub

    'arrivé ici, on doit se trouver avec une cellule seule ayant une valeur
    'et située dans la plage A2:A6 (l'une d'elles)
    'on affecte à la variable l'ancien nom...
    Set Nom = ThisWorkbook.Names(Tbl(Target.Row - 1))

    '...et on le renomme
    Nom.Name = Target.Value

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    'idem que plus haut et ces lignes peuvent malgré tout être supprimées
    'car on cherche juste à remplir le tableau avec les noms les plus récents
    If Target.Count > 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub

    'inscrit les valeurs dans le tableau
    Tbl(1) = Range("A2")
    Tbl(2) = Range("A3")
    Tbl(3) = Range("A4")
    Tbl(4) = Range("A5")
    Tbl(5) = Range("A6")

End Sub

Private Sub Worksheet_Activate()

    Tbl(1) = Range("A2")
    Tbl(2) = Range("A3")
    Tbl(3) = Range("A4")
    Tbl(4) = Range("A5")
    Tbl(5) = Range("A6")

End Sub
Rechercher des sujets similaires à "nommer renommer plage"