IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Créer des noms à partir de la sélection [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Par défaut Créer des noms à partir de la sélection
    bonjour,

    je cherche comment générer un

    nom "global" depuis 'créer des noms à partir de la sélection'.

    En effet, dans une macro, je crée des noms mais comment
    m'assurer qu'ils ne sont pas "locaux".

    Je remarque que des fois ils sont locaux, d'autres fois "globaux".

    Détails supplémentaires:

    -je copie un fichier dans une feuille Excel, je trouve l'endroit
    dans cette feuille où mon information recherchée est,
    puis je crée toujours le même nom partir de cette sélection, puis
    ce nom(global) est utilisé dans une formule sur une autre feuille.

    -Particularité:

    comme je conserve cette feuille dans le classeur, je me retrouve donc
    avec un grand nombre de noms identiques dans ce classeur.
    Ce qui les différencie, c'est leur provenance.
    Il faut évidemment que je travaille avec la propriété "Global".

    D'où ma question:
    comment générer un nom "global" depuis 'créer des noms
    à partir de la sélection'.

    merci de vos solutions.
    --Pas facile d'être clair--

    Si

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme je prépare un tutoriel sur le sujet, j'ai une explication préparée.
    Comment créer un nom défini ?

    Hormis le code VBA, Il ya deux façons de créer un nom défini.
    La première méthode consiste à sélectionner la cellule ou la plage de cellules à laquelle nous souhaitons attribuer un nom. ensuite cliquer dans la Zone Nom et saisir le nom. La Zone Nom est le rectangle blanc à gauche de la barre des formules (où l'on visualise la cellule active). Si on tape dans cette zone un nom qui est déjà défini, Excel affiche la plage référencée par ce nom.
    La seconde façon de créer un nom consiste à utiliser la boîte de dialogue Nouveau nom que l'on active par la commande Définir un nom qui se trouve dans le groupe Noms définis de l'onglet [Formule] après avoir éventuellement sélectionné la cellule ou la plage de cellules à laquelle nous souhaitons attribuer un nom. Là, taper le nom que nous souhaitons utiliser. Dans cette boîte de dialogue, nous pouvons aussi changer la feuille auquel se réfère un nom existant.
    Un nom défini doit commencer par une lettre ou un trait de soulignement (_) et peut-être composé de lettres, de chiffres ou du caractère de soulignement (Underscore). Les espaces ne sont pas autorisés dans un nom défini. En outre, un nom défini ne peut ne pas être le même que celui d'une référence de cellule valide. Par exemple, le nom TVA1 est invalide parce que c'est une référence de cellule valide. Les noms définis ne sont pas sensibles à la casse.
    Je rajouterais que par défaut un nom est Global
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Par défaut
    MERCI PHILIPPE
    j'espérais un paragraphe plus spécifique à la question de la macro.
    Si

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Utiliser la création de noms à partir d’une sélection ne génère, je pense, que des noms d’ "Etendue" Classeur.

    En VBA pour le répliquer tu devras utiliser de base la méthode CreatefNames qui ne possède que 4 arguments (direction de la source) et ne permet donc pas de spécifier une étendue via ses arguments. D’autre part, cette méthode ne fait pas référence à une collection Names donnée, elle fait référence à un objet Range donné (plage, Selection…) et finit par créer des noms d’étendue Classeur.

    Tout ça est complexifié par le fait qu’un Range peut porter plusieurs noms définis ( cf Sub DGName3) et que quand on fait des copies de feuilles, Excel transforme tous les noms d’étendue classeur en noms d’étendue Feuille (on ne peut pas trop lui reprocher car sinon il y aurait perte des nommages vue sous un certain angle)

    Dans un appli client ou on avait ce genre de souci, j’avais résolu au plus simple en tuant tous les noms après l’import et en les reconstruisant selon le besoin.

    Sinon, l’étendue se réfère à l’objet dont tu évoques la propriété Names (qui renvoie une collection), cf les codes suivants :

    Avec la méthode Add de la collection Names, selon la nature de l'objet indiqué tu seras en étendue Classeur ou Feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveWorkbook.Names.Add Name:="Didier1", RefersTo.....
     
    ActiveWorkbook.Worksheets("Feuil1").Names.Add Name:="Didier2", RefersTo....
    Si tu veux répliquer la création de noms à partir d’une sélection à partir de cette méthode tu dois faire un code du genre (nomme la plage de 3 cellules sous l'étiquette pour les étiquettes de A1 à E1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub DGName1() 'Etendue Classeur
    Dim cellu As Range
    For Each cellu In Range("A1:E1")
        ActiveWorkbook.Names.Add Name:=cellu.Value, RefersToR1C1:="=Feuil1!R" & cellu.Row + 1 & "C" & cellu.Column & ":" & "R" & cellu.Row + 3 & "C" & cellu.Column
    Next cellu
    End Sub
    ...Utile seulement si tu ne veux qu'une étendu Feuille, sinon en une ligne CreateNames le fait , donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub DGName2() 'Etendue Feuille
    Dim cellu As Range
    For Each cellu In Range("A1:E1")
        ActiveWorkbook.Worksheets("Feuil1").Names.Add Name:=cellu.Value, RefersToR1C1:="=Feuil1!R" & cellu.Row + 1 & "C" & cellu.Column & ":" & "R" & cellu.Row + 3 & "C" & cellu.Column
    Next cellu
    End Sub
    tu peux voir l'impact de la chose après avoir lancé les 2 codes successivement avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub DGName3()
    Dim Nme As Name
    For Each Nme In ActiveWorkbook.Names
        Debug.Print Nme.Name
    Next Nme
    End Sub
     
    Sub DGName4()
    Dim Nme As Name
    For Each Nme In ActiveSheet.Names
        Debug.Print Nme.Name
    Next Nme
    End Sub
    et avec le gestionnaire de noms 2010 qui est bien plus puissant que celui de 2003
    Nom : Ormonth Data-1.jpg
Affichages : 1917
Taille : 59,0 Ko
    cordialement,

    Didier

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 7
    Par défaut créer noms via sélection
    merci pour la réponse qui me va comme un gant.

    Vous êtes super et le site aussi ;-)

    Si

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/04/2007, 09h56
  2. Créer des noms de variables dynamiquement avec JSP
    Par Zakapatul dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/02/2007, 14h24
  3. Réponses: 4
    Dernier message: 05/07/2006, 15h47
  4. Créer des imagettes à partir des fichires TIF
    Par Chikh001 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 03/05/2006, 11h59
  5. Comment créer des relances à partir d'1 table
    Par Rod_75 dans le forum Access
    Réponses: 9
    Dernier message: 01/03/2006, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo