Création de noms dynamique

Résolu/Fermé
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 - 18 juil. 2021 à 11:19
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 - 18 juil. 2021 à 20:22
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

yg_be Messages postés 21115 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 février 2023 1 307
18 juil. 2021 à 12:36
bonjour,
tu n'expliques pas ce que tu veux réaliser.
1
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
18 juil. 2021 à 12:52
Bonjour,

Merci pour ta réponse.

J’aimerais que les différents tableaux se nomment automatiquement.

Par exemple avec le screen que J’ai envoyé, la macro lancée devrait nommer la plage A2:B6 : FI.

Ensuite la plage D2:E6 : 1B ; la plage G2:H25 : 2B ; et ainsi de suite jusqu’à qu’il n’y ait plus de tableau.

Il se peut par contre que je créais plus tard de nouvelles listes à la suite ou que je rajoute des donnés dans les tableaux déjà existants. Il faudrait donc que quand je réactive la macro, les listes nommées se mettent à jour.

J’espère que c’est assez clair ?

Merci !
0
yg_be Messages postés 21115 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 février 2023 1 307 > farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023
18 juil. 2021 à 12:59
peux)tu spécifier le langage (basic) dans les balises de code, quand tu partages du vba? explications: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

quel soucis as-tu avec l'écriture de la macro? tous tes tableaux ont la même largeur?
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10 > yg_be Messages postés 21115 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 février 2023
18 juil. 2021 à 13:04
C’est noté !


Mon problème est principalement sur les fonctions permettant de renommer les listes.

Oui tous les tableaux ont la meme largeur mais pas la meme longueur.
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10
18 juil. 2021 à 15:14
Voilà ce que j'ai fait :

Sub test()
'
' test Macro
'

'

Dim titre As String
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

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

Loop
    

End Sub


Je ne sais juste pas comment programmer mon If, possible de me donner un peu d'aide s'il te plait ?

Et sinon le reste du code te parrait correct ?

Merci !
0
farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023 10 > farreneit Messages postés 282 Date d'inscription jeudi 5 juillet 2012 Statut Membre Dernière intervention 13 janvier 2023
18 juil. 2021 à 15:30
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.
0