Copier un onglet sans ses noms définis

Bonsoir,

J'utilise une macro pour copier un modèle, lors de la création du nouvel onglet Excel régénère les noms présents dans l'onglet initial avec une étendue limitée à la feuille nouvellement créé.

Est il possible de copier cet onglet sans récupérer les noms définis dans l'onglet modèle ? Si non, est il possible de supprimer par macro les noms en double ayant une étendue limitée à une feuille ?

Merci à ceux qui se pencheront sur ce problème.

Macro utilisée :

Sub Ajouter_nouvelle_recette()
    Sheets("Modèle").Copy After:=Sheets(Sheets.Count)   'Copie de la feuille Modèle en dernier
    Call MEFLigneModele                                 'Ajuste le nombre de ligne dans la section Cambuse
End Sub

Cordialement

Bonjour Zebulon2,

Voici un essai en bouclant sur les noms et en s'aidant de la propriété .refersto, qui renvoie normalement la référence de la plage nommée ("=Nomfeuille!A1" par exemple). A partir de là, il est possible de cibler les noms de la nouvelle feuille :

Sub Ajouter_nouvelle_recette()
    Sheets("Modèle").Copy After:=Sheets(Sheets.Count)   'Copie de la feuille Modèle en dernier
    SupprimerNoms Activesheet
    Call MEFLigneModele                                 'Ajuste le nombre de ligne dans la section Cambuse
End Sub

Sub SupprimerNoms(Feuille as worksheet)
for each nm in names
    if replace(split(nm.refersto, "!")(0), "'", "") = "=" & Feuille.name then nm.delete
next nm
end sub

Cdlt,

Bonjour 3GB,

Merci pour la réponse, mais cela ne fonctionne pas.

J'ai déclaré la variable nm en Object, mais la macro ne se lance pas et si l'on veut la lancer manuellement elle n'apparait pas dans la liste des macros.

Y a t'il une référence ou autre chose à activer ?

Je te joins le fichier pour que tu puisse te rendre compte.

Feuille ajoutée, Test ajout requête.

Pour ajouter une requête, sur l'onglet Liste des recettes cliquer sur le bouton Ajouter nouvelle.

Je ne comprends pas pourquoi la macro n'apparait, même pas, dans la liste des requêtes.

Cordialement

Re,

Théoriquement, nm est une variable Name mais en tant qu'object, c'est très bien, à part pour bénéficier de l'intellisense.

La macro ne se lance pas car il s'agit d'une macro paramétrée (on lui rentre un objet worksheet en paramètre), qui ne peut s'exécuter seule et doit nécessairement être appelée par une autre. C'est ce que j'ai fait dans la macro Ajouter_nouvelle_recette justement.

Voici un nouvel essai directement dans la même macro :

Sub Ajouter_nouvelle_recette()
    dim nm as name
    Sheets("Modèle").Copy After:=Sheets(Sheets.Count)   'Copie de la feuille Modèle en dernier
    for each nm in names
        if replace(split(nm.refersto, "!")(0), "'", "") = "=" & Activesheet.name then nm.delete
    next nm
    Call MEFLigneModele                                 'Ajuste le nombre de ligne dans la section Cambuse
End Sub

Cdlt,

Re,

Désolé, cela ne fonctionne toujours pas. Le nom Ingredients est créé et n'est pas supprimé par la macro.

Cordialement.

Ah mince ! J'ai essayé sur mon mac et ça marche. J'essaierai sur Windows pour voir...

Mais tu es sûr de toi ? Parce que le nom Ingrédients est défini sur la feuille Modèle donc c'est normal qu'il apparaisse. En revanche, il ne devrait pas apparaitre en double car le nom Ingrédients de la feuille créée aurait dû être supprimé.

Le nom apparait pour la feuille Modèle avec Etendue classeur et sur la feuille créée. La macro ne semble pas lancer la suppression.

Cordialement.

De mon côté, ça fonctionne bien. Alors j'ai peut-être mal compris...

Ce que j'ai compris, c'est qu'on a une feuille modèle qui contient des noms avec étendue sur le classeur.

Lorsqu'on copie cette feuille, la copie hérite des mêmes noms, mais avec étendue sur la feuille uniquement (je précise que pour le code, l'étendue n'a pas d'importance).

Alors pour supprimer les noms de la copie, on utilise la boucle et on compare la valeur de la propriété .refersto de chaque nom du classeur avec le nom de la feuille active (créée à l'instant).

La propriété .refersto renvoie "=BLA!A1" ou "'BLA BLA'!A1" pour un nom défini sur A1 des feuilles BLA et BLA BLA (il y a des côtes quand le nom de feuille contient un espace).

La feuille Modele quant à elle conserve bien ses noms.

Après, je ne sais pas ce que fait la macro MEFLigneModele ?! Peut-être qu'en la désactivant ou en l'exécutant avant, ce serait mieux.

Sinon, j'ai rajouté une condition pour éviter de supprimer la zone d'impression :

Sub Ajouter_nouvelle_recette()
Dim nm as Name
With ThisWorkbook
    .Sheets("Modèle").Copy After:=.Sheets(.Sheets.Count)   'Copie de la feuille Modèle en dernier
    For Each nm In .Names
        If replace(nm.RefersTo, "'", "") Like "=" & ActiveSheet.Name & "!*" Then
            If Not nm.Name Like "*Print_Area*" Then nm.Delete
        End If
    Next nm
End With
Call MEFLigneModele
End Sub

C'est testé et retesté avec des feuilles comprenant des noms sans ou avec espace. As-tu essayé de tester le code au pas à pas ?

Cdlt,

Re 3GB,

Je viens de tester ta macro sur un autre classeur, tout fonctionne. Sur le fichier envoyé impossible de la faire fonctionner.

J'avais contourné le problème en modifiant l'instruction utilisant le delete avec le véritable nom à supprimer, mais je m’aperçois que ce nom m'est utile pour la génération d'une liste déroulante.

Dont acte, je laisse tomber, mais je garde ta macro dans mes archive au cas ou.

Encore merci pour le temps passé et la démonstration.

Bonne continuation,
Cordialement

Bonjour Zebulon,

Je suis content que ça marche enfin. Je n'arrive pas à m'expliquer le problème sur le fichier que tu as posté.

En effet, je m'étais fait la réflexion : étrange de supprimer tous les noms d'un modèle, pour certains probablement utiles au fonctionnement du fichier.

Bonne suite à toi aussi,

Rechercher des sujets similaires à "copier onglet noms definis"