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 :

Modifier une zone nommée de manière variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    revenue manager
    Inscrit en
    Avril 2023
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : revenue manager

    Informations forums :
    Inscription : Avril 2023
    Messages : 15
    Par défaut Modifier une zone nommée de manière variable
    Bonjour,

    Je n'ai pas trouvé sur le forum alors voici ma requête.

    J'ai un fichier qui contient plusieurs feuilles qui ont la même structure. Chaque feuille a des zones nommées.

    Voici ma requête :

    J'ai une ensemble de classeur qui ont la même structure, mais pas la même taille. cela va de XPI-1 à XPI-35. Les zones nommées ne sont donc pas sur les mêmes plage de cellule d'un classeur à un autre, d'où mon utilisation de zone nommée qui m'apportait ce côté variable.

    Je souhaite ( afin de me simplifier la vie dans le gestionnaire de noms) que lorsque je duplique une feuille, modifier les noms des zones nommées automatiquement. Je ne souhaite pas faire venir de référence de cellule dans le code car les plages des zones nommées diffèrent selon les classeurs.

    Par exemple, sur ma feuille "LOCDIRLS" j'ai les zones "LSFL1" / "LSFL2" / "LSFL3"/ etc etc
    Je remplace le nom de la feuille LOCDIRLS par INTER, jusque là ça va.
    En revanche je ne parviens pas à faire une boucle qui va pour chaque zone nommée dans la feuille avec le préfixe LSFL, remplacer LSFL par CHALET par exemple. surtout certains classeurs ot 15 LSFL, certains en ont 2 seulement.

    J'ai commencé ce code :

    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
    Sub Modifierplage()
     
    Dim zoneNom As Object
    Dim VglNom As String
     
    Worksheets("INTERCHALET").Activate
    For Each zoneNom In Thisworksheet.Names
    VglNom = zoneNom.Name
    If InStr(VglNom, "LSFL") > 0 Then VglNom = Application.Substitute(VglNom, _
    "LSFL", "CHALET")
    zoneNom.Name = VglNom
    End if
     
    Next zoneNom
     
    End Sub
    Mais voilà, j'ai deux erreurs: la première c'est erreur de compilation, end if sans bloc if. Et si j'enlève le end if, j'ai erreur d'exécution 424 objet requis. Est-ce que c'est parce que je n'ai pas dis que l'object était une plage de celulle ?

    Merci beaucoup.

    Si il y a plus simple je prends aussi évidemment.

  2. #2
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    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
    Sub Modifierplage()
     
        Dim zoneNom As Name
        Dim VglNom As String
        Dim ws As Worksheet
     
        Set ws = ThisWorkbook.Worksheets("INTERCHALET")
     
        ' Parcourir chaque nom de zone dans le classeur entier
        For Each zoneNom In ThisWorkbook.Names
            ' Vérifier si le nom de zone commence par "LSFL" et s'il appartient à la feuille spécifiée
            VglNom = zoneNom.Name
            If InStr(1, VglNom, "LSFL") > 0 And zoneNom.RefersToRange.Worksheet.Name = ws.Name Then
                ' Remplacer "LSFL" par "CHALET"
                VglNom = Replace(VglNom, "LSFL", "CHALET")
     
                ' Supprimer l'ancien nom de la zone
                zoneNom.Delete
     
                ' Créer un nouveau nom de zone avec le nom modifié
                ws.Names.Add Name:=VglNom, RefersTo:=zoneNom.RefersTo
            End If
        Next zoneNom
     
    End Sub

  3. #3
    Membre averti
    Femme Profil pro
    revenue manager
    Inscrit en
    Avril 2023
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : revenue manager

    Informations forums :
    Inscription : Avril 2023
    Messages : 15
    Par défaut
    Bonjour Licard,

    Merci pour ta réponse rapide. Je vois où je m'étais trompée.

    Malheureusement j'ai une erreur 1004 d'application/objet sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, VglNom, "LSFL") > 0 And zoneNom.RefersToRange.Worksheet.Name = ws.Name Then

  4. #4
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    j'ai rajouté un contrôle:
    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
    Sub Modifierplage()
     
        Dim zoneNom As Name
        Dim VglNom As String
        Dim ws As Worksheet
        Dim referredRange As Range
     
        Set ws = ThisWorkbook.Worksheets("INTERCHALET")
     
        For Each zoneNom In ThisWorkbook.Names
            VglNom = zoneNom.Name
            ' Vérifie si la zone nommée fait référence à une plage de cellules
            On Error Resume Next
            Set referredRange = zoneNom.RefersToRange
            On Error GoTo 0
     
            If Not referredRange Is Nothing Then
                If InStr(1, VglNom, "LSFL") > 0 And referredRange.Worksheet.Name = ws.Name Then
                    VglNom = Replace(VglNom, "LSFL", "CHALET")
                    zoneNom.Delete
                    ws.Names.Add Name:=VglNom, RefersTo:=referredRange
                End If
            End If
        Next zoneNom
     
    End Sub

  5. #5
    Membre averti
    Femme Profil pro
    revenue manager
    Inscrit en
    Avril 2023
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : revenue manager

    Informations forums :
    Inscription : Avril 2023
    Messages : 15
    Par défaut
    bonjour Licard,

    Merci pour ton aide, c'est super tout fonctionne correctement.

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

Discussions similaires

  1. [VBA-W]Inserer et modifier une Zone de texte
    Par marsupoilu dans le forum VBA Word
    Réponses: 5
    Dernier message: 17/04/2019, 09h22
  2. [VBA-E] modifier une zone d'impression
    Par LeXo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2007, 22h53
  3. Réponses: 13
    Dernier message: 30/10/2006, 11h16
  4. Modifier une zone de texte désigné par la fonction eval(concat de variables)
    Par Franck2mars dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/07/2006, 11h43
  5. ne pas modifier une zone de texte
    Par gailup dans le forum Langage
    Réponses: 3
    Dernier message: 22/06/2006, 19h28

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