VBA - gestionnaire de noms
Bonjour à tous,
Je cherche une solution en VBA pour automatiser la saisie des "Noms" (des centaines) dans le Gestionnaire de noms, mes recherches sont infructueuse.
Suivant le visuel ci-après, quel code puis-appliquer ?
Le but est de copier la valeur de la cellule sélectionnée dans le champs Noms.... j'ai un début de code mais c'est la fin de l'instruction qui me manque.
Option Explicit
Sub Macro1()
Dim A As String
A = ActiveCell.Value
ActiveWorkbook.Names.Add Name:=A
End Sub
Quelqu'un connaitrait-il la solution ? et le top applicable à une plage de cellules...
Merci par avance.
bonjour El1ooolio
pour écrire via vbe il faut mettre .name pour que le nom de cellule soit inscrit
sheets("feuil1").Range("D1").name = "el1000lio"
Bonjour,
Voilà pour finaliser ta procédure, telle que commencée :
Sub Macro1()
Dim A As String, Adr As String
With ActiveCell
A = .Value
Adr = "='" & .Worksheet.Name & "'!" & .Address
End With
ActiveWorkbook.Names.Add A, Adr
End Sub
Cependant elle ne te permet pas d'"automatiser" l'insertion de dizaines de noms ou plus !
Pour ce faire, il te faut parcourir les cellules à nommer au moyen d'une boucle et procéder à l'insertion à chaque tour de boucle.
Une gestion d'erreur est sans doute à prévoir, en cas de nom incompatible ou manquant...
Cordialement.
Merci à tous les deux,
Vos réponses m'ont énormément aider.... et ci-après le code d'une simplicité "enfantine" me permet de générer les NOMS sur une plage de cellules "énormes" et ça fonctionne
Sub test()
Dim i As Variant
For Each i In Selection
i.Name = i.Value
Next i
End Sub
Merci encore !
Bonjour,
je déterre ce vieux post car c'est jusqu'à présent celui qui se rapproche le plus de ce dont j'ai besoin...
Voici tout d'abord à quoi ressemble mon fichier.
Pour résumer, un tableau avec des noms d'avions et les immatriculations des avions.
J'aimerais que les listes créé par ma macro se mette à jour tout seul sans faire de doublons. Je précise que les listes en question sont appelées en cascade dans une autre page.
J'ai définis la liste "AVION" qui va de A4 à A 59 et ensuite sur chaque ligne la liste des immats de chaque TYPE d'avions.
Par exemple BE_76 correspond à I4:AG4.
J'avais commencé à faire mon code de la manière suivant jusqu'à ce que je me rende compte que si je changeais l'ordre de mes avions ou si je mettais le nom à jour, j'obtenais des doublons:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "*****"
If Not Application.Intersect(Target, Range("A4:A59")) Is Nothing Then
ActiveWorkbook.Names.Add Name:="AVION", RefersToR1C1:= _
"='Aircraft list'!R4C1:R59C1"
Range("H4:AG59").Select
Selection.CreateNames Top:=False, Left:=True, Bottom:=False, Right:= _
False
End If
If Not Application.Intersect(Target, Range("I4:AG59")) Is Nothing Then
ActiveWorkbook.Names.Add Name:="AVION", RefersToR1C1:= _
"='Aircraft list'!R4C1:R59C1"
Range("H4:AG59").Select
Selection.CreateNames Top:=False, Left:=True, Bottom:=False, Right:= _
False
End If
Range("A4").Select
ActiveSheet.Protect "*******", True, True, True
End Sub
Puis j'ai essayé de l'améliorer, mais inutique de vous dire que ca rame et que je suis sure qu'il y a moyen de faire mieux...:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "*****"
If Not Application.Intersect(Target, Range("A4:A59")) Is Nothing Then
Dim nm As Name
For Each nm In ActiveWorkbook.Names
nm.Delete
Next nm
ActiveWorkbook.Names.Add Name:="AVION", RefersToR1C1:= _
"='Aircraft list'!R4C1:R59C1"
Range("H4:AG59").Select
Selection.CreateNames Top:=False, Left:=True, Bottom:=False, Right:= _
False
End If
If Not Application.Intersect(Target, Range("I4:AG59")) Is Nothing Then
Dim nm As Name
For Each nm In ActiveWorkbook.Names
nm.Delete
Next nm
ActiveWorkbook.Names.Add Name:="AVION", RefersToR1C1:= _
"='Aircraft list'!R4C1:R59C1"
Range("H4:AG59").Select
Selection.CreateNames Top:=False, Left:=True, Bottom:=False, Right:= _
False
End If
Range("A4").Select
ActiveSheet.Protect "********", True, True, True
End Sub
Bref je sollicite votre aide pour simplifier un peu le bordel et faire en sorte que mon fichier ne rame pas...
Merci à voulus.