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

Access Discussion :

Problème de création de table en VBA


Sujet :

Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Problème de création de table en VBA
    Bonjour à tous,
    c'est la première fois que je pose une question. D'ordinaire je m'en sors bien avec les réponses déjà rédigées mais là....
    je souhaite créer une tble directement via le VBA ACCESS, j'ai trouvé des modèles mais cela bloqe quelque part.
    Et Pour être complet, cela a fonctionné la première fois mais pas ensuite.
    Mon Code ci-dessous, ou plutôt celui que j'ai récupéré....(Merci)
    et là ou ça plante ------>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oDb.TableDefs.Append oNouvelleTable
    Err 3001 Argument non valide

    Merci du coup de main car je sèche



    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    '--Création Nouvelle Table Planning
    Dim oDb As DAO.Database
    Dim oNouvelleTable As DAO.TableDef
    Dim oChamp As DAO.Field
    Dim oIndex As DAO.Index
    Dim tbl As DAO.TableDef
     
    Set oDb = CurrentDb()
     
     
    'supprime une table existante
        Delete_Table = False
     
        For Each tbl In oDb.TableDefs
            If tbl.Name = "TmpPlanning" Then
                oDb.TableDefs.Delete (tbl.Name)
                Delete_Table = True
                oDb.TableDefs.Refresh
            Else
                Delete_Table = False
            End If
        Next tbl
     
     
    'Crée la nouvelle table
        Set oNouvelleTable = oDb.CreateTableDef("TmpPlanning")
    'Crée le champ IDClient
        Set oChamp = oNouvelleTable.CreateField("NumAffaire", dbText)
        oChamp.Attributes = dbText
        oNouvelleTable.Fields.Append oChamp
        oNouvelleTable.Fields.Refresh
     
    'Types  DbText  DbLong DbMemo  DbDouble  DbDate ....
     
     
    For JJ = Me!DateDébut To Me!DateFin
         Set oChamp = oNouvelleTable.CreateField(CStr(JJ), dbMemo)
         oChamp.Attributes = dbMemo
         oNouvelleTable.Fields.Append oChamp
         oNouvelleTable.Fields.Refresh
     
    Next JJ
     
     
    'définit la clé primaire
        Set oIndex = oNouvelleTable.CreateIndex("NumAff")
        oIndex.Primary = True
        oIndex.Fields.Append oIndex.CreateField("NumAffaire")
    'Ajoute l'index à la table
        oNouvelleTable.Indexes.Append oIndex
        oNouvelleTable.Indexes.Refresh
    'Ajoute la table à la base de données
        oDb.TableDefs.Append oNouvelleTable
     
    'Libère les variables
    oDb.Close
    Set oIndex = Nothing
    Set oChamp = Nothing
    Set oNouvelleTable = Nothing
    Set oDb = Nothing
    CurrentDb.TableDefs.Refresh

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Pourquoi ne pas simplement vider la table plutôt que de la détruire et la recréer ?
    Ce serait plus simple à programmer et cela t'éviterai d'avoir à modifier ton code si la structure de ta table change.

    Sinon, je t'invite à procéder par étape.
    Donc tu gardes le code qui crée le 1er champ, tu mets le reste de ton code en commentaire sauf la création de la table.
    Tu répètes l'opération en ajoutant un champ à la fois.
    Même chose avec les indexes.
    Quand cela casse tu vas savoir quel est le champ ou l'index qui pose un problème.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut j'ai fait autrement....
    Citation Envoyé par marot_r Voir le message
    Bonjour.

    Pourquoi ne pas simplement vider la table plutôt que de la détruire et la recréer ?
    Ce serait plus simple à programmer et cela t'éviterai d'avoir à modifier ton code si la structure de ta table change.

    Sinon, je t'invite à procéder par étape.
    Donc tu gardes le code qui crée le 1er champ, tu mets le reste de ton code en commentaire sauf la création de la table.
    Tu répètes l'opération en ajoutant un champ à la fois.
    Même chose avec les indexes.
    Quand cela casse tu vas savoir quel est le champ ou l'index qui pose un problème.

    A+
    Bonjour, je dois détruire car les champs correpondent à une tranche de dates qui change à chaque fois, l'idée étant de créer un planning de charges.
    Comme cela ne marchait pas bien, j'ai utilisé un bout de SQL pour CREER la TABLE et CREER l'INDEX
    Puis j'ai créé mes champs en VBA

    J'ai aussi trouvé comment définir la taille des colonnes de la table pour avoir un format correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         Set P = oDb.CreateProperty("ColumnWidth", dbInteger, 1800)
         tdf.Fields(CStr(JJ)).Properties.Append P
    Par contre, je n'ai pas trouvé comment fixer à la création la hauteur des lignes, car j'aimerais qu'elles soient plus hautes que le standard étant donné que j'ai des infos avec des 'CR' à l'intérieur....

    En tout cas, merci d'avoir pris le temps de me répondre. C'est sympa.



    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    '-Effacement Table  TmpPlanning
    On Error Resume Next
    DoCmd.DeleteObject acTable, "TmpPlanning"
    On Error GoTo 0
    CurrentDb.TableDefs.Refresh
     
     
    '--Création Nouvelle Table Planning
    Dim oDb As DAO.Database
    Dim tbl As DAO.TableDef
     
    Set oDb = CurrentDb()
     
    oDb.Execute "CREATE TABLE TmpPlanning"
        oDb.TableDefs.Refresh
        Set tdf = oDb.TableDefs("TmpPlanning")
     
     
    '---Création des champs fixes---
          Set fld = tdf.CreateField("NumAffaire", dbText, 50)
            tdf.Fields.Append fld
          Set fld = tdf.CreateField("Client", dbText, 50)
            tdf.Fields.Append fld
          Set fld = tdf.CreateField("LibAffaire", dbText, 255)
            tdf.Fields.Append fld
     
     
     
    'Types  DbText  DbLong DbMemo  DbDouble  DbDate ....
     
    '---Création des Champs Variables (Dates)----------
    For JJ = Me!DateDébut To Me!DateFin
         Set fld = tdf.CreateField(CStr(JJ), dbText, 255)
         tdf.Fields.Append fld
     
         Set P = oDb.CreateProperty("ColumnWidth", dbInteger, 1800)
         tdf.Fields(CStr(JJ)).Properties.Append P
     
    Next JJ
     
     
    'Libère les variables
    Set tdf = Nothing
    Set oIndex = Nothing
    Set oChamp = Nothing
    Set oNouvelleTable = Nothing
    CurrentDb.TableDefs.Refresh
     
     
     oDb.Execute "CREATE INDEX NumAff ON  TmpPlanning (NumAffaire);"

Discussions similaires

  1. [Table] Création de table par VBA-DAO
    Par Invité dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/05/2007, 10h07
  2. Oracle 9.2 problème de création de table
    Par Dadou74 dans le forum Administration
    Réponses: 3
    Dernier message: 29/03/2007, 14h07
  3. [SQL-Server] Problème query création de tables sous PHP
    Par DjSoulz dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/03/2007, 22h18
  4. problème de création de requète sous VBA
    Par Golork dans le forum Access
    Réponses: 4
    Dernier message: 02/06/2006, 14h35
  5. Problème de création de table sous MySql
    Par ducamba dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2003, 09h59

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