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 :

[REQ] macro excel pour nommer ou actualiser les plages de données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Novembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2014
    Messages : 6
    Par défaut [REQ] macro excel pour nommer ou actualiser les plages de données
    Bonjour à tous,
    j'aimerai nommer ou actualiser des noms de plages via une macro dans un onglet dédié 'range_namer'
    dans cet onglet 'range_namer' :
    1er colonne range
    2nd colonne range_name

    range range_name
    Feuil1!B25:W25 Feuil1!A1
    Feuil1!B25:W26 Feuil1!A2
    Feuil1!B25:W27 Feuil1!A3
    Feuil1!B25:W28 Feuil1!A4
    Feuil1!B25:W29 Feuil1!A5
    Feuil1!B25:W30 Feuil1!A6
    Feuil1!B25:W31 Feuil1!A7
    Feuil1!B25:W32 Feuil1!A8
    Feuil1!B25:W33 Feuil1!A9

    les plages en ligne sont créées ou actualisées suivant cet inventaire sur cet onglet :-)

    Est-ce possible?

    En vous remerciant d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 534
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 534
    Par défaut
    Salut,

    Ce n'est pas clair.
    Ce que contient la colonne range_name ressemble plus à des référence de cellule que des nom, ce qui apporte de la confusion (dangereux).

    De plus, récupérer des nom, et mettre à jour des noms, ce n'est pas du tout la même chose, dans ce cas, il te faudra 2 fonctions.

    Que souhaites-tu faire exactement ?

  3. #3
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Novembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2014
    Messages : 6
    Par défaut
    Bonjour deedolith, merci pour votre réponse,
    je clarifie,
    dans la 2nde colonne range_name, on trouve une adresse de cellule, le contenu de cette cellule est le nom de la plage (définie dans la colonne1)
    valeur de Feuil1!A1 ex toto donne son nom à la plage Feuil1!B25:W25
    =>toto est Feuil1!B25:W25.

    mon besoin :
    - je crée cette cartographie (via cet inventaire) est les plages de noms sont créées via la macro. (non créé si existante)

    si c'est plus simple, on peut avoir une 2nd fonction pour supprimer toutes les plages et les recréer (peut être plus simple que mettre à jour un plage existante)

    Merci d'avance

  4. #4
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour
    la bonne méthode est souvent de commencer par faire à la main en enregistrant une macro pour récupérer les bons objets etc. Ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'création du nom "toto" sur Feuil1!A1
    ActiveWorkbook.Names.Add Name:="toto", RefersToR1C1:="=Feuil1!R1C1"
    'modification du nom "toto" vers Feuil1!A2
     ActiveWorkbook.Names("toto").RefersToR1C1 = "=Feuil1!R2C1"
    'suppression du nom toto
     ActiveWorkbook.Names("toto").Delete
    Vu ce que tu as commencé à faire ça sera plus simple d'utiliser RefersTo plutôt que FefersToR1C1

    Nom : Sans titre.png
Affichages : 118
Taille : 21,9 Ko

    Reste à adapter au contexte et mettre autour la boucle qui va bien pour lire ton paramétrage. Tu as besoin d'aide aussi là dessus ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 534
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 534
    Par défaut
    @Tête de chat:
    Ça c'est la méthode sous-débutant, et le résultat est complétement pourri !! (ta première erreur s'appelle ActiveWorkbook)
    Au mieux, ça peut servir d'inspiration (et encore, à prendre avec des pincettes).

    @fbaux:
    Voici le code que tu recherches, j'ai commencé par ajouter un tableau structuré, c'est plus facile à manipuler qu'une plage de cellules arbitraires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Option Explicit
     
    Public Sub SetRangeNames()
        Dim Wb As Excel.Workbook
        Set Wb = ThisWorkbook
     
        Dim Ws As Excel.Worksheet
        Set Ws = Wb.Worksheets("range namer")
     
        Dim RangeNames As Excel.Range
        Set RangeNames = Ws.Range("RangeNames")
     
        Dim Row As Excel.Range
        For Each Row In RangeNames.Rows
            Dim Name As String
            Name = Row.Cells(2).Value
     
            Dim RefersTo As String
            RefersTo = Row.Cells(1)
     
            On Error GoTo Error
            If Not (ExistInCollection(Name, Wb.Names)) Then
                Wb.Names.Add Name:=Name, RefersTo:=RefersTo
            Else
                Wb.Names(Name).RefersTo = RefersTo
            End If
            On Error GoTo 0
        Next
    Exit Sub
    Error:
        Row.Cells(2).Select
        MsgBox Err.Description, vbOKOnly + vbCritical, "Erreur d'execution"
    End Sub
     
    Public Function ExistInCollection(ByVal Key As String, ByRef Col As Object) As Boolean
        ExistInCollection = ExistInCollectionByVal(Key, Col) Or ExistInCollectionByRef(Key, Col)
    End Function
     
    Private Function ExistInCollectionByVal(ByVal Key As String, ByRef Col As Object) As Boolean
    On Error GoTo Error
        Dim Item As Variant
        Item = Col(Key)
        ExistInCollectionByVal = True
    Exit Function
    Error:
        ExistInCollectionByVal = False
    End Function
     
    Private Function ExistInCollectionByRef(ByVal Key As String, ByRef Col As Object) As Boolean
    On Error GoTo Error
        Dim Item As Variant
        Set Item = Col(Key)
        ExistInCollectionByRef = True
    Exit Function
    Error:
        ExistInCollectionByRef = False
    End Function
    Et ci joint le classeur complet:
    range_namer.xlsm
    Il ne te reste plus qu'à appeler la macro, et Il y a une surprise (je te laisse la découvrir).

  6. #6
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    @deedolith
    Ça c'est la méthode sous-débutant, et le résultat est complétement pourri
    ??? je t'ai fait du mal dans une vie antérieure à l'insu de mon plein gré ?

    J'essayais d'amener fbaux progressivement vers la solution, mais si tu préfères lui donner du poisson plutôt que lui apprendre à pêcher

    Alors de sous-débutant à sous-débutant, je crois que tu as zappé que la colonne 1 contient l'adresse du nom et pas le nom, sauf erreur de ma part (mais en tant que sous-débutant je plaide l'indulgence) ton code ne gère pas la modification comme demandé, la gestion d'erreur ne donne ni la ligne ni l'erreur (préférer un on error resume, et par exemple porter l'erreur en colonne 3 et continuer l'exécution) et j'en passe...

    Du coup je te laisse corriger tranquillement.

Discussions similaires

  1. Macro excel pour choisir les onglets à imprimer
    Par KévinPH dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 23/05/2017, 17h36
  2. Réponses: 3
    Dernier message: 23/11/2015, 16h14
  3. Macro Excel pour les doublons sur 3 mois glissants
    Par greenlightII dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 21/05/2013, 14h49
  4. Macro excel pour toutes les feuilles du classeur
    Par duffie34 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/03/2013, 12h55
  5. Aide sur les macros Excel pour recopie auto de données
    Par nicoduhavre dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/11/2005, 08h38

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