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.