Création de noms dynamique

Résolu
farreneit Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   -  
farreneit Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    tu n'expliques pas ce que tu veux réaliser.
    1
    1. farreneit Messages postés 280 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
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > farreneit Messages postés 280 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.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
    3. farreneit Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   10 > yg_be Messages postés 23437 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
    4. farreneit Messages postés 280 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
    5. farreneit Messages postés 280 Date d'inscription   Statut Membre Dernière intervention   10 > farreneit Messages postés 280 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