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 :

Supprimer les nom de champ commençant par


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 52
    Points : 36
    Points
    36
    Par défaut Supprimer les nom de champ commençant par
    bonjour,
    j'aimera supprimer tous les noms commençant par "AAA"...
    voici le code que j'ai fait mais il ne marche pas... il ne fait rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub EffaceNom()
        Dim Nom As Name
            For Each Nom In ActiveWorkbook.Names
            If Left(Nom, 3) = "AAA" Then
            Nom.Delete
            End If
        Next Nom
    End Sub
    je me suis inspiré du code suivant qui marche mais qui n'est pas du tout sélectif....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub EffaceNom()
        Dim Nom As Name
            For Each Nom In ActiveWorkbook.Names
             Nom.Delete
         Next Nom
    End Sub
    merci de votre aide !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub EffaceNom()
        Dim Nom As Name
            For Each Nom In ActiveWorkbook.Names
            If LCase(Left(Nom.Name, 3)) = "aaa" Then
            Nom.Delete
            End If
        Next Nom
    End Sub
    Comme ça cela devrait mieux marcher

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    Merci de ta réponse

    mais cela ne marche pas....ça n'efface aucun de mes noms
    j'ai essayé avec UCase mais rien...

  4. #4
    Membre éclairé Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Points : 879
    Points
    879
    Par défaut
    bonjour bravojr, Access Newbie,

    j'ai fait un test avec la macro de Access Newbie, et cela fonctionne bien,
    bravojr, as tu mit la macro dans un module standard du fichier concerné ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Quand tu parles de "noms", tu parles bien des noms que tu obtiens en faisant "Insertion/Noms/Définir" ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    oui je parle bien de "Insertion/Noms/Définir"
    et la macro de Access Newbie est bien dans un module standard!

    je viens de faire un test sur un nouveau classeur ça marche....
    mais pas sur mon classeur de "travail"!!!

    bon en diminuant les données en en le comprimant j'ai réussi à le mettre en pièce jointe
    merci de votre aide
    Fichiers attachés Fichiers attachés

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    ta pièce jointe n'est pas valide (clique sur le lien que tu as mis)

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    désolé mais j'avais trop réduit les données donc plus rien ne marchait... j'ai donc changé la pièce jointe...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Hééé hoplaaa !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub EffaceNom()
     
    Dim Nom As Name
    Dim strResult As Variant
     
     
    For Each Nom In ActiveWorkbook.Names
        strResult = Split(Nom.Name, "!")
        strResult = strResult(UBound(strResult))
        If LCase(Left(strResult, 3)) = "aaa" Then
            Nom.Delete
        End If
    Next Nom
     
    End Sub
    Petite explication, les noms que tu as définit sont préfixés par "requete", j'ignore pourquoi, il fallait donc récupérer la deuxième partie du nom

    Enjoy

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    he bien alors là chapeau !

    merci beaucoup... je n'y serai jamais arrivé

    peux-tu m'expliquer cette partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        strResult = Split(Nom.Name, "!")
        strResult = strResult(UBound(strResult))
    Et juste pour ma culture perso, où as tu vu que les étaient préfixés par "requete" ?

    encore merci

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    la fonction split découpe une chaine de caractère (cette chaine est le premier paramètre de la fonction). Le 2nd paramètre permet de définir quel est le caractère sur lequel tu veux que ta découpe se fasse.

    Par exemple, pour ton cas Nom.name était de la forme "Requete!AAArequete1"

    le split te crée 2 chaines de caracteres :
    - une dans laquelle il y a "requete", l'autre dans lquelle il y a "AAArequete1"

    Pour le ubound, ceci est utilisé pour les tableaux (variables variant ou tableau). Dans le cas présent, ceci te permet de récupérer la dernière valeur du tableau : "AAArequete1"

    Je sais pas si j'ai été très clair.

    Sinon pour aller plus loin http://msdn.microsoft.com/fr-fr/libr...5f(VS.80).aspx


    Pour voir ou était l'erreur, j'ai placé un point d'arret dans le code, puis j'ai passé le code en "pas à pas" (touche F8) et j'ai mis un espion sur ma variable name (clique droit sur la variable, puis "ajouter un espion")

    Et voilou

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 52
    Points : 36
    Points
    36
    Par défaut
    eh bien franchement merci!

    ton code me fait penser au serpent qui ce mord la queue !! j'ai bien compris les formules mais j'ai eu du mal pour la logique !
    donc voici le code avec un peut plus d'informations..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    'le nom du champ créé est du type "Requete!aaaRequete"
    '===================
        Dim Nom As Name
        Dim strResult As Variant
    '===================
        For Each Nom In ActiveWorkbook.Names
            strResult = Split(Nom.Name, "!")
            ' "split" : séparation en fonction de "!"
            ' "strResult" est défini comme un tableau 1x2 (0 et 1 indices) de contenu : "Requete" ; "aaaRequete"
            strResult = strResult(UBound(strResult))
            ' "UBond(strResult)" = valeur indices max du tableau : 1 (indices = 0 et 1)
            ' "strResult(1)" valeur 1 du tableau 1x2 (indices = 0 et 1)
            ' "strResult" est donc redéfini comme la seconde valeur du tableau "strResult" précédement défini
                If LCase(Left(strResult, 3)) = "aaa" Then
                Nom.Delete
                End If
        Next Nom
    aller encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/03/2014, 23h07
  2. [AC-2000] supprimer les noms de champ a l export texte via vb
    Par kaynan dans le forum Access
    Réponses: 4
    Dernier message: 19/03/2014, 13h07
  3. Réponses: 3
    Dernier message: 03/11/2007, 18h44
  4. [Access] Récupérer les champs commençant par ...
    Par paflolo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/02/2006, 10h35
  5. Réponses: 7
    Dernier message: 04/11/2004, 12h20

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