Macro pour créer plage dynamique

Bonjour à tous

Tout d'abord un grand merci pour votre forum car j'ai longtemps trouvé les réponses à mes questions ici

Cette fois j'en appelle directement à votre aide

J'aurai besoin d'une macro qui me nomerait des plages mais de façon dynamique (avec la fonction décaler) à partir d'un tableau de données dont la première ligne est le titre à donner à cette plage.

Le nombre de colonnes peut-être variable

En gros j'aimerai l'équivalent de la fonction "définir un nom depuis la selection" mais qui crée des plages dynamiques

Merci d'avance

Bonjour et bienvenue,

Joins un fichier, ce sera plus facile de proposer une solution

Cordialement

Bonjour et bienvenu(e),

Merci de joindre un fichier à ta demande.

Cdlt.

Hello je n'ai pas de fichier en particulier

Mais voici un exemple de ce que j'aimerai faire

Bonjour,

Malheureusement ta formule exemple est fausse ce qui ne permet pas de savoir exactement comment tu souhaites définir les plages...

J'ai choisi de définir les plages de données (sans la ligne de titre)

De plus les règles de nommage excluent un certain nombre de caractère dont "espace" ce qui ne permet pas toujours d'utiliser le contenu de la cellule pour nommer la plage.

Pour éviter les complications dues aux caractères interdits 'ai donc choisi :

"ColA" comme nom pour les données de la colonne A

"ColB" comme nom pour les données de la colonne B

"ColC"...

La macro est basée sur le nombre d'enregistrements de la colonne A

Sub Galopin()
Dim i, k
Cells(1).Activate
    ActiveWorkbook.Names.Add Name:="ColA", RefersTo:= _
        "=OFFSET(Feuil1!$A$1,1,,COUNTA(Feuil1!$A:$A)-1)"
i = Cells(1).CurrentRegion.Columns.Count
For k = 1 To i - 1
    ActiveWorkbook.Names.Add Name:="Col" & Chr(k + 65), RefersTo:= _
        "=OFFSET(ColA,," & k & ")"
Next
End Sub

A+

Re,

Sur base du fichier, j'aurais fait ceci :

Sub plagedyn()
Dim dlg As Integer, dcl As Integer
Dim plage As Range
dlg = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
dcl = Cells(2, Columns.Count).End(xlToLeft).Column
Set plage = Range(Cells(1, 1), Cells(dlg, dcl))
End Sub

Si ok et terminé, merci de cloturer le fil en cliquant sur le V vert à coté du bouton EDITER lors de votre réponse

Cordialement

Bonjour,

Une autre proposition à étudier et à adapter.

Cdlt.

Public Sub CreateNames()
Dim wb As Workbook
Dim ws As Worksheet
Dim lastRow As Long, lastCol As Long, lCol As Long
Dim nm As String

    Application.ScreenUpdating = False

    Set wb = ActiveWorkbook
    Set ws = ActiveSheet

    With ws
        lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For lCol = 1 To lastCol
            lastRow = .Cells(.Rows.Count, lCol).End(xlUp).Row
            nm = Replace(.Cells(1, lCol), " ", "_")
            wb.Names.Add Name:=nm, RefersTo:=.Cells(1, lCol).Resize(lastRow)
        Next lCol
    End With

    Set ws = Nothing
    Set wb = Nothing

End Sub

Bonjour à tous & et un ENORME Merci à GOLOPIN DAN & JEAN-ERIC pour vos 3 retours

Tout d'abord galopin, je ne comprends pas pourquoi tu dis que ma formule est fausse.? Je me suis peut-etre mal exprimé.

Jette un coup d'oeil à mon screen shot, la formule fait le job : elle me sélectionne uniquement les données de la colonne B (selon le nombre de lignes, j'ai volontairement pris la colonne A en référence du nombre de lignes). Si je rajoute une ligne avec des données, la sélection va suivre. C'est ça que j'aimerai généraliser sur toutes les colonnes de mon tableau.

Après j'ai testé ta Macro et elle fait aussi le job. Il ne reste plus qu'a lui attribuer un bon nom. je suis conscient que l'espace est interdit dans le nom ne peut-on pas en amont de la création des plages, remplacer tous les espaces par un underscore?

Avec l'enregistreur de macro j'ai pensé à ça :

Rows("1:1").Select

Selection.Replace What:=" ", Replacement:="_", LookAt:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

ReplaceFormat:=False

Ensuite on pourrait nommer les plages correctement?

Dan j'ai testé ta macro et malheureusement elle ne fait rien sur mon fichier... Je la lance puis je vais voir dans le module gestionnaire de noms et rien ne se passe

Jean-Eric, ta macro me met une erreur 400.

Je pense partir sur la macro de Galopin. Néanmoins pourriez vous m'aider à nommer les plages une fois les espaces remplacés par des underscores?

image1

Bonjour,

ce que j'avais réalisé il y a qq temps.

noms dynamiques

eric

72noms-dynamiques.zip (82.17 Ko)

Hello Eric avec 3i

Sympa également ta Macro.

Peut-on bypasser la première question sur les Cas? sachant que je serai toujours dans le cas de figure n°1?

Thx

C'est juste pour tester.

Normalement tu sélectionnes tes colonnes entières (ou une cellule unique de la ligne de titre pour nommer la plage des données de la zone en cours) avant d'appeler la macro et elle embraye sur le bon cas.

Modop court :

Sélectionner les colonnes sur sa feuille et lancer la macro nomDynamique

Sélection multiple autorisée.

Tous les caractères interdits sont traités, pas seulement les espaces.

Les noms interdits le sont également. Par exemple tu ne peux avoir comme nom L, C, R, Ex2, ou bien Cas1 dans un fichier xlsx.

edit : les noms créés dans ce cas seront _L, _C, _R, _Ex1 et _Cas1

Edit2 : tu n'es pas obligé d'amener la macro et le formulaire dans ton classeur comme en général ce n'est à faire qu'une fois.

La macro s'exécute sur le classeur actif.

+ une version xlsm

re

Dan j'ai testé ta macro et malheureusement elle ne fait rien sur mon fichier... Je la lance puis je vais voir dans le module gestionnaire de noms et rien ne se passe

Effectivement la macro que je te propose défini la plage automatiquement. Il te suffit d'utiliser le mot plage mais utilise le mot "PLAGE" que tu peux utiliser plus bas dans ta macro pour faire tes opérations en VBA.

Si tu veux absolument créer un nom : ajoute cette instruction juste avant le END SUB

ActiveWorkbook.Names.Add Name:="plage", RefersToR1C1:=plage

A voir avec ton projet, mais je serais resté avec la fonction décaler qui a l'avantage de ne pas faire appel à une macro pour définir la plage dans ta feuille

Cordialement.

Yes merci à tous les 2 pour ces précisions

Je vais essayer de m'en sortir. Mais l'idée est là !!!!

++

regarde l'edit2 de mon précédent post

Ca facilite les choses

Merci !!!

Bonjour,

Me revoilà, avec ma proposition initiale.

Exécuter la procédure et voir le gestionnaire de noms.

Cdlt.

Private Sub cmdCreateNames_Click()
Dim lastRow As Long, lastCol As Long, lCol As Long
Dim nm As String
    Application.ScreenUpdating = False
    With ActiveSheet
        lastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For lCol = 1 To lastCol
            lastRow = .Cells(.Rows.Count, lCol).End(xlUp).Row
            nm = Replace(.Cells(1, lCol), " ", "_")
            ActiveWorkbook.Names.Add _
                    Name:=nm, _
                    RefersTo:=.Cells(1, lCol).Resize(lastRow)
        Next lCol
    End With
End Sub
Rechercher des sujets similaires à "macro creer plage dynamique"