[ACCESS] lier module VBA à Forumulaire
Résolu
Al3xandr3
Messages postés
34
Date d'inscription
Statut
Membre
Dernière intervention
-
Al3xandr2 -
Al3xandr2 -
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
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
A voir également:
- [ACCESS] lier module VBA à Forumulaire
- Igfxtray module ✓ - Forum Virus
- Pas de module ci - Forum TV & Vidéo
- Manque cam module - Forum TNT / Satellite / Réception
- L'indice n'appartient pas à la sélection vba - Forum VB / VBA
- Persistence module - Forum logiciel systeme
2 réponses
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
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