je cherche à créer un petit utilitaire de gestionnaire de noms (insertion, suppression, renommage etc.) et suis parvenu après diverses recherches à ce petit bout de code qui supprime tous les noms des cellules sélectionnées.
Code:
Sub Effacer_les_noms_d_une_cellule()
Dim Noms As Names
Dim i As Integer
Set Noms = ThisWorkbook.Names
'teste si la cellule active correspond à un des noms
For i = Noms.Count To 1 Step -1
If Noms(i).RefersToRange.Address = Selection.Address Then 'Il y a bien un nom sur la cellule
Selection.Name.Delete
Else 'La cellule n'est pas nommée
End If
Next i
End Sub
Le seul problème, c'est que ce code plante dès qu'il analyse une plage nommée dynamiquement
Est-il possible de supprimer un nom de plage nommée dynamiquement si la plage sélectionnée correspond au nom ?
Re : Gestion des noms par VBA : impossible de supprimer un nom de plage dynamique
je préfère rester frileux avec ça
Ca faut faire comme on le sent, les intuitions sont souvent bonnes...
Comme je persiste dans l'Error ;-) , si tu peux avoir plusieurs noms pour une cellule ça pourrait être :
Code:
Sub test()
On Error GoTo suite
Do
Selection.Name.Delete
Loop
suite:
End Sub
Mais ça ne supprimera pas un nom d'une plage si cette cellule en fait partie, comme tu y as fait allusion dans un post précédent.
Là il faudrait boucler sur tous les noms comme tu le fais, mais j'ai l'impression que tu ne le gères pas non plus.
eric
Re : Gestion des noms par VBA : impossible de supprimer un nom de plage dynamique
Re,
en gros, avec tout ce que j'ai glané comme infos, j'ai quatre bouts de codes pour la gestion de la suppression des noms dans un classeur :
Celui-ci qui tous les noms d'une cellule ou plage
Code:
Sub Supprimer_les_noms_d_une_cellule()
Dim Noms As Names
Dim i As Integer
Set Noms = ActiveWorkbook.Names
For i = Noms.Count To 1 Step -1
If Evaluate(Noms(i).RefersToR1C1).Address = Selection.Address Then Noms(i).Delete
Next i
End Sub
Celui-ci qui supprime tous les noms donc la cellule ou la plage testée fait partie
Code:
Sub Effacer_tous_les_noms_contenant_une_cellule()
Dim Noms As Names
Dim i As Integer
Set Noms = ActiveWorkbook.Names
For i = Noms.Count To 1 Step -1
If Not Intersect(Evaluate(Noms(i).RefersTo), Selection) Is Nothing Then Noms(i).Delete
Next i
End Sub
Celui-ci qui nettoie tous les noms périmés (cellule de la plage supprimée)
Code:
Sub Nettoyer_les_noms_perimes()
Dim Noms As Names
Dim i As Integer
Set Noms = ActiveWorkbook.Names
For i = Noms.Count To 1 Step -1
If InStr(1, CStr(Noms(i).RefersTo), "#REF!") > 0 Then Noms(i).Delete
Next i
End Sub
Et enfin celui-ci qui les supprime tous sans exception
Code:
Sub Supprimer_tous_les_noms_du_classeur()
While ActiveWorkbook.Names.Count > 0
ActiveWorkbook.Names(1).Delete
Wend
End Sub
le tout dans un .xlam, avec les petits boutons qui vont bien