Création de noms dynamique

[Résolu]
Signaler
Messages postés
242
Date d'inscription
jeudi 5 juillet 2012
Statut
Membre
Dernière intervention
30 juillet 2021
-
Messages postés
242
Date d'inscription
jeudi 5 juillet 2012
Statut
Membre
Dernière intervention
30 juillet 2021
-
Bonjour,

Pour un projet j'ai du nommer plusieurs listes grâce au "Name Manager". Toutefois ces listes évoluent dans le temps et afin d'éviter de modifier manuellement ce grand nombre de listes j'aimerais utiliser VBA.

Je ne sais pas s'il est possible d'ordonner une modification des données integrées dans une liste, sinon je pense partir sur une suppression de tous les noms et une recréation (bien que cela soit moins pratique si je décide de nommer d'autres cellules pour un autre besoin).

J'ai trouvé un code sur internet que j'ai essayé d'adapter à ma situation mais je ne comprends pas totallement leur code :

Sub actuanom()
'
' actuanom Macro
'

'

Dim LastCol As Long, _
Labelrow As Long, _
Col As Long

Dim sName As String
Dim c As Range
Dim Sht As String

'assign row and column parameters
'**adjust for the row containing your headings
Labelrow = 1
LastCol = Range("IV1").End(xlToLeft).Column

'grab sheet name
Sht = "'" & "TEST" & "'"

For Each c In Range(Cells(Labelrow, 1), Cells(Labelrow, LastCol))
Col = c.Column
sName = c.Value
If Len(sName) > 1 Then
'replace spaces with underscores
sName = Replace(sName, " ", "_", 1)
'Create the name
ActiveWorkbook.Names.Add Name:=sName, RefersToR1C1:="=OFFSET(" & Sht & "!R2C" & Col & ",0,0,COUNTA(" & Sht & "!C" & Col & ")-1,1)"
End If
Next c

End Sub



Voici ci-joint une photo de la feuille en question, l'idée serait que chaque tableau devienne une liste avec comme noms les cellules : B1, E1, H1, ...



Merci d'avance pour votre aide !

Bon weekend

1 réponse

Messages postés
16466
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 août 2021
883
bonjour,
tu n'expliques pas ce que tu veux réaliser.
Messages postés
242
Date d'inscription
jeudi 5 juillet 2012
Statut
Membre
Dernière intervention
30 juillet 2021
7 >
Messages postés
242
Date d'inscription
jeudi 5 juillet 2012
Statut
Membre
Dernière intervention
30 juillet 2021

Sub test()
'
' test Macro
'

'

Dim titre As Range
Dim compteur As Range

Set titre = Sheets("TEST").[B1]



Do While titre <> ""

    Set compteur = titre.Offset(1)

    'If une entrée dans le name manager avec le nom "titre" existe
    
'   Then     ActiveWorkbook.Names(titre).Delete

    
    ActiveWorkbook.Names.Add Name:="_" & titre, RefersTo:=Range(compteur, compteur.End(xlDown))
    
    
    
    
    Set titre = titre.Offset(0, 3)

Loop
    

End Sub


Petite update, cela fonctionne. Il y a juste la partie du IF toujours manquante.
Messages postés
16466
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 août 2021
883 >
Messages postés
242
Date d'inscription
jeudi 5 juillet 2012
Statut
Membre
Dernière intervention
30 juillet 2021

je ferais ainsi pour supprimer le nom existant:
Dim tt As Name
For Each tt In ThisWorkbook.Names
    If tt.Name = titre Then
        tt.Delete
    End If
Next tt 


en lisant le code, je me demande si il associe vraiment le nom aux deux colonnes de tes tableaux, plutôt qu'uniquement à la seconde colonne.
Messages postés
242
Date d'inscription
jeudi 5 juillet 2012
Statut
Membre
Dernière intervention
30 juillet 2021
7 >
Messages postés
16466
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 août 2021

Il l'associe bien uniquement à la seconde colonne et c'est ce que je voulais.

Merci pour supprimer le nom existant, cela à l'air de marcher.

Je remets mon code complet final ici :

Sub actuanom()
'
' actuanom Macro
'

'

Dim titre As Range
Dim compteur As Range
Dim compteur2 As Range

Dim tt As Name

Set titre = Sheets("Mécanisme").[B1]



Do While titre <> ""

    Set compteur = titre.Offset(1, -1)
    Set compteur2 = titre.Offset(1, -1)

    For Each tt In ThisWorkbook.Names
        If tt.Name = titre Then
            tt.Delete
        End If
    Next tt

    
    ActiveWorkbook.Names.Add Name:="_" & titre, RefersTo:=Range(compteur, compteur.End(xlDown))
    ActiveWorkbook.Names.Add Name:="__" & titre, RefersTo:=Range(compteur2, compteur.End(xlDown).Offset(, 1))
    
    Set titre = titre.Offset(0, 3)

Loop
    

End Sub


Encore merci pour tout !!
Messages postés
16466
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 août 2021
883 >
Messages postés
242
Date d'inscription
jeudi 5 juillet 2012
Statut
Membre
Dernière intervention
30 juillet 2021

tu nous a donc induit en erreur en écrivant:
la macro lancée devrait nommer la plage A2:B6 : FI

ton utilisation des noms avec _ et __ me semble être une sorte de fuite en avant. ne devrais-tu pas supprimer que tu utilises, si ils existent déjà?
Messages postés
242
Date d'inscription
jeudi 5 juillet 2012
Statut
Membre
Dernière intervention
30 juillet 2021
7 >
Messages postés
16466
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 août 2021

Comment ça induit en erreur ?

Je veux justement que la plage A2:B6 soit nommée FI (en l’occurrence _FI).

L’utilisation des _ et __ est pour une autre utilisation.