Gestion des noms par VBA : impossible de supprimer un nom de plage dynamique

dionys0s

XLDnaute Impliqué
Bonjour le forum

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 ?

D'avance merci pour votre aide.

dionys0s
 

Pièces jointes

  • Gestionnaire de noms.xlsm
    33.8 KB · Affichages: 83
  • Gestionnaire de noms.xlsm
    33.8 KB · Affichages: 89
  • Gestionnaire de noms.xlsm
    33.8 KB · Affichages: 102

eriiic

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

dionys0s

XLDnaute Impliqué
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 :rolleyes:
 

Discussions similaires

Statistiques des forums

Discussions
313 002
Messages
2 094 317
Membres
105 991
dernier inscrit
cherif