Comment effacer tous les noms d'une feuille en VBA?
12 réponses
Emile
Bonjour à tous,
Je cherche à effacer tous les noms (Names) d'une feuille Excel, mais pas
tous ceux du classeur.
Je brode lamentablement autour de l'exemple ci-dessous, mais c'est pas ça !!
:-(
Est-ce que quelqu'un peut me donner la solution?
Je vous remercie d'avance,
Cordialement.
---------------------------------------------------------
Sub Macro1()
Dim n As Name
For Each n In Sheets("Personnel").Names
' MsgBox "Nom =" & n.Name & vbCr & "Zone = " & n.Value
n.Delete
Next n
End Sub
---------------------------------------------------------
Je ne comprends pas :-( Je me demandais comment effacer dans la feuille active tous les noms de plage qui ne sont pas définis localement et exclusivement ceux-ci.
Serge
"MichDenis" a écrit dans le message de news:
Et si tu désires supprimer seulement les noms dont l'étendue est au moins totalement couvert par la plage de cellules à tester, il y a ceci :
la Range("c1:C4") doit être totalement comprise dans la plage définie par le "NOM.
'----------------------- Sub test1()
With Worksheets("Feuil1") For Each n In .Parent.Names If TypeName(Evaluate(n.Name)) = "Range" Then If Union(.Range("c1:C4"), Range(n.Name)).Address = Range(n.Name).Address Then n.Delete End If End If Next End With
End Sub '-----------------------
Et si les 2 plages doivent être identiques, tu ajoutes un test comme ceci : '------------------------ Sub test1()
With Worksheets("Feuil1") For Each n In .Parent.Names If TypeName(Evaluate(n.Name)) = "Range" Then If Union(.Range("c1:C4"), Range(n.Name)).Address = Range(n.Name).Address And _ Union(.Range("c1:C4"), Range(n.Name)).Address = .Range("c1:C4").Address Then n.Delete End If End If Next End With
End Sub '------------------------
"Tatanka" a écrit dans le message de news:
Salut Émile,
Trois cas peuvent se présenter :
1) Tu veux effacer les noms se référant à une plage de la feuille active définis par NomFeuilleActive!NomPlage 2) Tu veux effacer les noms se référant à une plage de la feuille active définis par NomPlage 3) Tu veux effacer les noms se référant à une plage de la feuille active définis par NomPlage et NomFeuilleActive!NomPlage
A) La macro de Denis efface les noms du cas 1 :
Sub test() Dim N As Name With ActiveSheet For Each N In .Names N.Delete Next End With End Sub
B) La mienne efface les noms du cas 3 :
Sub Efface_Noms() Dim nom As String nom = ActiveSheet.Name nc = Len(nom) For Each N In ActiveWorkbook.Names v = N.RefersTo If Mid(v, 2, nc + 1) = nom & "!" Then N.Delete Next N End Sub
Reste à trouver une manière d'effacer les noms du cas 2.
Serge
"Emile63" a écrit dans le message de news:
Merci Serge et Michel pour votre aide! :-)
La solution de Michel m'a paru la plus simple (pour mon niveau) , mais pour je ne sais quelle raison, elle ne fonctionne pas ! Alors que celle de Serge, Oui. ayant une quinzaine d'onglets à mon classeur, sur quelques uns j'éfface les noms, mais d'autres pas, j'aurais souhaiter améliorer ce code, afin de passer les paramètres (Nom de l'activeSheet) à cette sous-routine, afin que l'effacement des noms ne s'appliquent qu'à la feuille concernée. Sans répéter la mème routine 10 fois. Du coup écrire en dur son nom avec la fonction MID (les onglets ont des noms différents et plus ou moins longs), ça complique un peu... :-( - Est-ce que vous avez une possibilité d'amélioration ? ;.-)
Merci d'avance, cordialement,
On 29 nov, 04:42, "MichDenis" wrote:
Pour supprimer tous les noms appartenants à la feuille "Feuil1! ceci n'est pas suffisant ?
Sub test() Dim N As Name With Worksheets("Feuil1") For Each N In .Names N.Delete Next End With End Sub
"Tatanka" a écrit dans le message de news:
Plus sûr ainsi :
Sub Efface_Noms_Définis_Dans_Feuille_Personnel() For Each n In ActiveWorkbook.Names v = n.RefersTo If Mid(v, 2, 10) = "Personnel!" Then n.Delete Next n End Sub
Serge
Saliut Denis,
Je ne comprends pas :-(
Je me demandais comment effacer dans la feuille active
tous les noms de plage qui ne sont pas définis localement
et exclusivement ceux-ci.
Serge
"MichDenis" <michdenis@hotmail.com> a écrit dans le message de news: ORiV1woMIHA.5160@TK2MSFTNGP05.phx.gbl...
Et si tu désires supprimer seulement les noms dont l'étendue est au moins
totalement couvert par la plage de cellules à tester, il y a ceci :
la Range("c1:C4") doit être totalement comprise dans la plage définie
par le "NOM.
'-----------------------
Sub test1()
With Worksheets("Feuil1")
For Each n In .Parent.Names
If TypeName(Evaluate(n.Name)) = "Range" Then
If Union(.Range("c1:C4"), Range(n.Name)).Address = Range(n.Name).Address Then
n.Delete
End If
End If
Next
End With
End Sub
'-----------------------
Et si les 2 plages doivent être identiques, tu ajoutes un test comme ceci :
'------------------------
Sub test1()
With Worksheets("Feuil1")
For Each n In .Parent.Names
If TypeName(Evaluate(n.Name)) = "Range" Then
If Union(.Range("c1:C4"), Range(n.Name)).Address = Range(n.Name).Address And _
Union(.Range("c1:C4"), Range(n.Name)).Address = .Range("c1:C4").Address Then
n.Delete
End If
End If
Next
End With
End Sub
'------------------------
"Tatanka" <garnote3@ENLEVER.videotron.ca> a écrit dans le message de news:
OifpOEoMIHA.4948@TK2MSFTNGP02.phx.gbl...
Salut Émile,
Trois cas peuvent se présenter :
1) Tu veux effacer les noms se référant à une plage
de la feuille active définis par NomFeuilleActive!NomPlage
2) Tu veux effacer les noms se référant à une plage
de la feuille active définis par NomPlage
3) Tu veux effacer les noms se référant à une plage
de la feuille active définis par NomPlage et NomFeuilleActive!NomPlage
A) La macro de Denis efface les noms du cas 1 :
Sub test()
Dim N As Name
With ActiveSheet
For Each N In .Names
N.Delete
Next
End With
End Sub
B) La mienne efface les noms du cas 3 :
Sub Efface_Noms()
Dim nom As String
nom = ActiveSheet.Name
nc = Len(nom)
For Each N In ActiveWorkbook.Names
v = N.RefersTo
If Mid(v, 2, nc + 1) = nom & "!" Then N.Delete
Next N
End Sub
Reste à trouver une manière d'effacer les noms du cas 2.
Serge
"Emile63" <sanz.emile@gmail.com> a écrit dans le message de news:
ebefe18f-19b2-4f42-908b-55b82e9d698f@e10g2000prf.googlegroups.com...
Merci Serge et Michel pour votre aide! :-)
La solution de Michel m'a paru la plus simple (pour mon niveau) ,
mais pour je ne sais quelle raison, elle ne fonctionne pas !
Alors que celle de Serge, Oui.
ayant une quinzaine d'onglets à mon classeur, sur quelques uns
j'éfface les noms, mais d'autres pas,
j'aurais souhaiter améliorer ce code, afin de passer les paramètres
(Nom de l'activeSheet) à cette sous-routine, afin que l'effacement des
noms ne s'appliquent qu'à la feuille concernée. Sans répéter la mème
routine 10 fois.
Du coup écrire en dur son nom avec la fonction MID (les onglets ont
des noms différents et plus ou moins longs),
ça complique un peu... :-(
- Est-ce que vous avez une possibilité d'amélioration ? ;.-)
Merci d'avance, cordialement,
On 29 nov, 04:42, "MichDenis" <michde...@hotmail.com> wrote:
Pour supprimer tous les noms appartenants à la feuille "Feuil1!
ceci n'est pas suffisant ?
Sub test()
Dim N As Name
With Worksheets("Feuil1")
For Each N In .Names
N.Delete
Next
End With
End Sub
"Tatanka" <garno...@ENLEVER.videotron.ca> a écrit dans le message de news:
OyGm83hMIHA.2...@TK2MSFTNGP04.phx.gbl...
Plus sûr ainsi :
Sub Efface_Noms_Définis_Dans_Feuille_Personnel()
For Each n In ActiveWorkbook.Names
v = n.RefersTo
If Mid(v, 2, 10) = "Personnel!" Then n.Delete
Next n
End Sub
Je ne comprends pas :-( Je me demandais comment effacer dans la feuille active tous les noms de plage qui ne sont pas définis localement et exclusivement ceux-ci.
Serge
"MichDenis" a écrit dans le message de news:
Et si tu désires supprimer seulement les noms dont l'étendue est au moins totalement couvert par la plage de cellules à tester, il y a ceci :
la Range("c1:C4") doit être totalement comprise dans la plage définie par le "NOM.
'----------------------- Sub test1()
With Worksheets("Feuil1") For Each n In .Parent.Names If TypeName(Evaluate(n.Name)) = "Range" Then If Union(.Range("c1:C4"), Range(n.Name)).Address = Range(n.Name).Address Then n.Delete End If End If Next End With
End Sub '-----------------------
Et si les 2 plages doivent être identiques, tu ajoutes un test comme ceci : '------------------------ Sub test1()
With Worksheets("Feuil1") For Each n In .Parent.Names If TypeName(Evaluate(n.Name)) = "Range" Then If Union(.Range("c1:C4"), Range(n.Name)).Address = Range(n.Name).Address And _ Union(.Range("c1:C4"), Range(n.Name)).Address = .Range("c1:C4").Address Then n.Delete End If End If Next End With
End Sub '------------------------
"Tatanka" a écrit dans le message de news:
Salut Émile,
Trois cas peuvent se présenter :
1) Tu veux effacer les noms se référant à une plage de la feuille active définis par NomFeuilleActive!NomPlage 2) Tu veux effacer les noms se référant à une plage de la feuille active définis par NomPlage 3) Tu veux effacer les noms se référant à une plage de la feuille active définis par NomPlage et NomFeuilleActive!NomPlage
A) La macro de Denis efface les noms du cas 1 :
Sub test() Dim N As Name With ActiveSheet For Each N In .Names N.Delete Next End With End Sub
B) La mienne efface les noms du cas 3 :
Sub Efface_Noms() Dim nom As String nom = ActiveSheet.Name nc = Len(nom) For Each N In ActiveWorkbook.Names v = N.RefersTo If Mid(v, 2, nc + 1) = nom & "!" Then N.Delete Next N End Sub
Reste à trouver une manière d'effacer les noms du cas 2.
Serge
"Emile63" a écrit dans le message de news:
Merci Serge et Michel pour votre aide! :-)
La solution de Michel m'a paru la plus simple (pour mon niveau) , mais pour je ne sais quelle raison, elle ne fonctionne pas ! Alors que celle de Serge, Oui. ayant une quinzaine d'onglets à mon classeur, sur quelques uns j'éfface les noms, mais d'autres pas, j'aurais souhaiter améliorer ce code, afin de passer les paramètres (Nom de l'activeSheet) à cette sous-routine, afin que l'effacement des noms ne s'appliquent qu'à la feuille concernée. Sans répéter la mème routine 10 fois. Du coup écrire en dur son nom avec la fonction MID (les onglets ont des noms différents et plus ou moins longs), ça complique un peu... :-( - Est-ce que vous avez une possibilité d'amélioration ? ;.-)
Merci d'avance, cordialement,
On 29 nov, 04:42, "MichDenis" wrote:
Pour supprimer tous les noms appartenants à la feuille "Feuil1! ceci n'est pas suffisant ?
Sub test() Dim N As Name With Worksheets("Feuil1") For Each N In .Names N.Delete Next End With End Sub
"Tatanka" a écrit dans le message de news:
Plus sûr ainsi :
Sub Efface_Noms_Définis_Dans_Feuille_Personnel() For Each n In ActiveWorkbook.Names v = n.RefersTo If Mid(v, 2, 10) = "Personnel!" Then n.Delete Next n End Sub
Serge
Emile63
Merci à vous deux.
Vos propsitions fonctionnement, et j'ai obtenu ce que je souhaitais.
;-))
Merci encore,
cordialement,
Merci à vous deux.
Vos propsitions fonctionnement,
et j'ai obtenu ce que je souhaitais.