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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| ' -----------------------------------------------------------
' DEBUT DU SCRIPT
' -----------------------------------------------------------
Dim sBDD, sAccExe, oSH
' Chemin complet Base de données
sBDD = "C:\Mes Documents\Access\La BDD.mdb"
' Ajouter des guillemets doubles si besoin
If Left(sBDD, 1) <> """" Then
If InStr(1, sBDD, " ") > 1 Then sBDD = """" & sBDD & """"
End If
' Récupère chemin complet MSAccess.exe
sAccExe = GetAccessExe()
If sAccExe <> "" Then
' Crée l'objet Shell
Set oSH = CreateObject("WScript.Shell")
' Construit ligne de commande pour compacter bdd
strCmd = sAccExe & " " & sBDD & " /Compact"
' Lance Appli avec ligne de commande et attend la fin d'exécution
iRet = oSH.Run(strCmd, , True)
' Construit ligne de commande pour ouvrir bdd
strCmd = sAccExe & " " & sBDD ' & " /x Nom Macro"
' Lance Appli avec ligne de commande sans attendre la fin d'exécution
oSH.Run strCmd
Else
MsgBox "Application Access Non trouvée"
End If
Set oSH = Nothing
' -----------------------------------------------------------
' FIN DU SCRIPT
' -----------------------------------------------------------
' -----------------------------------------------------------
' Fonction pour récupérer chemin complet MSAccess.exe à partir
' de la base de registre (Classes Root).
' Retourne U:\Chemin\MSACCESS.EXE ou "U:\Le Chemin\MSACCESS.EXE"
' -----------------------------------------------------------
Function GetAccessExe()
Dim oSh, sFileType, sOpenCommand, sAccExe
Dim p
sFileType = "": sOpenCommand = "": sAccExe = ""
p = 0
On Error Resume Next
' Crée l'objet Shell
Set oSh = CreateObject("WScript.Shell")
' Lire type de fichier associé à l'extension ".mdb"
sFileType = oSh.RegRead("HKCR\.mdb\")
' Lire commande du verbe "open" du type de fichier associé à l'extension ".mdb"
If sFileType <> "" Then
sOpenCommand = oSh.RegRead("HKCR\" & sFileType & "\Shell\Open\Command\")
End If
' Si la commande a été obtenue
If Len(sOpenCommand) > 0 Then
' rechercher position de MSACCESS.EXE
p = InStr(1, sOpenCommand, "MSACCESS.EXE", 1) ' 1 = text compare
' Si MSACCESS.EXE a été trouvé, enlever tout ce qui est à droite de
' MSACCESS.EXE sauf le guillement double s'il est présent.
If p > 1 Then
p = p + Len("MSACCESS.EXE") - 1
If Mid(sOpenCommand, p + 1, 1) = """" Then p = p + 1
sAccExe = Left(sOpenCommand, p)
End If
End If
' Vérifier s'il ne manque pas des guillemets doubles
If Len(sAccExe) > 0 Then
' Si ne commence pas par un guillemet double (")
If Left(sAccExe, 1) <> """" Then
' Enlever dernier caractère si c'est un guillemet double (")
If Right(sAccExe, 1) = """" Then
sAccExe = Left(sAccExe, Len(sAccExe) - 1)
End If
' Ajouter les guillemets doubles si nécessaires
If InStr(1, sAccExe, " ") > 0 Then
sAccExe = """" & sAccExe & """"
End If
' Sinon si commence par un guillemet double (")
Else
' Vérifier que le dernier caractère est un guillemet double (")
If Right(sAccExe, 1) <> """" Then sAccExe = sAccExe & """"
End If
End If
Set oSh = Nothing
GetAccessExe = sAccExe
End Function |
Partager