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

VBA Access Discussion :

Renommer un champ [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 16
    Points
    16
    Par défaut Renommer un champ
    Bonjour,

    Je voudrais renommer des champs d'une table ; J'utilise le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public sub RenommerChamp(PTable as string,POld as string ,PNew as String)
    On error goto err:
    Dim VTable as DAO.Tabledef
    Dim VField as DAO.Field
    set VTable=currentDb.TableDefs(PTable)
    set VField=VTable.Fields(POld)
    VField.Name=PNew
    set VField=Nothing
    set VTable=Nothing
    exit sub
    err:
    msgbox "L'action  renommer le champ a échoué"
    End Sub
    et ensuite le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim FirstDay as variant
     
    ' Récupère la première date listing
    docmd.openform "listing date (invisible)"
    FirstDay = forms![[listing date (invisible)]![date]
    docmd.close acform,"listing date (invisible)"
    RenommerChamp "listing papier table","1","FirstDay"
    ....
    Il me retourne le message d'erreur : L'action renommer le champ a échoué

    La table "listing papier table" contient des champs nommés de 1 à 31 et j'aimerais renommer ces champs par des dates !

    Merci par avance de vos aides !

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Il ne faut jamais utiliser currentdb directement, tu dois toujours l'utiliser depuis une variable, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim db As DAO.Database
     
    Set db = CurrentDb
    A noter que ton traitement d'erreur t'empêche de voir l'origine des problèmes.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup pour ton aide, j'ai adapté le code suivant ton conseil :

    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
     
    Public Sub RenommerChamp(PTable As String, POld As String, PNew As String)
    On Error GoTo Error
    10    Dim db As DAO.Database
    20    Dim VTable As DAO.TableDef
    30    Dim VField As DAO.Field
    40    Set db = CurrentDb
    50    Set VTable = CurrentDb.TableDefs(PTable)
    60    Set VField = VTable.Fields(POld)
    70    VField.Name = PNew
    80    Set VField = Nothing
    90    Set VTable = Nothing
    Exit Sub
     
    Error:
        MsgBox "Erreur à la ligne : " & Erl & " L'action renommer le champ a échoué"
    End Sub
    La ligne 60 est en erreur ... et je ne vois pas pourquoi !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    J'ai changé ma gestion des codes d'erreurs comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Error:
        MsgBox "Erreur : " & Err.Number & Chr(13) & "Description : " & Err.Description & Chr(13) & _
                        "Source : " & Err.Source & Chr(13) & "A la ligne : " & Erl
    Il me retourne l'erreur :
    Erreur : 3420
    Description : L'objet est incorrect ou n'est plus défini
    Source : DAO.TableDef
    Ligne : 60

    Mais cela ne m'aide pas beaucoup ... désolé !

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    40    Set db = CurrentDb
    50    Set VTable = CurrentDb.TableDefs(PTable)
    Ton code ne change rien.
    Tu déclares, tu affectes mais tu n'utilises pas...

    Il ne faut jamais utiliser currentdb directement, tu dois toujours l'utiliser depuis une variable...
    Attention à bien fermer les objets que tu ouvres, sinon tu risques d'avoir des problèmes.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Merci pour prendre de ton temps pour m'aider, mais ma connaissance en VBA Access n'est pas suffisante et malheureusement je ne comprends ce que tu veux dire, j'ai toujours réussi à me débrouiller en utilisant vos tuto et FAQ tous très bien fait et pratique pour des novices et pour créer ce code, je me suis basé sur ta FAQ ci-dessous :

    http://access.developpez.com/faq/?pa...ps#RenomChpDAO

    Je pensais qu'elle allait fonctionner directement !

    Encore merci pour ton aide et désolé !

  7. #7
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Points : 176
    Points
    176
    Par défaut
    Bonjour,
    Change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set VTable = CurrentDb.TableDefs(PTable)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set VTable = db.TableDefs(PTable)
    Comme te l'as indique loufab, tu affectes currentDb a une variable db mais tu ne l'utilises pas ensuite.
    Fred

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 21
    Points : 16
    Points
    16
    Par défaut


    Ca fonctionne !
    Il ne me reste plus qu'à créer une boucle pour renommer les 31 champs avec les dates incrémentées !
    Un grand merci à vous deux pour vos réponses et pour m'avoir donné de votre temps !

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

Discussions similaires

  1. [ADO][Access][SQL]Renommer un champ
    Par dleu dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/08/2005, 19h03
  2. CREATE VIEW & renommer un champs
    Par pimousse9 dans le forum SQL
    Réponses: 4
    Dernier message: 08/06/2005, 09h51
  3. Renommer un champs
    Par gwendo dans le forum Outils
    Réponses: 2
    Dernier message: 27/09/2004, 15h04
  4. Comment renommer un champ avec Module BD?
    Par technico dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/01/2004, 21h24
  5. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 01h59

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