IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Each nom delete ne fonctionne pas


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2017
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 79
    Par défaut Each nom delete ne fonctionne pas
    Bonjour
    En 2017 j’étais sur MAC excel 2011, je recherchais sur ce forum une macro permettant d’effacer les noms de plage.
    https://www.developpez.net/forums/d1...e/#post9594955

    On me proposait les 4 macros ci-dessous qui toutes fonctionnaient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Effacer_nom_A()
    For Each Nom In ActiveWorkbook.Names
    ActiveWorkbook.Names(Nom.Name).Delete
    Next
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Effacer_nom_B()
        Dim Nom As Name
        MsgBox ThisWorkbook.Names.Count
        For Each Nom In ThisWorkbook.Names
            Debug.Print Nom.Name
            Nom.Delete
        Next Nom
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Effacer_nom_C()
    Dim N As Name
        With ActiveWorkbook
            For Each N In .Names
                N.Delete
            Next
        End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Effacer_nom_D()
    Dim Nom As Name
    For Each Nom In ThisWorkbook.Names
        Nom.Delete
    Next
    End Sub
    Je suis passé hier sur MAC excel 2016, et en essayant d’appliquer ma macro habituelle A sur un certain fichier (effacer nom 2019.xlsx) contenant un grand nombre de noms de plage à effacer, il m’apparait le message d’erreur d’exécution « 1004 ». « La syntaxe de ce nom est incorrecte. Vérifiez que le nom commence par une lettre ou un trait de soulignement ».

    Après plusieurs essais des 4 macros, depuis soit le fichier 2017, soit le fichier 2019, les macros étant stockées soit sur le fichier 2017, soit sur le ficher 2019, j’ai les résultats suivants :
    T1- Dans Fichier 2019, application des macros stockées sur fichier 2019 : message d’erreur cité plus haut.
    T2- Dans fichier 2019, application des macros stockées sur fichier 2017 : message d’erreur idem
    T3- Dans fichier 2017, application des macros stockées sur fichier 2019 : message d’erreur idem
    T4 Dans fichier 2017, application des macros stockées sur fichier 2017 : tout OK, pas de message d’erreur.

    Ces tests signifient-ils que le problème viendrait :
    - soit des noms de listes de 2019 (T2)
    - soit du module de macro de 2019 (T3)
    - soit des deux (T1)..?

    Pouvez-vous m’aider svp ?

    PS: le fichier 2019 dépasse les 2 Mo, il est disponible sur le lien: https://wetransfer.com/downloads/15a...6081557/98fa66
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par buigui Voir le message
    Bonjour,

    Je n'ai pas de Mac.
    Testez le code suivant. A adapter sur vos autres procédures le cas échéant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Effacer_nom_D()
     
    Dim Nom As Name
     
        For Each Nom In ThisWorkbook.Names
            Select Case Mid(Nom.Name, 1, 1)
                   Case "a" To "z", "A" To "Z", "_"
                        Nom.Delete
            End Select
        Next
     
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2017
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 79
    Par défaut
    Bonjour Eric,

    Même message d'erreur.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    d'une manière générale, faire une boucle sur laquelle est basée une liste ou une plage, et travailler à agrandir ou rétrécir cette plate à l'intérieur de la boucle, c'est toujours piégeux.

    Pour t'éviter le soucis d'un for each + delete, je te suggère une boucle tout aussi simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub SupprimerTousLesNoms()
    Do While ThisWorkbook.Names.Count > 0
        ThisWorkbook.Names(1).Delete
    Loop
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2017
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 79
    Par défaut
    Bonjour Jean-Philippe

    Toujours le même message d'erreur.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par buigui Voir le message
    Avez-vous des tables référencées dans votre fichier ?

Discussions similaires

  1. [XL-MAC 2011] Each nom delete ne fonctionne pas
    Par buigui dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/09/2017, 13h11
  2. [Lazarus] Ma requête SQL DELETE ne fonctionne pas
    Par ulysse_31 dans le forum Lazarus
    Réponses: 24
    Dernier message: 17/03/2013, 20h21
  3. DELET Ne fonctionne Pas
    Par tun86 dans le forum JDBC
    Réponses: 2
    Dernier message: 26/04/2011, 23h03
  4. Ma requete DELETE ne fonctionne pas
    Par micniv dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 11/04/2008, 13h08
  5. Delete ne fonctionne pas avec mon gridview
    Par NicoNGRI dans le forum ASP.NET
    Réponses: 2
    Dernier message: 26/10/2006, 08h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo