Suppression de toutes les plages nommées

Bonjour,

Malgré la lecture de ces anciens post,

https://forum.excel-pratique.com/excel/vba-supprimer-les-noms-definis-errones-ref-t15760.html

https://forum.excel-pratique.com/excel/supprimer-noms-definis-inutiles-t33967.html

je n'arrive pas à créer une macro qui supprimerait dans tous les cas de figure toutes les plages nommées via insertion nom définir par exemple d'un classeur.

Je présente ci après mon code (inspiré des recherches dans ce forum). Le code fonctionne bien en mode test sur un classeur simple ou je crée rapidement 2 plages nommées sur 2 feuilles différents mais plante lorsque je l'exécute sur un classeur réel contenant les plages nommée listées ci après

Sub DELNOM()
Dim Defnoms As Excel.Name

For Each Defnoms In ActiveWorkbook.Names
    Defnoms.Delete

Next Defnoms

Range("B1").Select

Le message d'erreur est le suivant

Erreur d'exécution « 1004 »:

Le nom entré n’est pas valide.

Raisons possibles :

• Le nom ne commence pas par une lettre ou un trait de soulignement.

• Le nom contient un espace ou un autre caractère non valide.

• Le nom est en conflit avec un nom prédéfini dans Excel ou le nom d’un autre objet du classeur.

Le débogueur plante ici : Defnoms.Delete

Liste des plages nommées :

CAHMULTIM2 =HPIENNE!$H$197:$H$391

CAHMULTIM3 =HPIENNE!$H$392:$H$585

CAHMULTIM4 =HPIENNE!$H$587:$H$781

CAMONO =HPIENNE!$B$2:$B$196

CAMULTIM2 =HPIENNE!$B$197:$B$391

CAMULTIM3 =HPIENNE!$B$392:$B$585

CAMULTIM4 =HPIENNE!$B$587:$B$781

COQUEMONO =HPIENNE!$C$2:$C$196

COQUEMULTIM2 =HPIENNE!$C$197:$C$391

COQUEMULTIM3 =HPIENNE!$C$392:$C$585

COQUEMULTIM4 =HPIENNE!$C$587:$C$781

EFFBASE =DECALER(EFF!$AQ$2;;;NBVAL(EFF!$AQ:$AQ)-1;6)

EFFBASEHEBDO =DECALER(EFF!$Z$2;;;NBVAL(EFF!$Z:$Z)-NB.SI(EFF!$Z:$Z;0);1)

EFFCONTRAT =DECALER(EFF!$Y$2;;;NBVAL(EFF!$Y:$Y)-NB.SI(EFF!$Y:$Y;0);1)

EFFMAGASIN =DECALER(EFF!$X$2;;;NBVAL(EFF!$X:$X)-NB.SI(EFF!$X:$X;0);1)

EFFNOM =DECALER(EFF!$U$2;;;NBVAL(EFF!$U:$U)-NB.SI(EFF!$U:$U;0);1)

EFFONCTION =DECALER(EFF!$W$2;;;NBVAL(EFF!$W:$W)-NB.SI(EFF!$W:$W;0);1)

EFFPRENOM =DECALER(EFF!$V$2;;;NBVAL(EFF!$V:$V)-NB.SI(EFF!$V:$V;0);1)

EFFSUPERBASE =DECALER(EFF!$S$3;;;NBVAL(EFF!$S:$S)-NB.SI(EFF!$S:$S;0)-1;NBVAL(EFF!$3:$3)-11)

EFFSUPERBASEQUI =DECALER(EFF!$S$3;;;NBVAL(EFF!$S:$S)-NB.SI(EFF!$S:$S;0)-1;1)

EFFSUPERBASEQUOI =DECALER(EFF!$S$2;;;1;NBVAL(EFF!$2:$2)-8)

HEURESMONO =HPIENNE!$D$2:$D$196

HEURESMULTIM2 =HPIENNE!$D$197:$D$391

HEURESMULTIM3 =HPIENNE!$D$392:$D$585

HEURESMULTIM4 =HPIENNE!$D$587:$D$781

LISTETYPE =DECALER(HPIENNE!$J$2;;;NB.SI(HPIENNE!$J$2:$J$35;"<>0"))

REMPLACEMENTCPMONO =HPIENNE!$G$2:$G$196

REMPLACEMENTCPMULTIM2 =HPIENNE!$G$197:$G$391

REMPLACEMENTCPMULTIM3 =HPIENNE!$G$392:$G$585

REMPLACEMENTCPMULTIM4 =HPIENNE!$G$587:$G$781

RHBASE =DECALER(RH!$C$3;0;0;NBVAL(RH!$A:$A);NBVAL(RH!$1:$1))

RHCRIT =DECALER(RH!$B$3;;;NBVAL(RH!$B:$B)-0;1)

RHMAG =DECALER(RH!$A$3;;;NBVAL(RH!$A:$A);1)

RHMAGVAL =DECALER(RH!$A$3;;;NB.SI.ENS(RH!$A$3:$A$45;"<>new mag **");1)

RHSEM =DECALER(RH!$C$1;0;0;1;NBVAL(RH!$1:$1))

RMBASE =DECALER(RM!$C$2;0;0;NBVAL(RM!$A:$A);NBVAL(RM!$1:$1))

RMCRIT =DECALER(RM!$B$2;;;NBVAL(RM!$B:$B)-0;1)

RMMAG =DECALER(RM!$A$2;;;NBVAL(RM!$A:$A);1)

RMMOIS =DECALER(RM!$C$1;0;0;1;NBVAL(RM!$1:$1))

RPRIMESBASE =DECALER(RPRIMES!$B$2;0;0;NBVAL(RPRIMES!$A:$A);NBVAL(RPRIMES!$1:$1))

RPRIMESMAG =DECALER(RPRIMES!$A$2;;;NBVAL(RPRIMES!$A:$A);1)

RPRIMESMOIS =DECALER(RPRIMES!$B$1;0;0;1;NBVAL(RPRIMES!$1:$1))

TYPEMAG =DECALER(HPIENNE!$A$2;;;NBVAL(HPIENNE!$A:$A)-1)

En faisant d'autre recherche sur le net j'ai pu aussi tester le code ci après qui lui efface bien toutes les plages nommées de mon classeur mais plante en cours d'exécution ici :ActiveWorkbook.Names(Boucle).Delete. Peu importe que l'on réponde oui ou non à tous les messages box ou partiellement oui ou non. Par contre malgré le plantage les plages nommés sont bien supprimées. Le message d'erreur est le même que celui déjà cité plus haut.

Sub DELNOMbis()
Dim Boucle As Integer
For Boucle = ActiveWorkbook.Names.Count To 1 Step -1
   If MsgBox("Effacer : " & ActiveWorkbook.Names(Boucle).Name & " - " & ActiveWorkbook.Names(Boucle).Value & "?", vbQuestion + vbYesNo, "Confirmez...") = vbYes Then
      ActiveWorkbook.Names(Boucle).Delete
   End If
Next
End Sub

Pourriez vous m'aider à trouver une solution ?

Merci

Cordialement

Hugues

Bonjour,

Essaie ainsi, car tu dois avoir un nom caché qui génère l'erreur.

Cdlt.

Public Sub DeleteNames()
Dim nm As Name
    On Error Resume Next
    For Each nm In ActiveWorkbook.Names
        nm.Delete
    Next nm
End Sub

Bonjour Jean Eric,

Merci beaucoup ton code fonctionne parfaitement

Je ne savais pas qu'il pouvait des noms cachés. Du coup je comprend tout a fait l'utilisation de la fonction on error resume next.

Si tu as un peux de temps peux tu m'en dire plus sur cette notion de noms cachés; comment sont ils crées etc....

En tout état de cause encore merci pour ta solution et ta réponse si rapide.

Cordialement

Hugues

Rechercher des sujets similaires à "suppression toutes plages nommees"