Comment sélectionner mes plages nommées

Bonjour à toutes et tous,

J'ai créé des zones nommées dans mon classeur

Je souhaiterais pouvoir faire quelque chose comme ça :

Range(NOM_De_la_plage).Select

Pour la copier et la coller ailleurs.

Voici mon bout de code :

Private Sub CommandButton1_Click()
Dim shpp As Worksheet
    Dim NameFeuille
    Dim NumSem
    Dim Month
    Dim PlageAcopier
    Month ComboBox1.Value
    NumSem = ComboBox2.Value

    If Mois = "Octobre_2017" Then
    If NumSem = "Semaine 40" Then
    If ComboBox3.Value = "TRIAT" Then
    PlageAimprimer = "=lenomdemaplage"
    End If

Mais mon code bloc plus loin sur :

Range(PlageAimprimer).Select

Une idée ?

Bonjour,

Tu as besoin de guillemets ...

Range("PlageAimprimer").Select

Bonjour,

avec les plage nommées il faut mettre les guillemets,

Range("PlageAimprimer").Select

Bonjour, et merci à tous pour vos réponses.

En mettant les guillemets j'ai une erreur :

"La méthode Range de l'objet '_Global' a échoué"

Est-ce par-ce que je crée mal la variable ?

Voici comment je fais pour créer la variable :

Dim PlageAimprimer
    PlageAimprimer = "NomdeLavariable1"

Merci pour votre aide

Bonjour PG59180,

PlageAimprimer = "NomdeLavariable1"

Tel que tu l'as écrit, c'est juste une chaîne de caractères ; il faut mettre Range() aussi :

PlageAimprimer = Range("NomdeLavariable1")

Cordialement

Bonjour,

Malheureusement ... tes explications sont assez brouillardeuses ...

1. Tes déclarations de variables sont toutes en Variant ... ce qui n'aide pas ... aucune n'est en Range ... ou en String..

2. Où se trouve ce CommandButton ? dans une feuille ... ou dans un UserForm ...?

3. A la base, la plage a-t-elle été définie sur une feuille ou sur le workbook ...?

Désolé ... mais cela fait beaucoup de questions ...

Si tu veux éviter de te confronter à tout cela ... une solution : joindre ton fichier ...

vous avez dit:

J'ai créé des zones nommées dans mon classeur

alors il n'est pas nécessaire de la redéfinir,

[barrer]Dim PlageAimprimer
    PlageAimprimer = "NomdeLavariable1"[/barrer]

seulement:

Set PlageAimprimer = Range("NomdeLavariable1")

Bonjour,

un essai, mais pas trop réveillé...

Private Sub CommandButton1_Click()
Dim shpp As Worksheet
    Dim NameFeuille As String
    Dim NumSem As String
    Dim Month As String
    Dim PlageAcopier As Range
    Dim PlageAimprimer As Range
    Month ComboBox1.Value
    NumSem = ComboBox2.Value

    If Mois = "Octobre_2017" Then
        If NumSem = "Semaine 40" Then
            If ComboBox3.Value = "TRIAT" Then
                Set PlageAimprimer = Range("lenomdemaplage")
            End If

et plus loin dans le code :

Range(PlageAimprimer).Select

@ bientôt

LouReeD

Re,

Coucou Isabelle ...

Isa a raison ... à condition que tu aies ... au préalable ... correctement défini le nom de la plage ... ainsi que l'étendue du nom ...

Bonjour,

tu as aussi l'écriture abrégée, et il faut éviter les .select inutiles :

[monNom].Copy

eric

Bonjour,

Malheureusement je suis loin d'être aguerri à la rédaction des macros.

J'ai qualifié les variables comme il convient (merci SabV), je ne sais pas ce que signifie l'étendue du nom...

Voici un fichier pour aider à y voir plus clair.

Il y a le mois de Octobre 2017 mais il y aurait tous les suivants jusqu'à la fin de l'année et ceux de l'année prochaine).

Sur le mois d'octobre j'ai nommé les plages qui conviennent (Maplage1Triat pour les 5 jours de la semaine 40 de la plages des données "TRIAT", Maplage2Triat pour les 5 jours de la semaine 41 de la plage "Triat", Maplage3Triat pour les 5 jours de la semaine 42 de la plage "Triat" - le principe serait le même pour toutes les autres semaines et cela sur toutes les feuilles d'octobre à décembre 2018).

Sur la feuille il y a une plage "Triat" (je ne l'ai pas nommée et je n'ai mis que 2 noms mais il y pourrait y en avoir beaucoup plus, c'est la zone sur laquelle je note des données en rapport avec le Triat seulement), il y a une plage aussi une plage "5000" idem avec 2 noms seulement non nommée également, c'est la zone sur laquelle je note les données en rapport avec le 5000, etc il y a d'autres plages (non reportées sur le classeur joint mais qui existent sur mon classeur d'origine avec des zonezcomme "10000", "Marathon",...).

Mon objectif et de pouvoir copier les données des zones nommées sur une autre feuille.

Les données de la colonne A sont à coller en A3 sur la nouvelle feuille à créer

Les données de la plage sont à coller en B3 sur cette feuille

J'ai besoin aussi de reporter les lignes de "dates" au dessus des lignes de données.

C'est le résultat qui est sur la feuille 3.

Mon idée était de mettre un bouton sur chaque feuille afin de permettre en cliquant dessus de faire apparaître un formulaire qui permet de sélectionner :

  • le mois
  • la "discipline" (Triat, 5000 etc)
  • la semaine
et de valider la création d'un nouvel onglet sur lequel les données sont reportées puis d'exporter les données dans un PDF si possible pour l'afficher et l'envoyer.

A ce jour ça me prend un temps incroyable pour obtenir ce résultat... et j'aimerais bien automatiser tout ça.

De plus le fichier est "partagé" alors c'est plus difficile pour moi.

Merci beaucoup pour votre aide.

9triat.xlsx (16.04 Ko)

Re,

je ne sais pas ce que signifie l'étendue du nom

Au moment où tu assignes un nouveau nom à une plage ...

Juste en dessous du nom que tu saisis ... tu as le choix ... de l'étendue du nom ...

J'espère que cette explication est assez claire ...

Bonjour,

Merci à toutes et tous pour vos réponses.

Merci à Eric, avec sa proposition [Monnom].Copy ça marche...

Mais il me reste beaucoup à faire et si avec le fichier joint vous pouvez m'aider ça serait top.

Bonjour,

plutôt que de t'embêter à poser une palanquée de noms à chaque création de feuille, une fonction qui te retourne le range selon les paramètres passés :

Sub test()
    Dim pl As Range
    Set pl = pl_datas("Octobre_17", 41, "5000")
    If Not pl Is Nothing Then ' test inutile si tu es sûr à 100% que la plage sera toujours trouvée
        pl.Copy
        '...
    End If
End Sub

Function pl_datas(feuille As String, semaine As Long, epreuve As String) As Range
    Dim c As Range, nbcol As Long
    With Sheets(feuille)
        Set c = .Columns(1).Find(epreuve, , xlValues, xlWhole) ' ligne épreuve
        Set pl_datas = .Rows(3).Find("Semaine " & semaine, , xlValues, xlWhole) ' colonne semaine
        If Not c Is Nothing And Not pl_datas Is Nothing Then
            nbcol = Application.Min(pl_datas.Column + 5, .Cells(4, Columns.Count).End(xlToLeft).Column) - pl_datas.Column + 1
            Set pl_datas = pl_datas.Offset(c.Row - 2).Resize(20, nbcol)
        End If
    End With
End Function

Par contre je n'ai pas compris pourquoi tu avais prévu 6 jours pour n'en sélectionner que 5. Je suis resté sur 6 jours.

A toi d'adapter, et t'en inspirer pour la plage des dates (plus simple).

eric

Bonjour

Merci pour ta réponse,

j'ai 6 colonne car je "groupe" et si je n'en mets que 5 les groupes ne se créent pas correctement, il n'y en a plus qu'un seul au lieu d'un par semaine.

J'ai placé ton code dans mon fichier, je l'ai lancé mais il ne se passe rien.

Serait-il possible de l'associer à un Userform qui permettrait d'identifier la plage à copier pour la coller sur une nouvelle feuille et l'exporter en pdf ?

Ta proposition a l'air de pouvoir me faire gagner un temps considérable, peux tu s'il te plaît m'expliquer comment la faire fonctionner à partir de mon fichier ?

merci beaucoup

10triat.xlsx (28.62 Ko)

Bonjour,

j'ai 6 colonne car je "groupe" et si je n'en mets que 5 les groupes ne se créent pas correctement

Ben faut en grouper 4.

tu as un exemple d'utilisation dans la procédure test(), ça devrait être suffisant.

A se demander si tu as seulement pris le temps de lire le code pour essayer de comprendre.

L'utilisation tient en 3 lignes :

    Set pl = pl_datas("Octobre_17", 41, "5000")
    If Not pl Is Nothing Then ' test inutile si tu es sûr à 100% que la plage sera toujours trouvée
       pl.Copy

faut pas exagérer

S'il te manque les bases de vba regarde en haut le menu 'Formation pratique VBA'.

eric

Ok, merci,

Oui j'ai lu le code,

A l'exécution je parviens bien à obtenir la sélection

j'ai aussi créé un formulaire

Il contient les combobox me permettant d'identifier la sélection à copier

Par contre je bloque sur la récupération de la plage à sélectionner qui se définie à partir de 3 combobox.

et je ne sais comment ensuite écrire le code qui me permettrait de faire quelque chose comme :

Private Sub CommandButton1_Click()
Dim pl As Range
Dim mois As String
Dim Semaine As String
Dim Epreuve As String

'''Set pl = pl_datas("Octobre_17", 41, "5000")
''' Dim pl as ??? Comment déclarer cette variable
''' et ensuite la définir à partir des combobox qui contiennent mois, semaine et épreuve ?

    If Not pl Is Nothing Then ' test inutile si tu es sûr à 100% que la plage sera toujours trouvée
       pl.Copy

Que contiennent mois , Semaine et Epreuve ?

Set pl = pl_datas(mois, Clng(Semaine), Epreuve)

avec Semaine = n° de la semaine seul

Les 3 combobox contiennent des textes

avec As String je m'en doutais...

Je t'ai mis un dernier exemple. Si avec celui-ci tu ne comprends toujours pas ce qu'il faut faire c'est qu'il te manque trop de bases.

Commence par les combler.

Si c'est trop dur, oublie ma proposition et continue avec tes noms.

Rechercher des sujets similaires à "comment selectionner mes plages nommees"