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 :

Renommer le nom de champs d'une table Access [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut Renommer le nom de champs d'une table Access
    Salut

    J'ai une BDD Access "Base Test.mdb" avec une table "Presse"
    Je voudrais modifier le nom des champs de la table depuis Excel :

    J'ai par exemple le champ "'Date'" que je voudrais changer par le champ "Date"
    Ou alors simplement supprimer les apostrophes de début et de fin des Champs

    Malheureusement je n'ai aucune idée de la procédure a suivre

  2. #2
    Membre émérite 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
    Par défaut
    bonjour FCL31,

    tu pourrais t'inspirer du code acces ici,
    http://access.developpez.com/faq/?pa...ps#RenomChpADO
    en creant un object acces avec Microsoft DAO 3.x Object Library

  3. #3
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Merci sabzzz

    Moi j'ai fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Dim Tb As DAO.TableDef
        Dim Fd As DAO.Field
     
    Set Db = DAO.OpenDatabase("C:\Users\FCL\Desktop\Base test.mdb", False, False)
     
    For Each Tb In Db.TableDefs
    For Each Fd In Tb.Fields
        If Fd.Name = "'Date'" Then
            Fd.Name = "Date"
        End If
    Next Fd
    Next Tb
    Qui a l'air de marcher pour un champ mais je sais pas si sa peu s'adapter facilement pour une vingtaine de champs et pour une vingtaine de champs, j'ai peur que se soit long a faire

    Que pensez vous du code ?

  4. #4
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bjr, FCL31, sabzzz
    tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each Tb In Db.TableDefs
    If Tb.Name = "Presse" Then
    For Each Fd In Tb.Fields
     Fd.Name = Replace(Fd.Name, "'", "")
       Next Fd
    End If
    Next Tb
    en rajoutant un if tu n'appliqueras le changement qu'a la table Presse, sinon tu parcours chaque table.

  5. #5
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Salut rvtoulon

    J'avais essayer un truc un peu similaire mais sans succès

    j'ai donc pris le temps de faire :
    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
    19
    20
    Set Db = DAO.OpenDatabase("C:\Users\FPRIEUR.SAG\Desktop\Base test.mdb", False, False)
     
    For Each Tb In Db.TableDefs
    For Each Fd In Tb.Fields
        If Fd.Name = "'Date'" Then
            Fd.Name = "Date"
        Else
        If Fd.Name = "'Désignation'" Then
            Fd.Name = "Désignation"
        Else
        If Fd.Name = "'Prix catalogue'" Then
            Fd.Name = "Prix catalogue"
        Else
        If Fd.Name = "'Prime'" Then
            Fd.Name = "Prime"
        Else
        If Fd.Name = "'Total'" Then
            Fd.Name = "Total"
        Else
    ...
    Se qui a l'air de marcher

  6. #6
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    As-tu essayé le code que j'ai mis?
    Parce que j'ai essayé et il fonctionne

  7. #7
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Excuse moi mais je crois que je me suis mal expliqué

    C'est au niveau des enregistrement (et pas le nom des champs) ma Table "Presse" sur Access au je voudrais remplacer le "£" par des apostrophe

  8. #8
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    J'ai bien compris .
    lorsque tu crées la table "presse" elle est vide, aucun enregistrement, ok. Le code que je viens te de donner permet lorsque tu inséres des données dans ta table de modifier en direct les apostrophes ou en modifiant la fonction les "£" dans le futur enregistrement, donc je modifie avant d'insérer ok. (C'est à mon avis plus simple et plus rapide)
    Si j'ai compris tu inséres les données à partir d'une feuille Excel, donc ça devrait le faire, j'ai testé.

    Maintenant le probleme est différent si tu a déjà insérer les données dans la base et que tu veuilles les modifier. C'est sur le code donné ne fonctionnera pas.
    est-ce que j'ai bien compris ?

  9. #9
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Y'a pas moyen de faire un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Tbl In Db.TableDefs
    For Each Fd In Tbl.Fields
        Fd.Name = Replace(Fd.Name, "£", "'")
    Next Fd
    Next Tbl
    Comme je fait pour le nom des champs
    Mais il me le faut pour les enregistrements
    Je pense que se doit être possible ?


    Edit : je pense que si je met "£" ou "''" sa reviendra au même sur Access, ils seront présent dans mes enregistrement sur ma table Access
    Or avec n'importe qu'elle solution, il ne me faut que une apostrophe au lieu de deux

  10. #10
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Edit : je pense que si je met "£" ou "''" sa reviendra au même sur Access, ils seront présent dans mes enregistrement sur ma table Access
    As-tu essayé pour les "''" ? Car pour les enregistrement çà fonctionne et c'est préconisé.

    Fait ce test:
    1) Tu crée une nouvelle base dans "C:\" que tu appelles "Test.mdb". quand elle est créee tu fermes Access.

    2) Tu ouvres un nouveau fichier Excel dans lequel tu crée un module ou tu colle ce code :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub test()
    Dim Db As DAO.Database
    Dim strSQL As String
     
    [A1] = "Aujourd'hui"
     
    Set Db = DAO.OpenDatabase("C:\Test.mdb", False, False)
     
    strSQL = "CREATE TABLE T_ESSAI (Toto VARCHAR(30))"
    Db.Execute strSQL 'Exécution de la reqête sql
    'deconnexion de la base
    Db.Close
     
    Set Db = DAO.OpenDatabase("C:\Test.mdb", False, False)
    strSQL = "INSERT INTO T_ESSAI VALUES ('" & DbleApostr(Range("A1")) & "')"
     Db.Execute strSQL
     
    'deconnexion de la base
    Db.Close
    End Sub
     
    Function DbleApostr(sEntree As String) As String
     Dim lLongueur As Long, sChar As String
     Dim sSortie As String, i As Long
     
     lLongueur = Len(sEntree)
     sSortie = ""
     
     For i = 1 To lLongueur 'on parcours toute la chaine de caractère
         sChar = Mid(sEntree, i, 1)
         If sChar = "'" Then 'si on trouve un '
            sChar = "''" ' alors on le double ''
         End If
         sSortie = sSortie & sChar
     Next i
     
     DbleApostr = sSortie
     End Function
    3) Avant de lancer le code dans outils => Références => Coche Microsoft DAO x.x Object Library

    4) Lance le code puis ouvre Access pour Vérifier :
    Tu dois avoir une nouvelle Table Qui s'appelle "T_ESSAI" qui aura un champ du nom de "TOTO" et un enregistrement qui aura pour valeur "Aujourd'hui".

    Pour afficher "Aujourd'hui" j'utilise la fonction DbleApostr qui transforme un "'" en "''".

    Et on a bien "Aujourd'hui" dans la base et pas "Aujourd''hui".

  11. #11
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Je sais pas si c'est que je suis naze ou pas mais je viens de refaire avec mon code précédant en remplacement £ par ' et sa a l'air de marcher NIKEL


    En tout cas, merci beaucoup a toi.

    Heureusement que tu été là

    PS:
    Si je remet tout en ordre dans mon code et si je rencontre un nouveau problème a se niveau là je reviendrais te voir


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

Discussions similaires

  1. récupérer les noms des champs d'une table access
    Par fabrice33 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 06/04/2007, 19h38
  2. récupérer la liste des noms des champs d'une table
    Par la_didise dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 16h55
  3. Modifier nom de champ d'une table Paradox 7
    Par teska dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/11/2004, 13h09
  4. nom des champs d'une table
    Par K-ZimiR dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/04/2004, 14h21
  5. Récupération des noms de champs d'une table
    Par Battomura dans le forum SQL
    Réponses: 2
    Dernier message: 24/03/2003, 10h00

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