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

Modélisation Discussion :

Gérer la disponibilité d'un matériel [AC-2016]


Sujet :

Modélisation

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Gérer la disponibilité d'un matériel
    Bonjour à tous,

    Je suis actuellement en train de créer un base de donnée pour faciliter la gestion des commandes de véhicule de ma boite (qui travaille actuellement uniquement sur excel) mais je me frotte depuis quelques jours à un problème : comment gérer la disponibilité des véhicules ???

    Je dispose actuellement des tables suivantes :

    Nom : Sans titre2.png
Affichages : 329
Taille : 9,4 Ko

    Ainsi que d'un formulaire de commande avec un sous-formulaire pour le détail desdites commandes.

    Le champ "disponible" de la table véhicule est de type booléen, j'avais pensé le mettre à jour via une requête activée par macro à l'enregistrement de la commande, cette requête devait récupérer les numéros de véhicule saisie dans la commande pour changer leur disponibilité à "non", malheureusement les commandes étant souvent créées plusieurs jours (voir semaine) avant la date de perception effective du véhicule, ça ne marche pas...

    L'idée finale serait que je puisse insérer dans mon formulaire de commande un bouton qui m'afficherait uniquement la liste de tous les véhicules disponibles afin qu'il ne me reste plus qu'à copier-coller le numéro du véhicule dans la commande.

    J'ai fait pas mal de recherche et je suis tombé sur le tuto de Denis Hulo "Générer la disponibilité du matériel de location", malheureusement cela ne correspond pas exactement à ce que je recherche... (pas d'histoire de quantité comme dans le tuto, le véhicule est disponible ou ne l'est pas)...

    Voila voila, si vous pouvez m'aider je vous en serai mille fois reconnaissant !

  2. #2
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 956
    Points : 1 139
    Points
    1 139
    Par défaut Gérer la disponibilité d'un matériel
    Bonjour,

    Tu as un champ DATE_COMMANDE dans ta table APC_COMMANDES, pourquoi ne lancerais-tu pas une requête qui mettrait ton champ DISPONIBLE à Oui pour les dates échues au lancement de ton appli, ou sur Timer dans un formulaire de menu, par exemple...
    Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
    Ou encore:
    Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
    ... Des principes qui m'ont beaucoup aidé en informatique...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    j'avais bien a l'idée quelque chose comme ça, mais c'est la réalisation technique qui me pose problème...

    Dans l'absolu ce qu'il me faudrait c'est une requête capable de mettre la disponibilité à "NON" pour les véhicules dont la date de perception est dépassé et à "OUI" pour ceux dont la date de réintégration est également passée, mais le tout uniquement pour la dernière commande concernant le véhicule (car un véhicule pourra être commandé plusieurs fois dans une année par exemple)

    Et là j’avoue que je suis un peu pommé...

  4. #4
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 956
    Points : 1 139
    Points
    1 139
    Par défaut Gérer la disponibilité d'un matériel
    Bonjour,

    Pourrais-tu m'en dire plus sur ton appli?
    - Sur quel objet démarre-t-elle ?

    Si c'est un formulaire de menu, sur l'événement Ouverture tu fais un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Form_Menu_Open()
       Call MAJ_Reservations_Commande
       Call MAJ_Reservations_Reintegration
    End Sub
    Code : 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
    Sub MAJ_Reservations_Commande()
       Dim strSQL as string
       Dim mabd as database, mrec as Recordset
       set mabd=CurrentDB()
       strSQL="SELECT Max(APC_COMMANDES.DATE_COMMANDE) AS MaxDeDateCommande, APC_VEHICULE.NUM " & _
          "FROM (APC_COMMANDES INNER JOIN APC_DETAIL_COMMANDES ON APC_COMMANDES .NUM_COMMANDE= APC_DETAIL_COMMANDES.NUM_COMMANDE) INNER JOIN APC_VEHICULE ON APC_DETAIL_COMMANDES.NUM_VEHICULE=APC_VEHICULE.NUM " & _
          "WHERE APC_VEHICULE.DISPONIBLE=-1 AND APC_COMMANDES.DATE_REINTEGRATION=Null AND DATE_COMMANDE>=Date() " & _
          "GROUP BY APC_VEHICUL.NUM; " 
       set mrec=mabd.openrecordset(strSQL, dbOpenDynaset)
       With mrec
          Do While .EOF=0
             strsql="UPDATE APC_VEHICULE SET DISPONIBLE=0 WHERE APC_VEHICULE=" & !Num & ";"
            DoCmd.SetWarnings False
            DoCmd.RunSQL (strSQL)
            DoCmd.SetWarnings True
            .movenext
          loop
          .close
       End With
       Set mrec=Nothing
       Set mabd=Nothing
    End Sub
    Code : 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
    Sub MAJ_Reservations_Reintegration()
       Dim strSQL as string
       Dim mabd as database, mrec as Recordset
       set mabd=CurrentDB()
       strSQL="SELECT Max(APC_COMMANDES.DATE_COMMANDE) AS MaxDeDateCommande, APC_VEHICULE.NUM " & _
          "FROM (APC_COMMANDES INNER JOIN APC_DETAIL_COMMANDES ON APC_COMMANDES .NUM_COMMANDE= APC_DETAIL_COMMANDES.NUM_COMMANDE) INNER JOIN APC_VEHICULE ON APC_DETAIL_COMMANDES.NUM_VEHICULE=APC_VEHICULE.NUM " & _
          "WHERE APC_VEHICULE.DISPONIBLE=0 AND APC_COMMANDES.DATE_REINTEGRATION>=Date() " & _
          "GROUP BY APC_VEHICUL.NUM; " 
       set mrec=mabd.openrecordset(strSQL, dbOpenDynaset)
       With mrec
          Do While .EOF=0
             strsql="UPDATE APC_VEHICULE SET DISPONIBLE=-1  WHERE APC_VEHICULE=" & !Num & ";"
            DoCmd.SetWarnings False
            DoCmd.RunSQL (strSQL)
            DoCmd.SetWarnings True
            .movenext
          loop
          .close
       End With
       Set mrec=Nothing
       Set mabd=Nothing
    End Sub
    Il peut y avoir des co(q)uilles dans mon code que j'ai pondu un peu vite, mais la logique est bonne. Je te laisse l'adapter à tes besoins.
    Si çà ne convient pas ou que j'aie mal compris ton problème, envoie moi si tu peux une copie de ta base en pièce jointe.

    Bonne journée.
    Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
    Ou encore:
    Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
    ... Des principes qui m'ont beaucoup aidé en informatique...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Diantre ! Ce que je craignais le plus.... du VBA !!!

    pardonne mon ignorance mais... y aurait-il moyen d'éviter le vba ? Si non, serait-il possible de m'expliquer dans les grande ligne le code que tu as écrit ?

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Au lieu d'avoir un champ Disponible, pourquoi ne pas tester si la voiture est revenue avec une requête ?
    Une voiture revenue est une voiture qui n'appartient à aucune commande avec une date de réintégration à Null.
    Non ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Malheureusement, non. la date de reintegration est une date prévisionnelle saisie lors de la saisi de la commande, de plus les commandes vont s'accumuler au fil du temps (et pour un même véhicule)... il faudrait donc déjà que je sois capable d'isoler la dernière commande pour un véhicule donné, mais comment ?

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    OK, tu connais mieux tes données que moi :-).

    pour la dernière commande, 2 idées :

    • celle qui a le plus grand numéro.
    • celle dont la date est la plus grande.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2017
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    EUREKA !

    A force de réflexion (rien ne vaut la feuille et le crayon ^^) j'ai enfin fini par dénicher la solution, le critère décisif est en fait celui de la date de réintégration du véhicule (en partant du principe qu'ils ont tous été commandé au moins une fois et possèdent donc tous au moins une date de réintégration) car si cette date est passée c'est bien que le véhicule a été réintégré et est donc présent.

    Étape 1: J'ai créé une requête me permettant d'afficher la dernière date de réintégration connue pour chaque véhicule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT APC_DETAIL_COMMANDE.NUM_VEHICULE, Max(APC_COMMANDES.[DATE_REINTEGRATION]) AS DERNIERE_REINTEGRATION
    FROM APC_COMMANDES INNER JOIN APC_DETAIL_COMMANDE ON APC_COMMANDES.NUM_COMMANDE = APC_DETAIL_COMMANDE.NUM_COMMANDE
    GROUP BY APC_DETAIL_COMMANDE.NUM_VEHICULE;
    Étape 2: Création d'un seconde requête comparant la date du jour avec la date obtenue précédemment pour définir si le véhicule est présent ou pas, j'ai également ajouté un critère BOOLÉEN "disponible" dans la table véhicule pour écarter manuellement certains véhicule (ceux HS par exemple).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT APC_VEHICULES.TYPE_VEHICULE, APC_VEHICULES.NUM_VEHICULE, APC_VEHICULES.DISPONIBLE, qry_APC_DERNIERE_REINT.DERNIERE_REINTEGRATION
    FROM APC_VEHICULES INNER JOIN qry_APC_DERNIERE_REINT ON APC_VEHICULES.NUM_VEHICULE = qry_APC_DERNIERE_REINT.NUM_VEHICULE
    WHERE (((APC_VEHICULES.DISPONIBLE)=Yes) AND ((qry_APC_DERNIERE_REINT.DERNIERE_REINTEGRATION)<=Date()))
    ORDER BY APC_VEHICULES.TYPE_VEHICULE;
    Étape 3: Ajout d'un bouton lié à la requête dans le formulaire de saisi de commande, et le tour est joué !

    Étant débutant en SQL, j'ai préféré créer les requêtes via l'assistant, le code est donc peut-être pas très propre...

    Quoi qu'il en soit, merci pour votre aide !

  10. #10
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 956
    Points : 1 139
    Points
    1 139
    Par défaut Gérer la disponibilité d'un matériel
    Bravo!

    Dans l'esprit, c'est ce que je te proposais de faire mais sans passer par un formulaire dédié qui oblige à effectuer la manœuvre "à la mano". Ce qui importe c'est que ta solution te convienne.

    Bonne journée !
    Essayer. Rater. Essayer encore. Rater encore. Rater mieux. (Samuel Beckett)
    Ou encore:
    Quand ça ne tourne pas rond dans le carré de l'hypothénuse , c'est signe qu'il est grand temps de prendre les virages en ligne droite.(Pierre Dac)
    ... Des principes qui m'ont beaucoup aidé en informatique...

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

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