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

2 réponses

1 2
Avatar
Tatanka
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" 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







Avatar
Emile63
Merci à vous deux.

Vos propsitions fonctionnement,
et j'ai obtenu ce que je souhaitais.

;-))

Merci encore,

cordialement,
1 2