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

Pierrot93

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

Bonjour,

essaye ceci :
Code:
Option Explicit
Sub Effacer_les_noms_d_une_cellule()
Dim Noms As Names, 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     'Il y a bien un nom sur la cellule
            Noms(i).Delete
            Else
        End If
    Next i
End Sub

bon après midi
@+
 

Pierrot93

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

Re, bonjour Eric,

Bonjour à tous,

ou bien :
Code:
On Error Resume Next
Selection.Name.Delete
On Error GoTo 0

eric

c'est la ligne du dessus qui plante en premier... enfin chez moi..... perso suis pas un fan du "On Error Resume Next" préfère les éviter et ou les gérer... enfin c'est juste mon avis...
 

eriiic

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

Heuuu, sans boucle hein, juste ces 3 lignes là...
Selection est sensé être une cellule, autant supprimer directement le nom (s'il existe, d'où le on error).
A moins que je n'ai pas compris un truc (?)

eric
 

Pierrot93

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

Re,

Heuuu, sans boucle hein, juste ces 3 lignes là...
Selection est sensé être une cellule, autant supprimer directement le nom (s'il existe, d'où le on error).
A moins que je n'ai pas compris un truc (?)

eric

oui mais dans ce cas, si nom créé sur plage dynamique, celui-ci n'est pas supprimé....
 

dionys0s

XLDnaute Impliqué
Re : Gestion des noms par VBA : impossible de supprimer un nom de plage dynamique

Bonjour Pierrot, bonjour Eric

merci pour vos réponses. Je suis en train de découvrir la fonction Evaluate du coup, et ça m'a l'air bien puissant...
Je suis d'accord avec Pierrot, je n'aime pas tellement utiliser "On Error Resume Next". Un peu trop "bourrin" à mon goût.

Pierrot, y a-t-il un moyen pour que ça ne supprime que le nom de la plage dynamique, et non pas celui des toutes les cellules nommées en dur dans la plage dynamique ?

Eric, justement le but de mon utilitaire est de ne supprimer que le(s) nom(s) de la ou des cellules sélectionnées.
 

dionys0s

XLDnaute Impliqué
Re : Gestion des noms par VBA : impossible de supprimer un nom de plage dynamique

Re,

Je pense que j'avance mais j'ai toujours un bug lorsqu'il teste la plage dynamique...

Code:
Sub Effacer_les_noms_d_une_cellule()

    Dim Noms As Names
    Dim i As Integer

    Set Noms = ActiveWorkbook.Names

    'teste si la cellule active correspond à un des noms
    For i = Noms.Count To 1 Step -1
        If Evaluate(Noms(i).RefersToR1C1).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
 

Pièces jointes

  • Gestionnaire de noms.xlsm
    34.2 KB · Affichages: 80
  • Gestionnaire de noms.xlsm
    34.2 KB · Affichages: 91
  • Gestionnaire de noms.xlsm
    34.2 KB · Affichages: 97

Pierrot93

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

Re,

peut être faire un test supplémentaire sur la présence d'un "OFFSET" :
Code:
Option Explicit
Sub test()
Dim Noms As Names, 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     'Il y a bien un nom sur la cellule
            If Noms(i).RefersTo Like "=OFFSET*" Then Noms(i).Delete
            Else
        End If
    Next i
End Sub
 

dionys0s

XLDnaute Impliqué
Re : Gestion des noms par VBA : impossible de supprimer un nom de plage dynamique

Pfff je suis nul... Ce code-ci fonctionne très bien. C'est ma commande de suppression qui était bidon...

Code:
Sub Effacer_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

Pierrot, merci pour ton aide. Et que vive Evaluate !!
 

eriiic

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

Re,
Eric, justement le but de mon utilitaire est de ne supprimer que le(s) nom(s) de la ou des cellules sélectionnées.
Supprimer le nom d'une cellule (celles nommées hi, ho, etc), c'est ce que j'avais compris. Peut-être mal compris...
Et j'avais testé ma proposition.

Je suis d'accord avec Pierrot, je n'aime pas tellement utiliser "On Error Resume Next". Un peu trop "bourrin" à mon goût.
Je pense qu'il faut différencier 'cacher la poussière sous le tapis' et utiliser On Error à bon escient.
Tu veux supprimer un élément d'une collection dont tu ignores s'il existe :
- soit tu balaies tout les éléments pour chercher le tien (en rajoutant des tests pour éviter les erreurs dans ton cas en l'occurence).
- soit tu supprimes directement en gérant l'erreur s'il n'existe pas. En 3 lignes c'est fait, je ne trouve pas ça particulièrement bourrin, voire même pas plus mal ;-)
Pour voir si une feuille existe j'interroge une de ses propriété plutôt que de faire une boucle, et je suis loin d'être le seul.

Mais bon, chacun fait comme il préfère, il y a toujours différentes méthodes pour y arriver :)
eric
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Re : Gestion des noms par VBA : impossible de supprimer un nom de plage dynamique

Re,

je n'avais peut-être pas été super clair. J'aurais dû faire la distinction entre "supprimer tous les noms d'une seule plage" (car oui un Range peut avoir autant de noms qu'on veut bien lui en donner) et "supprimer tous les noms dont la plage fait partie" (c'est à dire les doublons de noms + les intersections).
 

dionys0s

XLDnaute Impliqué
Re : Gestion des noms par VBA : impossible de supprimer un nom de plage dynamique

Re,

Eric, tu as raison sur cet exemple, mais je préfère rester frileux avec ça, car je ne maîtrise pas de mon côté tous les paramètres qui occasionneraient une erreur.
 

Discussions similaires

Statistiques des forums

Discussions
312 803
Messages
2 092 259
Membres
105 319
dernier inscrit
Antho3514