Nommer chaque colonne de la première/dernière ligne

Bonjour à tous,

Merci d'avance pour vos réponses.

Je galère pour configurer un fichier Excel. J'ai pas mal de formule VBA avec des plages nommées.

Pour me simplifier la vie, j'utilise une macro qui nomme chaque colonne par son entête. Seulement, elle nomme la colonne entière alors que j'aimerai que le nom de chaque colonne soit circonscrit de la première à la dernière ligne non vide dans chaque colonne. Le nombre de colonne peut varier, ce qui complexifie mes recherches.

Pour l'instant, je me réfère à ce code que j'ai trituré sans succès jusqu'à présent :

Sub Nommer_les_colonnes()

Dim aName As Name, TempName As String, TempRefersTo As String

Application.DisplayAlerts = False

ActiveSheet.UsedRange.Column.CreateNames Top:=True, _

Left:=False, Bottom:=False, Right:=False

For Each aName In ActiveWorkbook.Names

aName.RefersToR1C1 = "=" & Range(aName.RefersTo).EntireColumn.Address(True, True, xlR1C1)

Next aName

Application.DisplayAlerts = True

End sub

Je n'arrive pas à remplacer le "entirecolumn" par l'expression correcte.

Auriez-vous des pistes ou une autre méthode ?

Merci d'avance,

Cordialement.

Bonjour,

Essaie comme cela

Sub Nommer_les_colonnes()
Dim aName As Name
Dim TempName As String, TempRefersTo As String
    Application.DisplayAlerts = False
    ActiveSheet.UsedRange.Columns.CreateNames Top:=True, _
    Left:=False, Bottom:=False, Right:=False
    For Each aName In ActiveWorkbook.Names
        aName.RefersToR1C1 = "=OFFSET(Feuil1!R2C" & Range(aName).Column & ",,,COUNTA(Feuil1!C" & Range(aName).Column & ")-1)"
    Next aName
    Application.DisplayAlerts = True
End Sub

A+

Bonjour,

Ca tombe bien, c'est ce que je suis en train de me faire. Tu pourras faire un test grande largeur

A la différence que la plage nommée commence à la ligne 2 pour exclure le titre.

Ce sont des noms dynamiques qui sont créés. Un ajout ou retrait dans la liste est pris automatiquement en compte sans à avoir à redéfinir le nom.

Des options de mise en forme des listes sont prévues : supprimer les doublons, trier, ...

Tu peux enregistrer le fichier en xla que la macro soit toujours disponible.

Regarde ce que tu en penses, les critiques sont bienvenues.

eric

Merci pour vos réponses expresses (trop sympa). Je teste et je vous renvoie le résultat.

Julo


frangy a écrit :

Bonjour,

Essaie comme cela

Sub Nommer_les_colonnes()
Dim aName As Name
Dim TempName As String, TempRefersTo As String
    Application.DisplayAlerts = False
    ActiveSheet.UsedRange.Columns.CreateNames Top:=True, _
    Left:=False, Bottom:=False, Right:=False
    For Each aName In ActiveWorkbook.Names
        aName.RefersToR1C1 = "=OFFSET(Feuil1!R2C" & Range(aName).Column & ",,,COUNTA(Feuil1!C" & Range(aName).Column & ")-1)"
    Next aName
    Application.DisplayAlerts = True
End Sub

A+

Merci pour ta solution, elle permet de nommer de ligne 2 à la dernière ligne colonne par colonne sans problème. La manipulation par "range("nomdelaplage").select marche parfaitement.

En revanche, juste pour information, le nom n'apparaît pas dans la case en haut à gauche (en dehors du tableur) lorsque l'on effectue une sélection à la souris. Est-ce normal ou provoqué?

Merci en tout cas Frangy, c'est nickel.

Je vais tester le code d'eriic. hahaha!!

eriiic a écrit :

Bonjour,

Ca tombe bien, c'est ce que je suis en train de me faire. Tu pourras faire un test grande largeur

A la différence que la plage nommée commence à la ligne 2 pour exclure le titre.

Ce sont des noms dynamiques qui sont créés. Un ajout ou retrait dans la liste est pris automatiquement en compte sans à avoir à redéfinir le nom.

Des options de mise en forme des listes sont prévues : supprimer les doublons, trier, ...

Tu peux enregistrer le fichier en xla que la macro soit toujours disponible.

Regarde ce que tu en penses, les critiques sont bienvenues.

eric

Salut Eric, Je n'ai pas du tout le niveau VBA pour émettre des critiques sur un code aussi évolué. Il fonctionne parfaitement pour ma part et l'interface useform donne une réelle impression de contrôle.

Merci en tout cas. Ta solution répond également à mon problème.

Bonne aprem

Bonjour,

Si ça t'intéresse quelques améliorations :

  • ne demande suppression des doublons que s'il y en a.
  • possibilité de créer un rapport des noms créés et leurs caractéristiques.

eric

Salut Eric, j'ai regardé ton nouveau fichier. Je pense réutiliser certaines parties de ton code pour mes besoins. Elles marchaient nikel avec mes fichiers.

Frangy, avec le code modifié par tes soins : Sub Nommer_les_colonnes()

Dim aName As Name

Dim TempName As String, TempRefersTo As String

Application.DisplayAlerts = False

ActiveSheet.UsedRange.Columns.CreateNames Top:=True, _

Left:=False, Bottom:=False, Right:=False

For Each aName In ActiveWorkbook.Names

aName.RefersToR1C1 = "=OFFSET(Feuil1!R2C" & Range(aName).Column & ",,,COUNTA(Feuil1!C" & Range(aName).Column & ")-1)"

Next aName

Application.DisplayAlerts = True

End Sub

Les noms de colonnes apparaissent bien dans le menu "Insertion=>nom" mais je n'arrive pas à les utiliser dans d'autres modules ni dans le tableur par exemple en validation pour des ="liste". Ils existent mais ne sont pas utilisables dans VBE ou dans le Tableur.

Mon problème est résolu mais c'était pour information.

Merci encore.

Rechercher des sujets similaires à "nommer chaque colonne premiere derniere ligne"