VBA Suppression noms
En supprimant les noms dans un classeur, dans l'ordre de leur index, j'ai obtenu un jour, me semble-t-il, une erreur d'index. Toujours si mes souvenirs sont bons, j'avais résolu le problème en les supprimant depuis le dernier jusqu'au premier.
Quant à savoir si la chose changera quelque chose sur un Mac
... à tout hasard, essaie: Sub essai() For n = ThisWorkbook.Names.Count To 1 Step -1 ThisWorkbook.Names(n).Delete Next n End Sub... Et sous Mac, il n'existe pas une option qui créerait, dans une plage de cellules, la liste de tous les noms du classeur ? Sous Win et Office 2016, c'est dans le groupe Noms définis > Dans une formule > Coller une liste
J'y ai pensé, ce qui revient à supprimer "n" fois l'élément 1.
@saaku
[quote="dans ton post d'hier à 10:18, tu"]nom déjà utilisé, _FilterDatebase[/quote]
attention : comme tu peux le voir ci-dessous, c'est Feuil1!_FilterDatabase ... pas Feuil1!_FilterDatebase
ce nom est créé automatiquement par l'utilisation du filtre automatique ; peut-être que ton erreur se produit car tu essayes de supprimer ce nom alors que le filtre automatique est actif ? si oui, désactive d'abord le filtre !
(bien sûr, si après tu actives de nouveau le filtre, ce nom sera créé de nouveau
dhany
Bonjour,
Copie cette procédure dans ton fichier et exécute là :
Public Sub Delete_names() Dim nm As Name, i As Long Worksheets.Add 'On Error Resume Next For Each nm In ActiveWorkbook.Names i = i + 1 With ActiveSheet .Cells(i, 1).Value = nm.Name .Cells(i, 2).Value = nm.RefersTo .Cells(i, 3).Value = nm.Visible End With Next MsgBox "Nombre de nom(s) : " & i, 64, "Information" End SubA te relire.
Cdlt.
Bonjour,
Cela m'affiche une erreur 1004.
Merci
[quote=dhany post_id=674063 time=1532705467 user_id=51200]
@saaku
[quote="dans ton post d'hier à 10:18, tu"]nom déjà utilisé, _FilterDatebase[/quote]
attention : comme tu peux le voir ci-dessous, c'est Feuil1!_FilterDatabase ... pas Feuil1!_FilterDatebase
Screen.jpg
ce nom est créé automatiquement par l'utilisation du filtre automatique ; peut-être que ton erreur se produit car tu essayes de supprimer ce nom alors que le filtre automatique est actif ? si oui, désactive d'abord le filtre !
(bien sûr, si après tu actives de nouveau le filtre, ce nom sera créé de nouveau
dhany
[/quote]
Je n'ai pas de filtre sur la page :/
En supprimant les noms dans un classeur, dans l'ordre de leur index, j'ai obtenu un jour, me semble-t-il, une erreur d'index. Toujours si mes souvenirs sont bons, j'avais résolu le problème en les supprimant depuis le dernier jusqu'au premier.
Quant à savoir si la chose changera quelque chose sur un Mac
... à tout hasard, essaie: Sub essai() For n = ThisWorkbook.Names.Count To 1 Step -1 ThisWorkbook.Names(n).Delete Next n End Sub... Et sous Mac, il n'existe pas une option qui créerait, dans une plage de cellules, la liste de tous les noms du classeur ? Sous Win et Office 2016, c'est dans le groupe Noms définis > Dans une formule > Coller une liste
J'y ai pensé, ce qui revient à supprimer "n" fois l'élément 1.
J'ai accès à tous les noms : ils commencent par une lettre ou par "_" mais rien d'autres...
Bonjour saaku, le forum,
tu a écrit :J'ai accès à tous les noms : ils commencent par une lettre ou par "_" mais rien d'autre...
mais comme tu as ceci :
peut-être qu'un de tes noms commence par le tiret de la touche 6 "-" et pas par le souligné de la touche 8 "_" ? ou par une lettre si « exotique » qu'elle n'est pas acceptée ? t'aurais pas mis des caractères katakanas, des fois ?
p't'être que tu dois passer à une version d'Excel japonaise ? si oui, oublie pas d'l'indiquer dans tes infos d'config !
dhany
Bonjour saaku, le forum,
tu a écrit :J'ai accès à tous les noms : ils commencent par une lettre ou par "_" mais rien d'autre...
mais comme tu as ceci :
Screen.jpg
peut-être qu'un de tes noms commence par le tiret de la touche 6
"-"et pas par le souligné de la touche 8"_"? ou par une lettre si « exotique » qu'elle n'est pas acceptée ? t'aurais pas mis des caractères katakanas, des fois ?car vu ton pseudo, c'est bien possible : saaku semble japonais, non ? t'es Yoko Tsuno ? sayonara ! "ou t'es p't'être elle :"SaAku.jpg
p't'être que tu dois passer à une version d'Excel japonaise ? si oui, oublie pas d'l'indiquer dans tes infos d'config !
dhany
Je confirme que les noms commencent par une lettre ou par (_), sûre et certaine !
Sinon... J'ai supprimé les noms manuellement, et le code me sort toujours la même erreur...
Sur un nouveau fichier, le code fonctionne. Je suis perdue...
saaku a écrit :J'ai supprimé les noms manuellement, et le code me sort toujours la même erreur...
peut-être que c'est un nom défini caché qui est la cause de l'erreur ? sinon, c'est que cette erreur 1004 surviendrait pour autre chose qu'un nom défini, mais quoi ? mystère ! sans ton fichier, difficile de trouver !
dhany
Bonjour,
Joins ton classeur anonymisé !...
Cdlt.
Bonjour Jean-Eric,
[quote="dans son post du 26 juillet à 10:18, saaku"]Etant sur un mac, je n'ai pas de gestionnaire de noms : je souhaite supprimer tous les noms d'un fichier que j'ai récupéré.[/quote]
j'ai pensé à un truc tout bête : saaku a récupéré un fichier d'Excel version PC qui contient des noms définis, alors sur sa version d'Excel pour Macintosh, comment pourrait-elle supprimer les noms définis si le VBA Macintosh ne les connaît pas ?
comme tu es spécialiste des Macintosh (entre autres), t'auras p't'être une idée ? moi, j'vois qu'celle d'utiliser Excel version PC pour supprimer tous les noms définis, en modifiant bien sûr le code VBA pour l'adapter en conséquence ; puis faire ensuite le transfert de PC à Macintosh.
ajout : j'ai oublié d'te remercier pour m'avoir indiqué qu'le raccourci clavier Ctrl e fonctionne plus sur Excel 2016
dhany
Bonjour,
j'ai l'impression que tu as tout simplement des noms prédéfinis interdits à suppression.
Ils ne sont pas listés sur windows mais apparemment Mac ne les connait pas, d'où erreur.
Essaie avec ça et regarde ce qu'il reste :
Sub suppNom()
Dim n As Name
For Each n In ThisWorkbook.Names
On Error Resume Next
n.Delete
On Error GoTo 0
Next n
End Suberic
Bonjour,
Ci-joint le fichier
@saaku
je te retourne ton fichier, où j'ai supprimé tous les noms définis :
dhany
Bonjour,
Ton fichier en retour enregistré en xlsm (fichier Excel avec macros).
Exécuter la procédure Delete_names.
Testé sous Mac.
Cdlt.
Public Sub Delete_names()
Dim nm As Name, i As Long
Application.DisplayAlerts = False
Worksheets.Add
On Error Resume Next
For Each nm In ActiveWorkbook.Names
i = i + 1
With ActiveSheet
.Cells(i, 1).Value = nm.Name
.Cells(i, 2).Value = nm.RefersTo
.Cells(i, 3).Value = nm.Visible
nm.Delete
End With
Next
MsgBox "Nombre de nom(s) : " & i, 64, "Information"
End SubMerci mais enfaite j'ai ce fichier plusieurs fois !
J'ai besoin d'un code
As-tu testé ma proposition de 17:36 en haut de cette page ?
eric
@saaku
tu a écrit :Merci mais en fait j'ai ce fichier plusieurs fois !
J'ai besoin d'un code
j'ai bien compris cela, mais pour l'instant, je te demande de l'oublier ; tu vas comprendre pourquoi quand tu auras lu tout ce qui suit.
d'abord, télécharge cette autre version de ton fichier :
* tu verras 3 feuilles, car en plus de "RAPPEL R1", j'ai rendu visibles « Import LN Resp » et « GL »
* tu es sur la 1ère feuille « Import LN Resp », et c'est c'qu'il faut pour ce qui va suivre
* fais Ctrl F3 ➯ fenêtre "Gestionnaire de noms" :
* tu peux voir que j'ai supprimé tous les noms définis, sauf celui-ci ; sélectionne-le toi, et supprime-le
* ok ? c'est fait ? la fenêtre est bien vide, n'est-ce-pas ? très bien ! alors maintenant, fais la suite :
* ferme la fenêtre précedente ; sauvegarde le fichier, puis ferme-le ; ouvre de nouveau le fichier
* refais Ctrl F3 ; ah ben zut, alors ! il est de nouveau là !
* eh oui, il se remet automatiquement à l'ouverture de ton fichier !
* des codes VBA pour supprimer ce nom défini sont donc tout à fait inutiles !
ce nom défini _xlfn.IFERROR réapparaîtra tant que t'auras pas supprimé de ton classeur toutes les fonctions SIERREUR() qu'il contient ; y'en a uniquement sur la 1ère feuille « Import LN Resp » : en B4 ; en C12:C50 ; en J12:U50 ; quand tu les auras tous enlevés, ça sera ok !
le nom défini _xlfn.IFERROR est caché ; c'est mon code VBA de ThisWorkbook qui rend visibles tous les noms :
Option Explicit
Private Sub Workbook_Open()
Dim NX As Name
For Each NX In Names
NX.Visible = True
Next NX
End Subpour tes autres fichiers, si un autre intervenant veut faire un code VBA pour supprimer toutes les fonctions SIERREUR() des formules, pourquoi pas ? moi, désolé : ça n'me dit rien ! bonne chance quand même pour la suite !
dhany
Bonsoir à tous !
Cela me paraît un peu curieux cette histoire de _xlfn.IFERROR ! Ce dispositif est destiné à indiquer que la fonction utilisée n'existe pas dans la version d'Excel. Et si la formule est calculée elle produira l'erreur #NOM?
La procédure fournie par Jean-Eric comme fonctionnelle sur MAC devrait donc pouvoir fonctionner pour l'intéressé.
S'il continue à avoir une erreur, il peut être utile de se pencher sur la ligne en erreur dans cette procédure... bien que s'il s'agit d'une erreur 1004, le résultat reste aléatoire. Si l'on a testé que sur PC on supprimait les noms sans difficulté, on aura du mal à trouver sous Windows une solution applicable à MAC.
Cordialement.
Re,
J'ai regardé de plus près pour le nom _xlfn.IFERROR.
Sous Excel 2016 Mac, la fonction SIERREUR() existe.
Elle est apparue avec Excel 2007 (PC). on peut penser qu'elle est disponible pour Ecel 2011 (Mac).
Il n'y a pas moyen de le supprimer en VBA (même en mettant la propriété visible à True).
Sous PC, on peut le supprimer manuellement après l'avoir afficher !?
Sous Mac, dans la mesure ou le gestionnaire de noms n'existe pas, on le conserve.
De toute manière, c'est un nom masqué qui n'a pas lieu d'être afficher.
Et dans la procédure de nettoyage des noms, On error Resume Next fait son travail (et supprime 642 noms sur les 643).
Cdlt.
Bonjour MFerrand, Jean-Eric, le forum,
ceci est peut-être une piste : j'ai pas compris pourquoi le nom défini _xlfn.IFERROR a été systématiquement recréé à l'ouverture du fichier alors que j'utilise Excel 2007 version PC qui contient la fonction intégrée SIERREUR() ?
je précise qu'après avoir supprimé toutes les formules avec SIERREUR(), j'ai bien obtenu la NON-recréation automatique de _xlfn.IFERROR, donc là, le Gestionnaire de noms était bien vide à l'ouverture du fichier Excel : AUCUN nom défini.
rappel : pour arriver à cela, j'ai dû supprimer sur la 1ère feuille toutes les formules de : B4 ; C12:C50 ; J12:U50
dhany
