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

  1. #1
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    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 é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 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
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    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 chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    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
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    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 chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

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

  7. #7
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Merci rvtoulon

    Sa a l'air de marcher NIKEL

    Toutefois, j'ai rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each Tb In Db.TableDefs
    For Each Fd In Tb.Fields
        If Fd.Name = "Date_début_deffet" Then
            Fd.Name = "Date_début_d'effet"
        End If
     
    Next Fd
    Next Tb
    toujours pour mon probléme d'apostrophe dans ce champs

    Merci Beaucoup

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

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bien vu j'avais oublié

  9. #9
    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 FCL31,

    Que pensez vous du code ?
    je trouve ça génial, tu peut aussi mettre sur une seule ligne cela t'évite de mettre les End If

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Fd In Tb.Fields
        If Fd.Name = "'Date'" Then  Fd.Name = "Date"
        If Fd.Name = "'Désignation'" Then  Fd.Name = "Désignation"
        If Fd.Name = "'Prime'" Then  Fd.Name = "Prime"
    Next Fd
    ps/ je ne pense pas que l'apostrophe soit authorisé pour les nom de champ

  10. #10
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    Par défaut
    Salut c'est re moa

    Pour renommer le nom des champs maintenant pas de problème

    Maintenant je vais être pénible mais pour simplifier beaucoup de chose, j'ai remplacer toutes les apostrophe de la feuille par des "£".

    Avec les codes ci dessus, je règle le problème pour le nom des champs des enregistrement de ma table.

    Mais je voudrais maintenant pouvoir remplacer les "£" des enregistrements par des apostrophes.

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

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bjr, FCL31
    j'ai remplacer toutes les apostrophe de la feuille par des "£".
    c'est dommage tu fais deux fois le travail puisque tu dis
    Mais je voudrais maintenant pouvoir remplacer les "£" des enregistrements par des apostrophes.
    Pour les enregistrements , le plus simple aurait été de doubler les apostrophes avant de les insérer dans ta table. je t'avais mis un lien qui donnait une fonction qui faisait cela. Bref le but serait de faire quelques chose comme çà:
    1) Créer une fonction qui va chercher les apostrophes dans la chaine de caractère et le remplace par un double apostrophes :
    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
    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
    2) Appel de cette fonction dans la requete SQL d'insertion d'un nouvel enregistrement dans la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Rem ---requête insertion données dans table----
    'recherche de la dernière ligne pleine de ma feuille
    derlign = Cells.Find("*", , , , , xlPrevious).Row
    'boucle de la ligne 2 jusque la derniere ligne de ma feuille Excel
    For i = 2 To derlign
       strSQL = "INSERT INTO " & NomTable & " VALUES ('" & DbleApostr(Range("A" & i)) & "', '" & DbleApostr(Range("B" & i)) & "')"
       Db.Execute strSQL
    Next i
    'deconnexion de la base
    Db.Close
    et c'est ok, la fonction va rechercher dans le contenu de ma cellule si il y a un apostrophe et va le doubler.
    maintenant si tu ne veux pas remettre un apostrophe dans la feuille à la place des £ puisque tu l'as déjà fait, remplace dans la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If sChar = "'" Then 'si on trouve un '
    sChar = "''" ' alors on le double ''
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If sChar = "£" Then 'si on trouve un '
     sChar = "''" ' alors on le double ''
    j'espère avoir été clair.

  12. #12
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    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

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

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    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 ?

  14. #14
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    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

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

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    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".

  16. #16
    Débutant   Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 885
    Points : 267
    Points
    267
    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


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

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    De rien

    Bon courage pour la suite.

+ 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