Bonjour à tous,

Ayant cherché et réalisé plusieurs tentatives, je reviens vers vous pour clarifier un problème que je rencontre entre Excel et Access.

Le problème rencontré:
A) Après l'éxécution d'un code depuis un Userform dans Excel 2007, j'ai une base Access que je souhaite ouvrir après le traitement en double cliquant, mais celle-ci ne s'ouvre pas tant que le fichier Excel reste ouvert.
Quand je double clique sur la base Access après le traitement, un fichier .ldb (en effet j'ai d'autres bases et des tables odbc liées) s'affiche, mais la base .mdb ne s'ouvre pas.
En revanche, après le traitement, si je ferme le fichier Excel manuellement et qu'ensuite je tente d'ouvrir la base Access, cette dernière s'ouvre normalement pour consultation.

J'ai remarqué que dans le Gestionaire de Tâche, le processus MSACCESS.exe est toujours affiché après le traitement depuis Excel, mais pourtant la base Access est bien fermée.

Le pense que ce problème est dû au compactage de la base Access, car avec DBENGINE.Compactbase, Access doit être instancier et ensuite n'est pas "fermé" correctement.


Je vous montre le code qui est lancé depuis Excel 2007:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Private Sub CommandButton4_Click()
 
'Désactive Rafraichissement de l'écran et alertes
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
 
 
 
'Récupération du nom du fichier Excel
    Dim FichierExcel, CheminExcel As String
    FichierExcel = ThisWorkbook.Name
    CheminExcel = ThisWorkbook.Path
 
'Instanciation du FSO.
 
    Dim oFSO As Scripting.FileSystemObject
    Set oFSO = New Scripting.FileSystemObject
 
'Teste l'accès au fichier sous l'adresse renseignée dans l'userform1 et vérifie si le
'fichier Pricing Spécifique.mdb existe
 
    Dim PSpecFilePath As String
    PSpecFilePath = UserForm1.Label2.Caption
 
    If Not oFSO.FileExists(PSpecFilePath) Then
            MsgBox "Attention! Le fichier * Pricing Spécifique.mdb * n'a pas été trouvé dans le répertoire:" & vbTab & vbTab & vbCrLf & vbCrLf & PSpecFilePath & vbTab & vbTab & vbCrLf & vbCrLf & "Vérifiez si:" & vbCrLf & "  1 - Vous avez accès au répertoire et si le fichier existe dans: " & PSpecFilePath & vbCrLf & "  2 - Le nom et format de fichier sont conforme à l'exemple: * Pricing Spécifique.mdb *." & vbCrLf & "  3 - Il n'y a pas d'espace au début ou à la fin du nom du fichier.", vbExclamation + vbOKOnly, "Vérification nom et format du fichier * Pricing Spécifique.mdb *"
            Exit Sub
        Else
        End If
 
'Récupère que le Folder ou se trouve le fichier
     PSpecFilePath = oFSO.GetParentFolderName(PSpecFilePath)
 
' Démarrer Access
    'Dim acApp As Access.CurrentProject
 
' Ouvrir la base de données concernée
 
    sNomBase = PSpecFilePath & "\Pricing Spécifique.mdb"
    sNomBaseTmp = PSpecFilePath & "\Pricing Spécifique TEMP.mdb"
    DBEngine.CompactDatabase sNomBase, sNomBaseTmp
 
    'DBEngine.CompactDatabase sNomBase, sNomBaseTmp '1. Compactage dans une nouvelle base
    Kill sNomBase '2. Suppression de la base originale
    Name sNomBaseTmp As sNomBase '3. Renommer la base compactée avec le nom de la base originale
 
 
Windows(FichierExcel).Activate
 
 
Sheets("Menu").Select
 
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Unload Me
End Sub

Pour information:

1) Je ne veux pas fermer le fichier Excel par code. Je veux laisser la possibilité à l'utilisateur de garder le fichier Excel ouvert et d'ouvrir la base Access s'il le souhaite. (ce qui est infaisable aujourd'hui)
2) Le compactage doit se faire qu'à l'éxécution du code depuis Excel. Je ne souhaite pas cocher l'option dans Access " Compacter la base lors de la fermeture"

Merci par avance de votre aide

JP