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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    152
    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 : 152
    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
    3 045
    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 : 3 045
    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é ...

  3. #3
    Membre confirmé
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    152
    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 : 152
    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
    3 045
    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 : 3 045
    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 ...

  5. #5
    Membre confirmé
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    152
    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 : 152
    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 confirmé
    Homme Profil pro
    Manager de projet (retraité)
    Inscrit en
    Juillet 2010
    Messages
    152
    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 : 152
    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 ?

Discussions similaires

  1. Utilisation multiple de la fonction input
    Par Benmart dans le forum Scilab
    Réponses: 1
    Dernier message: 06/12/2017, 11h25
  2. Réponses: 4
    Dernier message: 23/06/2014, 08h58
  3. Utilisation multiple d'une fonction de DLL
    Par jimmy42 dans le forum C
    Réponses: 2
    Dernier message: 19/03/2008, 16h47
  4. Utilisation multiple d'une fonction
    Par crevygood dans le forum Framework .NET
    Réponses: 5
    Dernier message: 23/11/2006, 20h01
  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, 10h05

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