Bonjour,
je suis en train de bosser sur un projet BI :

-Une base fractionnée Dorsale.mdb.accdb sur un serveur
-Une frontale qui interagie avec la dorsale ( local)

Je gère l'ouverture de fichiers Excel depuis la frontale.

Le but est à l'ouverture du fichier Excel de lancer une requête de test sur une table tampon de ma dorsale ( si table vide --> faire une chose / si table non vide --> faire autre chose).

Le chemin d'accès à ma dorsale est modifiable via un fichier Excel( permet de gérer les changement de serveur).

Ma démarche a donc été :

- Dans mon fichier EXCEL :
--> Dans un module de créer une fonction me permettant de récupérer le chemin du répertoire ou se trouve la dorsale.

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
 
'mon string qui stocke le chemin
Public SERVEUR As String
Function GetServeur()
'
Dim SERVEUR_TAMPON
SERVEUR_TAMPON = "C:\Users\" & Environ("UserName") & "\Desktop\mon dossier"
 
    Dim xls As Excel.Application
    Dim wk As Excel.Workbook
    Dim ws As Excel.Worksheet
 
 
    Set xls = CreateObject("Excel.Application")
 
'mon fichier ou se trouve les chemins d'accès au serveur
            Set wk = xls.Workbooks.Open("" & SERVEUR_TAMPON & "\Paramétrage.xlsx")
 
 
            Set ws = wk.Sheets("Main")
            ws.Activate
 
            SERVEUR = ws.Range("B5")
 
            wk.Close
 
 End Function
J'utilise cette fonction dans ma frontale et elle fonctionne très bien.

--> Sur un click bouton de lancer La requête de test sur ma table TAMPON de ma dorsale en appelant ma fonction getserveur():
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
 
Private Sub CLICK_ACCEUIL()
'appel de ma fonction
Call GetServeur
'test d'affichage du chemin
MsgBox (SERVEUR + "\dorsale.mdb.accdb")
 
'déclare mon database
Dim base As Database
'déclare ma requête
Dim reqtest as string
'déclar emon recordset
Dim rs As DAO.Recordset
 
reqtest = "SELECT * FROM TAMPON_MAJ;"
 
 
'ouvre ma base
Set base = DBEngine.OpenDatabase(SERVEUR + "\dorsale.mdb.accdb")
 
 
'ouvre mon recordset
Set rs = base.OpenRecordset(reqtest, dbOpenForwardOnly, dbReadOnly)
 
If rs.RecordCount = 0 Then
 
    MsgBox ("pas de valeur")
Else
    MsgBox ("il ya des valeurs")
End If
 
rs.Close
base.Close
 
End Sub

Voilà mon problème le msgbox de test s'affiche mais vba plante ensuite sans code erreur (une fenêtre croix rouge et aucun message).

J'ai de remplacer le chemin SERVEUR + "\dorsale.mdb.accdb" , par le chemin complet de la dorsale entre "" = même résultat
J'ai tenté de remplacer le chemin SERVEUR + "\dorsale.mdb.accdb" par une variable BD = (monchemin...\dorsale.mdb.accbd) AVEC UNE FONCTION IDENTIQUE à get serveur = même résultat.


Quelqu'un à t-il une idée ?
Peu être ai-je mal compris le fonctionnement des dbengine....?
L'opendatabase fonctionne -t -il avec des .mdb.accdb ?


Merci