[ACCESS] lier module VBA à Forumulaire

Résolu/Fermé
Al3xandr3 Messages postés 34 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 7 décembre 2007 - 16 avril 2007 à 14:06
 Al3xandr2 - 30 avril 2007 à 16:11
Bonjour,

J'ai crée un module VBA, celui me sert à faire une extraction de ma table principale en créant une nouvelle table. Après traitement, je lance une requete SQL qui me fait un tableau croisé dynamique de mon extract.

Mon problème est tout simple, je n'arrive pas à lier mon module VBA à l'évenement "Button_Click", et c'est très ennuyeux car je suis obligeé d'ouvrir mon script puis de l'executer à chaque fois pour mettre à jour ma table d'extract.

J'ai cherché plusieurs solutions, tout d'abord en mettant le code de mon module à la suite du code évenement.

Sub bouton_click()

[mon module]

End Sub

Sans résultats....

J'ai essayer déclarer le code en PUBLIC, sans résutats non plus.

Voici mon code:

Sub Boucle()
Dim db As Database, dtSem As DAO.Recordset, dtTempAvancement As DAO.Recordset, dtTableauCroiserDynamique As DAO.Recordset, dtDivers As DAO.Recordset
Dim cNomTable As String
Dim bTrouve As Boolean

'SELECT Count(*) AS [VAS S10] FROM Avancement WHERE (((Avancement.VAS)="S10"));

'***** Declaration se la base *****

Set db = CurrentDb

'***** SELECT Count(*) AS [VAS S10] FROM Avancement
WHERE (((Avancement.VAS)="S10"));'

'***** declaration des semaine Voir table "Sem" *****

Set dtSem = db.OpenRecordset("Sem")

'***** suppression des record dans la table generique "T_Avancement" *****

cNomTable = "T_TempAvancement"
Call RechercheTable(cNomTable, bTrouve)
If bTrouve = True Then
Set dtDivers = db.OpenRecordset(cNomTable)
If dtDivers.RecordCount > 0 Then
Do While Not (dtDivers.EOF)
dtDivers.Delete
dtDivers.MoveNext
Loop
End If
ElseIf bTrouve = False Then
Message = MsgBox("La table est à créer ")
Exit Sub
End If
ReDim tChampsRecup(6)
tChampsRecup(0) = "VIC"
tChampsRecup(1) = "Deb TVX"
tChampsRecup(2) = "Fin TVX"
tChampsRecup(3) = "VPI"
tChampsRecup(4) = "TraNS"
tChampsRecup(5) = "Quitus"

For i = 0 To 5

'**** pour compter et initialiser le Nombre de Ligne

dtSem.MoveLast
dtSem.MoveFirst

Set dtTempAvancement = db.OpenRecordset(cNomTable)

'***** boucle de creation des requetes semaine *****

For j = 1 To dtSem.RecordCount
cSem = dtSem![Semaine]

Set dtTableauCroiserDynamique = db.OpenRecordset("SELECT Count(*) AS [" & tChampsRecup(i) & cSem & "] FROM Avancement WHERE (((Avancement![" & tChampsRecup(i) & "])='" & cSem & "'));")

If dtTableauCroiserDynamique.RecordCount = 0 Then

'***** on ne fait rien *****

Else

'***** Ajout dans la table "T_TempAvancement" *****

dtTableauCroiserDynamique.MoveLast
dtTableauCroiserDynamique.MoveFirst
For k = 1 To dtTableauCroiserDynamique.RecordCount
dtTempAvancement.AddNew
dtTempAvancement![Semaine] = cSem
dtTempAvancement![Champs] = tChampsRecup(i)
dtTempAvancement![Nbre] = dtTableauCroiserDynamique(0)
dtTempAvancement.Update
dtTableauCroiserDynamique.MoveNext
Next k
End If
dtSem.MoveNext
Next j
Next i

'*****

End Sub

2 réponses

Al3xandr3 Messages postés 34 Date d'inscription jeudi 15 mars 2007 Statut Membre Dernière intervention 7 décembre 2007 2
16 avril 2007 à 15:51
Bon bah j'ai trouvé la solution, c'était tout bête, il fallait mettre FUNCTION à la place de SUB, et la nommer par exemple Refresh,

Function Refresh ()

[le code]

End Function

Ensuite créer une macro qui appelle la fonction, et puis voila.

Si ca peut aider d'autres noobs dans mon cas lol.

Amicalement,

Alex
1
hello
1