Création de noms dynamique

Résolu
farreneit Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   -  
farreneit Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   - 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-t 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
A voir également:

1 réponse

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention    
bonjour,
tu n'expliques pas ce que tu veux réaliser.
1
farreneit Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   10
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583 > farreneit Messages postés 282 Date d'inscription   Statut Membre Dernière intervention  
 
peux)tu spécifier le langage (basic) dans les balises de code, quand tu partages du vba? explications: https://codes-sources.commentcamarche.sitesdebloques.org/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   Statut Membre Dernière intervention   10 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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   Statut Membre Dernière intervention   10
 
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   Statut Membre Dernière intervention   10 > farreneit Messages postés 282 Date d'inscription   Statut Membre Dernière intervention  
 
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