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 :

Création et remplissage d'une table Sous VBA [AC-2003]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Création et remplissage d'une table Sous VBA
    Bonjour tout le monde,

    Je me suis mis à VBA ce matin , en utilisant mes restes de Java....
    je voulais savoir pourquoi mon code ne marchait pas , il me renvoie a une autre macro.
    Deplus pour le remplissage de ma table j'ai un doute sur le code utilisé!
    Je vous remercie d'avance du temps consacré à ma demande.
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Public class
        Dim db As DAO.Database ' objet permettant d'ouvrir une base de données existante
        Dim tg As DAO.Recordset ' objet enregristrant les champs d'une BDD
        Dim don As DAO.Recordset
        Dim taux As Integer 'nombre
        Dim i As Integer
        Dim Ml As Integer
        Dim temp As DAO.TableDef
        Dim AR As Integer
        Dim PROV As Integer
     
     
    Sub CreateTable() 'fonction qui crée une table vide
     
            Dim dbs As DAO.Database
            Dim tdf As DAO.TableDef
            Dim fld As DAO.Field
     
            Set dbs = CurrentDb() ' Retourne une référence à la base de données en cours
            Set tdf = dbs.CreateTableDef("Taux garantie des contrats") 'Retourne une variable de type objet TableDef pointant sur une nouvelle table
            Set fld = tdf.CreateField("NODOSS", dbInteger) 'Définit un nouveau champ dans la table.
     
                tdf.Fields.Append fld ' Ajoute l'objet Field à la collection Fields de l'objet TableDef.
     
            Set fld = tdf.CreateField("DDVERS", dbInteger)
     
     
                tdf.Fields.Append fld
     
            Set fld = tdf.CreateField("Taux Garantie", dbInteger)
     
     
                tdf.Fields.Append fld
     
            Set fld = tdf.CreateField("Année Garantie restant", dbInteger)
     
     
                tdf.Fields.Append fld
            Set fld = tdf.CreateField("Provision ", dbInteger)
     
     
                tdf.Fields.Append fld
     
            dbs.TableDefs.Append tdf
            RefreshDatabaseWindow ' Ajoute l'objet TableDef à la collection TableDefs de la base de données.
            MsgBox "La table " & tdf.Name & " a été créée"
            Set fld = Nothing
            Set tdf = Nothing
            Set dbs = Nothing
        End Sub
    Public Function création()
        Set temp = CreateTable()
        Set db = wrk.Openddatabase("B:\PRODUCTION\GPMA\AGMF EPARGNE\AGMF EPARGNE.mdb")
     
        Set tg = db.OpenRecordset("SELECT [Taux garantie 2].[date de début], [Taux garantie 2].[date de fin] ,[taux garantie 2].[taux garantie] ,[taux garantie 2].[durée]")
     
        Set don = db.OpenRecordset("SELECT [DONNEES].[DDVERS] , [DONNEES]. [NODOSS]", [DONNEES].[ENCOUFIN])
     
        Set Ml = Day(Date) + Month(Date) * 100 + Year(Date) * 10000 'prendre date d'un formulaire à créer
     
     For i = 1 To don.Fields.Count - 1
        For j = 1 To tg.Fields.Count - 1
            If (tg.[date de début].[j] < don![DDVERS].[i]) And (don![DDVERS].[i] <= tg![date de fin].[j]) Then 'ce if permet de connaitre le taux de garantie issu de la table !
                If don![DDVERS].[i] + tg![durée].[j] * 10000 < Ml Then
                    taux = 0 'le taux est nul car la date de garantie est dépassée
                    temp.taux Garantie.Append(taux)
                    temp.DDVERS.Append (don![DDVERS].[i]) ' appelle la date de versement de la ligne i de la table DONNEES
                    temp.NODOSS.Append (don![NODOSS].[i]) ' appelle le numero de dossier de la ligne i de la table DONNEES
                    temp.Provision.Append (0)
                    temp.AnnéeG.Append (0)
                Else
                AR = don![DDVERS].[i] + tg![durée].[j] * 10000 - Ml
                PROV = don![ENCOUFIN].[i] * (1 + taux) ^ AR
                taux = tg![taux garantie] ' renvoie le taux garantie de la pèriode
                temp.taux Garantie.Append(taux)
                temp.DDVERS.Append (don![DDVERS].[i])
                temp.NODOSS.Append (don![NODOSS].[i])
                temp.Provision.Append (PROV)
                temp.AnnéeG.Append (AR)
                End If
            End If
        Next j
    Next i
     
    End Function
     
    End


    Je pense que les Don![NODOSS].[i] doivent etre faux ainsi que les Temp.APPEND... ( il doit y avoir d'autres fautes aussi)


    Je vous remercie

  2. #2
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour taffanel,

    Avant d'aller plus loin, regarde d'abords ce tuto ici
    pour te familiariser avec les instructions d'entrée/sortie.

    Si tu restes coincé, nous t'aiderons avec plaisir.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
    si tout est OK, n'oubliez pas de cliquer sur

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci d'avoir répondu si vite! je suis allé voir le tuto et j'ai pu modifier pas mal d'erreur. Cependant,il me reste encore deux probleme l'un de syntaxe je pense: je n'arrive toujours pas à prendre la Ième ligne d'un champ
    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
    Public Function remplissage()
        Set temp = CreateTable()
        Set db = CurrentDb()
     
        Set tg = db.TableDefs("Taux garantie 2")
     
        Set don = db.TableDefs("DONNEES")
     
        Set Ml = InputBox("Entrez la date comptable de la forme AAAAMMJJ") 'Récupere la date souhaitée
     
     For i = 1 To don.Fields(1).Count - 1
        For j = 1 To tg.Fields(1).Count - 1
            If (tg.Fields("date de debut").[j] < don.Fields("DDVERS").[i]) And (don.Fields("DDVERS").[i] <= ttg.Fields("date de debut").[j]) Then 'ce if permet de connaitre le taux de garantie issu de la table !
                If don.Fields("DDVERS").[i] + tg.Fields("durée").[j] * 10000 < Ml Then
                    temp.OpenRecordset.AddNew
                    temp.Fields(3).Value = 0
                    temp.Fields(2).Value = don.Fields("DDVERS").[i] ' appelle la date de versement de la ligne i de la table DONNEES
                    temp.Fields(1).Value = don.Fields("NODOSS").[i] ' appelle le numero de dossier de la ligne i de la table DONNEES
                    temp.Fields(5).Value = 0
                    temp.Fields(4).Value = 0
                    temp.Updatable
     
                Else
                    AR = don.Fields("DDVERS").[i] + tg.Fields("durée").[j] * 10000 - Ml
                    PROV = don.Fields("ENCOUFIN").[i] * (1 + taux) ^ AR
                    taux = tg.Fields("taux garantie") ' renvoie le taux garantie de la période
                    temp.OpenRecordset.AddNew
                    temp.Fields(3).Value = taux
                    temp.Fields(2).Value = don.Fields("DDVERS").[i]
                    temp.Fields(1).Value = don.Fields("NODOSS").[i]
                    temp.Fields(5).Value = PROV
                    temp.Fields(4).Value = AR
                    temp.Updatable
     
                End If
            End If
        Next j
    Next i
     
    End Function
    L'autre un peu spécial... Quand j'appuie sur F5 il me demande de créer une macro et il ne se passe rien...

    EDIT: Je pense avoir trouvé je tape mon code et j'essaye!
    EDIT2: Enfait non. ca aurait pu marcher si ma table de données était trié de 1 à longeur total.Il doit forcement exister une fonction qui puisse extraitre la donnée située dans la ligne i et la colonne j?

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Finalement , ne trouvant pas, j'ai quitter VBA pour créer trois requetes, deux macro et un formulaire pour arriver au resultat souhaité. Cependant si quelqu'un trouve l'erreur , je veux bien qu'il me dise pour ma culture personnelle!

    Je vous remerci de votre aide

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

Discussions similaires

  1. [XL-2010] Existence d'une valeur dans une table Access (VBA sous Excel)
    Par kail_tak dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/10/2013, 23h02
  2. [AC-2003] Création de nouveaux champs dans une table en VBA
    Par lambith dans le forum VBA Access
    Réponses: 24
    Dernier message: 31/03/2013, 09h56
  3. Création d'un champ dans une table via VBA
    Par Oliv'83 dans le forum VBA Access
    Réponses: 5
    Dernier message: 16/08/2010, 09h58
  4. [SQL] Création et remplissage d'une table pays
    Par *alexandre* dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 23/05/2007, 09h10
  5. Lier une table sous VBA
    Par shadockgreg dans le forum Access
    Réponses: 3
    Dernier message: 11/09/2006, 17h25

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