Problème d'ouverture Access depuis EXCEL après compactage
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:
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 :ccool:
JP