IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Lancement Fichier ".bat" par Pack 2003 et 2007


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut Lancement Fichier ".bat" par Pack 2003 et 2007
    Bonsoir
    Je me suis aidé du super Tuto de loufab
    http://loufab.developpez.com/tutorie...mmande/#L3.2.A
    pour créer un fichier . bat qui me permet de lancer les opérations suivantes.

    Compactage d'une base et execution d'une macro située dans celle-ci.

    Tout fonctionne très bien mais mon souci est le suivant.
    Le lancement de ce fichier . bat peut être lancé aussi bien par des utilisateurs du pack 2003 que celui de 2007.
    Il m'a donc fallu adapter le fichier et les lignes de commande.
    Ma question est donc , est-il possible de simplifier la synthaxe de ce fichier.
    d'avance merci pour votre aide.
    Cordialement
    Stsym


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    :Pack2003
    "C:\Program Files\MICROS~2\OFFICE11\MSACCESS.EXE" "C:\data\x_BaseEssaiBatch.mdb" /compact
    "C:\Program Files\MICROS~2\OFFICE11\MSACCESS.EXE" "C:\data\x_BaseEssaiBatch.mdb" /x "Macro1"
     
    :Pack20007
    "C:\Program Files\Microsoft Office\Office12\MSACCESS.EXE" "C:\data\x_BaseEssaiBatch.mdb" /compact
    "C:\Program Files\Microsoft Office\Office12\MSACCESS.EXE" "C:\data\x_BaseEssaiBatch.mdb" /x "Macro1"

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    Le code suivant n'est pas plus simple mais utilise la base de registres pour récupérer la variable du chemin de l'exécutable d'Access avec la clé de l'extension associée (mdb):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    set stcle=reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Extensions" /v "mdb"
    set stnom=findstr /I /L /C:"REG_SZ"
    for /f  "tokens=1,2,3" %%a in ('%stcle%^|%stnom%') do 
    %%c "C:\data\x_BaseEssaiBatch.mdb" /compact
    %%c "C:\data\x_BaseEssaiBatch.mdb" /x "Macro1"
    et cela fonctionne avec toutes les versions.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut
    Bonjour Tee-grandbois
    Tout d'abord je te remercie pour ta réponse.

    Par contre sur mon poste elle ne fonctionne pas .
    J'ai bien vérifié la syntaxe des noms de fichiers, chemin .. et fais plusieurs tests.

    Je suis allé dans la base de registre et n'ai pas vu d'extension "mdb".
    Est-ce la cause ?
    J'ai adapté le code pour ouvrir un fichier .txt, puisque l'extension existe dans la base de registre, mais sans succès.

    As-tu une petite idée?
    Merci encore pour ton aide.

    StSym

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set stcle=reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Extensions" /v "txt"
    set stnom=findstr /I /L /C:"REG_SZ"
    for /f  "tokens=1,2,3" %%a in ('%stcle%^|%stnom%') do 
    %%c "C:\data\Essai.txt"

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    tu pourrai essayer avec un script VBS (fichier .vbs).
    Ça fait plus de code, mais c'est plus puissant qu'un .bat.
    Code vbs : 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
    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
    Si la fonction GetAccessExe() pose problème du fait qu'elle lit la base de registre, on peut la remplacer par :
    Code vbs : 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
        ' -----------------------------------------------------------
        ' Fonction pour récupérer chemin complet MSAccess.exe
        ' -----------------------------------------------------------
        Function GetAccessExe()
        Dim oAccApp, sAccExe
     
        sAccExe = ""
        Set oAccApp = CreateObject("Access.Application")
        sAccExe = oAccApp.SysCmd(9)  ' acSysCmdAccessDir = 9
        oAccApp.Quit
        Set oAccApp = Nothing
        ' Ajouter exécutable
        If Len(sAccExe) > 0 Then
           If Right(sAccExe, 1) <> "\" Then sAccExe = sAccExe & "\"
           sAccExe = sAccExe & "MSACCESS.EXE"
        End If
        ' Ajouter guillemets doubles, si besoin
        If InStr(1, sAccExe, " ") > 1 Then sAccExe = """" & sAccExe & """"
        ' Renvoyer résultat
        GetAccessExe = sAccExe
        End Function
    A+

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Points : 67
    Points
    67
    Par défaut
    Bonjour LedZeppII,

    Merci pour ta solution qui fonctionne.
    Mais oulala elle dépasse de loin mes connaissances en programmation.

    Merci à vous deux pour votre aide
    Cdt
    StSym

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour stsym
    Bonjour et merci à LedZeppII pour son intervention et sa solution en vbs que l'on n'utilise pas assez (encore faut-il savoir l'utiliser, ce qui n'est pas mon cas pour l'instant, mais je vais m'y mettre).
    StSym à dit:
    J'ai adapté le code pour ouvrir un fichier .txt, puisque l'extension existe dans la base de registre, mais sans succès.
    En fait il s'agit des extensions des applications d'Office et txt n'en fait pas partie donc cela ne pouvait pas marcher. Quoi qu'il en soit, j'ai du passer à coté de quelque chose hier soir, mais j'ai fini par trouver et voici une nouvelle version qui fonctionne beaucoup mieux (enfin j'espère car hier soir j'avais fait fonctionner l'ancienne !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @echo off
    for /f "tokens=4*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE" ^| find "REG_SZ"') do set appAccess=%%i 
    "%appAccess%" "C:\data\x_BaseEssaiBatch.mdb" /compact
    "%appAccess%" "C:\data\x_BaseEssaiBatch.mdb" /x "Macro1"
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupération de fichiers par Access 2003
    Par JEAN MICHEL BOYER dans le forum Access
    Réponses: 3
    Dernier message: 02/09/2005, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo