Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VB lancements multiples

8 réponses
Avatar
le Nordiste
Bonjour,

Je dispose de 5 BdD sous access.
Chacune de ces bases a ses requ=EAtes lanc=E9es par une proc=E9dure VBA.
Actuellement, les proc=E9dure de lancement des requ=EAtes SQL sont lanc=E9e=
s
manuellement base apr=E9s base.

Comment faire pour lancer les proc=E9dures les unes apr=E9s les autres :
dans la derni=E8re base cr=E9er une proc=E9dure de lancement global mais
quelle syntaxe ?

Merci de votre collaboration.

8 réponses

Avatar
jero
Salut,
Pour exécuter une requête action sur une base externe :
Sub ExécuteSQLExterne(StrSQL As String, NomBase As String)
'StrSQL = Nom de la requête ou chaine SQL (ex : "DELETE * FROM Table WHERE
Numéro<")
'NomBase : Nom de la base externe (ex : "C:CheminTables.mdb")
Dim Wrk As Workspace, BaseExterne As DAO.Database
Set Wrk = CreateWorkspace("", "admin", "", dbUseJet)
Set BaseExterne = Wrk.OpenDatabase(NomBase)
BaseExterne.Execute (StrSQL)
BaseExterne.Close
Set BaseExterne = Nothing
Set Wrk = Nothing
End Sub
Ex. d'appel : ExécuteSQLExterne
"R1","C:$BudgetCETablesBudgetCETablesComptaCE.mdb"
A+
"le Nordiste" a écrit dans le message de news:

Bonjour,

Je dispose de 5 BdD sous access.
Chacune de ces bases a ses requêtes lancées par une procédure VBA.
Actuellement, les procédure de lancement des requêtes SQL sont lancées
manuellement base aprés base.

Comment faire pour lancer les procédures les unes aprés les autres :
dans la dernière base créer une procédure de lancement global mais
quelle syntaxe ?

Merci de votre collaboration.
Avatar
Michel__D
Bonjour,

le Nordiste a écrit :
Bonjour,

Je dispose de 5 BdD sous access.
Chacune de ces bases a ses requêtes lancées par une procédure VBA.
Actuellement, les procédure de lancement des requêtes SQL sont lancées
manuellement base aprés base.

Comment faire pour lancer les procédures les unes aprés les autres :
dans la dernière base créer une procédure de lancement global mais
quelle syntaxe ?

Merci de votre collaboration



Pourquoi ne pas lier les tables impactées de chaque base dans une autre
base et ensuite je pense que tu sais faire.
Avatar
le Nordiste
Bonjour,

Michel_D :
Pourquoi ne pas lier les tables impactées de chaque base dans une autre
base et ensuite je pense que tu sais faire.



Parce que déja dans la première base d ela chaine, il y a des tout une
floppée de requêtes et de tables liées.
avant d'obtenir le ou les tables liée(s) à la BdD suivante.


jero:
Ce n'est pas une seule requête que je dois lancer mais une bonne
dizaine pour chacune des bases,
c'est pourquoi j'ai dans chaque base une procédure VA de lancement des
requêtes.
Et je pense pouvoir lancer cess procédures depuis la "dernière base"
de la chaine.



Merci pour votre aide
Avatar
Michel__D
Bonjour,

le Nordiste a écrit :
Bonjour,

Michel_D :

Pourquoi ne pas lier les tables impactées de chaque base dans une autre
base et ensuite je pense que tu sais faire.




Parce que déja dans la première base d ela chaine, il y a des tout une
floppée de requêtes et de tables liées.
avant d'obtenir le ou les tables liée(s) à la BdD suivante.




Je persiste à penser que sur le long terme ce soit la meilleure
solution, mais comme on dit chacun fait ce qu'il lui plait.

PS: Par exemple avant j'avais 14 bases reliées chacune à un serveur SQL
Server et depuis que j'ai
tout regroupé dans une seule base je te dis pas le gain de temps et la
facilité d'utilisation pour
assurer la cohérence des données qu'une application dédiée n'est pas
capable d'assurer.
Avatar
jero
Salut,
Donc, il faut que tu puisses exécuter (à partir de "la dernière base") une
procédure située dans une autre base ?
C'est ça ?
Question : "que font" ces requêtes ? (mise à jour, etc ?)
A+
"le Nordiste" a écrit dans le message de news:

Bonjour,

Michel_D :
Pourquoi ne pas lier les tables impactées de chaque base dans une autre
base et ensuite je pense que tu sais faire.



Parce que déja dans la première base d ela chaine, il y a des tout une
floppée de requêtes et de tables liées.
avant d'obtenir le ou les tables liée(s) à la BdD suivante.


jero:
Ce n'est pas une seule requête que je dois lancer mais une bonne
dizaine pour chacune des bases,
c'est pourquoi j'ai dans chaque base une procédure VA de lancement des
requêtes.
Et je pense pouvoir lancer cess procédures depuis la "dernière base"
de la chaine.



Merci pour votre aide
Avatar
jero
Re-salut,
Ce qu'il est possible de faire :
1-Créer, dans chaque base, une macro avec les instructions nécessaires à
l'exécution des différentes requêtes
2-Dans la "dernière base" copier le code suivant dans un module :
Sub ExécuteMacroBaseExterne(NomBase As String, NomMacro As String)
'Exemple : ExécuteMacroBaseExterne "C:Documents and SettingsJPMes
documents_DéveloppementAccessBaseEssai1.accdb", "Macro1"
Dim AppAccess As Access.Application, NumErreur As Long
On Error GoTo Err_ExécuteMacroBaseExterne
DoCmd.Echo False
Set AppAccess = New Access.Application
AppAccess.OpenCurrentDatabase NomBase
AppAccess.DoCmd.RunMacro NomMacro

Exit_ExécuteMacroBaseExterne1:
AppAccess.CloseCurrentDatabase
Exit_ExécuteMacroBaseExterne2:
Set AppAccess = Nothing
DoCmd.Echo True
Exit Sub

Err_ExécuteMacroBaseExterne:
NumErreur = Err
MsgBox "Erreur n° " & NumErreur & " (" & Err.Description & ")"
Select Case NumErreur
Case 7866 ' Access n'a pas pu ouvrir la base de données (n'existe pas ou
ouverte par un autre utilisateur en mode exclusif)
Resume Exit_ExécuteMacroBaseExterne2
Case Else 'Macro non trouvée (err n°2485) ou autre...
Resume Exit_ExécuteMacroBaseExterne1
End Select
End Sub
3-Exécuter ce code pour chaque base, du genre :
ExécuteMacroBaseExterne "C:AccessBase1.mdb", "Macro1"
ExécuteMacroBaseExterne "C:AccessBase2.mdb", "Macro1"
etc...
Note 1 : Ce code fonctionne sans problème
Note 2 : On doit pouvoir aussi exécuter une procédure d'une base externe
mais je ne sais pas faire...
A+
"le Nordiste" a écrit dans le message de news:

Bonjour,

Je dispose de 5 BdD sous access.
Chacune de ces bases a ses requêtes lancées par une procédure VBA.
Actuellement, les procédure de lancement des requêtes SQL sont lancées
manuellement base aprés base.

Comment faire pour lancer les procédures les unes aprés les autres :
dans la dernière base créer une procédure de lancement global mais
quelle syntaxe ?

Merci de votre collaboration.
Avatar
le Nordiste
Bonjour,

Merci pour ce code.
Il me reste un soucis à régler comment lancer une procédure via une
macro ?

J'ai créé une macro avec : ExécuterCode et l'argument :
(MaFonction)
MaFonction étant la procédure VB de lancement des requêtes.


Mais en éxécutant la macro ça ne marche pas :
"Impossible pour MS de trouver le nom 'Mafonction" entré dans
l'espression.


MERCI de me consacrer un peu de ton temps.
Avatar
le Nordiste
HOURRA !
EUREKA !

et tout le tralala !


J'ai trouvé : le nom du module VB ne doit pas étre identique au nom de
la Fonction VB
Et il ne faut pas chercher à mettre le nom du module ET le nom de la
fonction,
SEULEMENT l enom de la fonction.


MERCI  d'avoir consacrer un peu de ton temps.