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 :

Utilisation multiple de /cmd et de la fonction Command()


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    juillet 2010
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : juillet 2010
    Messages : 130
    Points : 69
    Points
    69
    Par défaut Utilisation multiple de /cmd et de la fonction Command()
    Bonjour à tous !

    J'ai entrepris d'utiliser la commande /cmd et je me heure à une difficulté quand je l'utilise simultanément 2 fois (ou plus). Voici le contexte :

    - Mon programme Access s'appelle PROG.accdb et je le lance depuis 2 répertoires différents DIR1 et DIR2.

    - Pour DIR1 j'ai créé le raccourci D:\DIR1\PROG.accdb /cmd "Essai1"
    - Pour DIR2 j'ai créé le raccourci D:\DIR2\PROG.accdb /cmd "Essai2"
    - Dans PROG je récupère la valeur du paramètre par la fonction Command().

    Si je clique d'abord sur le raccourci associé à DIR1 je récupère bien le paramètre "Essai1" dans le code VBA. Mais si je clique ensuite sur le raccourci associé à DIR2 (en gardant ouverte l'instance liée à DIR1), la fonction Command () me renvoie "" au lieu de "Essai2").
    Idem dans l'autre sens : si je lance d'abord DIR2 je récupère bien "Essai2" mais ensuite pour DIR1 je récupère "" au lieu de "Essai"

    Bref il semble que soit le paramètre /cmd soit la fonction Command() ne fonctionne qu'avec une seule instance ouverte du programme.

    Est-ce exact ? Y a-t-il une ruse que j'ignore ?

    Merci d'avance pour votre avis.

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    mai 2005
    Messages
    2 740
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2005
    Messages : 2 740
    Points : 4 514
    Points
    4 514
    Par défaut
    As-tu scindé ton programme en 2 (frontale + dorsale) ?
    Déjà si tu utilisais 2 frontaux distincts, tu t'épargnerais cette difficulté ...
    "Always look at the bright side of life." Monty Python.

  3. #3
    Membre du Club
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    juillet 2010
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : juillet 2010
    Messages : 130
    Points : 69
    Points
    69
    Par défaut
    Bonjour micniv et merci pour ta question.

    Si je comprends ce que tu suggères, il y aurait un seul front-end et plusieurs back-ends, chacun de ces derniers dans son répertoire propre.
    Dans mon contexte j'ai besoin de garder ouverts simultanément plusieurs back-ends, et le but du /cmd est d'afficher la valeur de ce paramètre dans le titre de l'application pour que l'utilisateur voie avec quoi il travaille.

    Si le front-end est unique comment l'instancier pour chaque be ?

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    mai 2005
    Messages
    2 740
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2005
    Messages : 2 740
    Points : 4 514
    Points
    4 514
    Par défaut
    Je te parle du fractionnement d'une base ACCESS en back end (base 'dorsale' : les données : les tables) et en front end (base 'frontale' qui comporte les requetes , les formuaires, les états et les modules mais aussi les tables' locales')
    La dorsale est partagée et chaque utilisateur utilise une frontale installée sur son pc.
    C'est le principe de base pour partager une appli Access entre plusieurs utilisateurs. Etonnant que tu n'en n'ai pas entendu parler ...

    Voir la page https://support.microsoft.com/fr-fr/...3-51b1d73498cc
    Si besoin, tu trouveras facilement des tutos sur ce sujet sur Developpez et sur Google ...
    "Always look at the bright side of life." Monty Python.

  5. #5
    Membre du Club
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    juillet 2010
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : juillet 2010
    Messages : 130
    Points : 69
    Points
    69
    Par défaut
    Je n'ai pas dû être très clair dans ma réponse : je pratique Access depuis de nombreuses années avec une bonne maitrise de VBA et je fractionne systématiquement mes bases dans toutes les applications que je développe.

    Celà dit je vais mieux préciser ma demande en l'illustrant par l'exemple suivant.
    Supoosons que mon appli, évidemment fractionnée en front-end/back-end, ait ses data organisées par exercice comptable DIR1 pour 2022 et DIR2 pour 2023.
    Dans une période d'environ un mois avant et un mois après le changement d'année, l'utilisateur a besoin de travailler SIMULTANEMENT avec les data (donc B-E) des deux exercices.

    Alors de deux choses l'une :
    - ou bien le front-end est unique et l'établissement des liaisons avec les back-ends demande d'instancier ce front-end (1 instance par B-E) => comment le faire sans avoir des effets de bord (l'utilisateur se trouvant dans 2022 alors qu'il croit travailler dans 2023) ?

    - ou bien le front-end est dupliqué dans DIR1 et DIR2 (et connecté à son back-end de manière permanente).

    Pour l'instant j'ai opté pour la 2ème solution qui préserve l'étanchéité et qui fonctionne de manière performante => MAIS il y a le pb du /cmd + Command() qui renvoie bien 2022 sur clic du raccourci correspondant mais vide sur clic du raccourci 2023 (si on ouvre les applis dans cet ordre).

    D'où ma question : le couple /cmd + Command() est-il un fusil à 1 coup ?

  6. #6
    Membre du Club
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    juillet 2010
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : juillet 2010
    Messages : 130
    Points : 69
    Points
    69
    Par défaut
    Pour bien me faire comprendre j'ai construit une petite base de test Testcmd.accdb qui ne contient rien d'autre que la fonction TestCmd() suivante, elle-même lancée par une macro Autoexec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Function TestCmd()
     Dim strValCmd As String: strValCmd = Command()
     MsgBox "Command renvoie la valeur : " & strValCmd
    End Function
    NB : pas de table donc pas de fractionnement.

    Cette appli est copiée dans les répertoires DIR1 et DIR2 et est lancée avec 2 raccourcis, celui pour DIR1 se termine par /cmd "2022" et l'autre par /cmd "2023".

    1er essai : je clique sur le 1er raccourci et testCmd affiche 2022 puis je ferme avant de cliquer sur le 2ème raccourci et TestCmd affiche 2023. OK !

    2ème essai : je fais la même chose sauf que je laisse ouvert TestCmd qui affiche 2022. Dans ce cas l'appli lancée avec le 2ème raccourci renvoie vide (au lieu de 2023). KO !

    Encore plus intrigant : si une appli Access quelconque qui n'a rien à voir avec TetsCmd est déjà ouverte dans un autre répertoire, TestCmd renvoie aussi une valeur vide.

    Je suis obligé de constater que le passage de paramètre par ligne de commande ne fonctionne pas si une instance d'Access est déjà active.

    Qu'en pensez-vous ?

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Developpeur VBA, C# et VB.Net =]
    Inscrit en
    juillet 2007
    Messages
    14 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Developpeur VBA, C# et VB.Net =]
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 14 491
    Points : 33 903
    Points
    33 903
    Par défaut
    Salut,

    à toute fin utile, le tuto qui parle de cela
    https://jpcheck.developpez.com/tutor...ge-parametres/

    et plus particulièrement
    https://jpcheck.developpez.com/tutor...rametres/#LVII

    Tout est ici question de construction de tes applications...
    - 1 application N paramètres
    - N applications, 1 paramètre
    - N applications, N paramètres
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  8. #8
    Membre du Club
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    juillet 2010
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Manager de projet (retraité)

    Informations forums :
    Inscription : juillet 2010
    Messages : 130
    Points : 69
    Points
    69
    Par défaut
    Merci Jean-Philippe,

    J'avais effectivement regardé ce tuto, mais sans percuter outre mesure.

    Du coup j'ai écrit deux .bat de la forme : Start /WAIT msaccess.exe "E:\Tests\DIR1\Testcmd.accdb" /cmd "2022"
    et quand je les lance je n'ai plus le problème évoqué plus haut (les 2 instances simultanées d'Access donnent bien l'affichage souhaité). Ta suggestion était donc la bienvenue.

    Reste une petite bricole : chaque batch ouvre un écran type DOS qui ne se referme qu'à la clôture de l'appli qu'il a ouverte. J'ai ajouté un EXIT sans succès.
    Comment forcer la sortie du .bat ?

    Merci d'avance

Discussions similaires

  1. Utilisation multiple de la fonction input
    Par Benmart dans le forum Scilab
    Réponses: 1
    Dernier message: 06/12/2017, 12h25
  2. Réponses: 4
    Dernier message: 23/06/2014, 09h58
  3. Utilisation multiple d'une fonction de DLL
    Par jimmy42 dans le forum C
    Réponses: 2
    Dernier message: 19/03/2008, 17h47
  4. Utilisation multiple d'une fonction
    Par crevygood dans le forum Framework .NET
    Réponses: 5
    Dernier message: 23/11/2006, 21h01
  5. Utilisation de template dans un role de fonctions/procedures
    Par Punky65250 dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 01/09/2004, 11h05

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