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