Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment effacer tous les noms d'une feuille en VBA?

12 réponses
Avatar
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
---------------------------------------------------------

10 réponses

1 2
Avatar
Tatanka
Salut Émile,

Pour qu'un nom ne soit disponible que pour une
certaine feuille, il faut qu'il soit précédé du nom
de la feuille et de !
Si tu veux effacer tous les noms commençant par Personnel,
la macro suivante me semble appropriée :

Sub Efface_Noms_Dans_Feuille()
For Each n In ActiveWorkbook.Names
If InStr(1, n.Name, "Personnel") <> 0 Then n.Delete
Next n
End Sub

Est-ce que ça te convient ?

Serge


"Emile" a écrit dans le message de news:
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
---------------------------------------------------------





Avatar
Tatanka
Et pour effacer tous les noms qui se réfèrent à
des cellules de la feuille Personnel :

Sub Efface_Noms_Définis_Dans_Feuille_Personnel()
For Each n In ActiveWorkbook.Names
v = n.RefersTo
If InStr(1, v, "Personnel") <> 0 Then n.Delete
Next n
End Sub

Serge


"Tatanka" a écrit dans le message de news:
Salut Émile,

Pour qu'un nom ne soit disponible que pour une
certaine feuille, il faut qu'il soit précédé du nom
de la feuille et de !
Si tu veux effacer tous les noms commençant par Personnel,
la macro suivante me semble appropriée :

Sub Efface_Noms_Dans_Feuille()
For Each n In ActiveWorkbook.Names
If InStr(1, n.Name, "Personnel") <> 0 Then n.Delete
Next n
End Sub

Est-ce que ça te convient ?

Serge


"Emile" a écrit dans le message de news:
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
---------------------------------------------------------









Avatar
Tatanka
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



"Tatanka" a écrit dans le message de news:

Et pour effacer tous les noms qui se réfèrent à
des cellules de la feuille Personnel :

Sub Efface_Noms_Définis_Dans_Feuille_Personnel()
For Each n In ActiveWorkbook.Names
v = n.RefersTo
If InStr(1, v, "Personnel") <> 0 Then n.Delete
Next n
End Sub

Serge


"Tatanka" a écrit dans le message de news:
Salut Émile,

Pour qu'un nom ne soit disponible que pour une
certaine feuille, il faut qu'il soit précédé du nom
de la feuille et de !
Si tu veux effacer tous les noms commençant par Personnel,
la macro suivante me semble appropriée :

Sub Efface_Noms_Dans_Feuille()
For Each n In ActiveWorkbook.Names
If InStr(1, n.Name, "Personnel") <> 0 Then n.Delete
Next n
End Sub

Est-ce que ça te convient ?

Serge


"Emile" a écrit dans le message de news:
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
---------------------------------------------------------













Avatar
MichDenis
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



"Tatanka" a écrit dans le message de news:


Et pour effacer tous les noms qui se réfèrent à
des cellules de la feuille Personnel :

Sub Efface_Noms_Définis_Dans_Feuille_Personnel()
For Each n In ActiveWorkbook.Names
v = n.RefersTo
If InStr(1, v, "Personnel") <> 0 Then n.Delete
Next n
End Sub

Serge


"Tatanka" a écrit dans le message de news:

Salut Émile,

Pour qu'un nom ne soit disponible que pour une
certaine feuille, il faut qu'il soit précédé du nom
de la feuille et de !
Si tu veux effacer tous les noms commençant par Personnel,
la macro suivante me semble appropriée :

Sub Efface_Noms_Dans_Feuille()
For Each n In ActiveWorkbook.Names
If InStr(1, n.Name, "Personnel") <> 0 Then n.Delete
Next n
End Sub

Est-ce que ça te convient ?

Serge


"Emile" a écrit dans le message de news:

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
---------------------------------------------------------













Avatar
Emile63
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 new s:

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


Avatar
Tatanka
Alors essaie ceci :

Sub Efface_Noms_Définis_Dans_Feuille_Active()
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

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


Avatar
MichDenis
| Je cherche à effacer tous les noms (Names) d'une feuille Excel, mais pas

La procédure soumise supprime seulement les NOMS LOCAUX
sur une feuille donnée.

Ces NOMS ont la particularité d'avoir le nom de la feuille devant le nom défini
comme ceci : Feuil1!toto et fait référence à : .....

Si ta demande réfère à tous les noms qu'il soit locaux ou nom, ça c'est un autre problème !



"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


Avatar
Tatanka
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


Avatar
MichDenis
Dans la mesure où il y a au moins UNE cellule faisant parti de
la plage nommée et et de la plage de cellules à tester, il y a
ceci :

Range("A1:C25") -> à remplacer par la plage de ton choix

Sub test()
With Worksheets("Feuil1")
For Each n In .Parent.Names
If TypeName(Evaluate(n.Name)) = "Range" Then
If Not Intersect(.Range("A1:C25"), Range(n.Name)) Is Nothing 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


Avatar
MichDenis
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


1 2