Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/07/2011, 15h38   #1
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 1
Points : 1
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 :
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
taffanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 16h14   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
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
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 17h23   #3
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 1
Points : 1
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 :
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?
taffanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 15h21   #4
Invité de passage
 
Homme
Étudiant
Inscription : 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 : 1
Points : 1
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
taffanel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h18.


 
 
 
 
Partenaires

Hébergement Web