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 :

Mise à jour automatique des dates de production


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Mise à jour automatique des dates de production
    Bonjour,

    J'ai 1 base contenant 1 table. Chaque enregistrement de ma table correspond à un ordre de production.

    à chaque production est associé
    • un ordre de fabrication,

    • une priorité (de 0 à 1000) qui détermine l’enchaînement des productions et n'a de sens que relatif,

    • une date de début,

    • une durée de production et

    • une case à cocher lorsque la prod est "soldée" (terminée).


    J'ai une requête qui interroge cette table et me fait apparaître toutes les prod non encore soldées, et qu'il reste donc à planifier pour les jours à venir.

    J'ai un formulaire basé sur cette requête.

    Les prod sont ordonnées par numéro de prioritité (le plus petit devra passer avant les autres sur le planning). Toute prod qui n'a pas encore de numéro de priorité n'est donc pas planifiée, et ne possède pas encore de date de début.

    Dès que j'ajoute un numéro de priorité, la ligne rentre alors dans le planning de production à la suite des autres prod déjà planifiées, selon son numéro de priorité.

    Mon poblème : Comme les machines de prod tournent 24/24h, le planning est très simple : toutes les prod s'echaînent à la minute. La fin d'une prod correspond donc au début de la suivante. Affecter un numéro de priorité revient à insérer une nouvelle prod parmis le planning déjà existant, ce qui va boulverser toutes les dates qui se suivent.

    à ce moment, j'aimerais que cette nouvelle prod prenne automatiquement la date de fin de la prod précédente comme date de début. sa date de fin est déjà calculée automatiquement. Une fois calculée, j'aimerais que la date de début de la prod suivante soit également modifiée..et ainsi de suite !

    Je suis sous access 2010, et l'exemple développé est joint.

    J'imagine qu'il faut coder en basic, mais je ne sais vraiment pas par où commencer.

    J'espère avoir exprimé le plus clairement possible mon problème,

    Merci de votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Bonjour,

    Désolé, je dispose de Access2000, je n'ai donc pas accès à ta db.

    Je crois qu’on peut se passer de VBA. Peut-être raisonner comme ceci :

    si ta table est en ordre au départ, c’est-à-dire des dates qui s’enchainent, après l’insertion de la nouvelle tâche,
    - il faut trouver celle qui vient juste avant ;
    - considérer que la fin de cette dernière est le début de la nouvelle ;
    - et à toutes celles qui suivent, ajouter la durée de la nouvelle, tant à la DateDebut qu’à la Datefin.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse.

    Désolé pour la version du fichier, mais même sans l'ouvrir tu as tout à fait compris mon problème.

    Ta solution me paraît pertinente.

    Mais je ne vois pas comment la mettre en oeuvre (avec ou sans du code basic)

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    C'est possible sans VBA.
    Vois l’exemple en annexe.
    J’ai créé 3 requêtes avec le QBE.

    r001Precedent : pour trouver la dernière production avant celle à insérer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT TOP 1 LaTable.Priorite, LaTable.DateDebut, LaTable.DateFin
    FROM LaTable
    WHERE (((LaTable.Priorite)<>0 And (LaTable.Priorite)<[Formulaires]![LeFormulaire]![txtPriorite]))
    ORDER BY LaTable.Priorite DESC;
    r002CompleterLeNouveau : pour compléter DateDebut et DateFin dans le nouveau à insérer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE LaTable SET LaTable.DateDebut = DLookUp("DateFin","r001Precedent"), LaTable.DateFin = DLookUp("DateFin","r001Precedent")+[duree], LaTable.Inserer = No
    WHERE (((LaTable.id)=[Formulaires]![LeFormulaire]![txtId]));
    r003AmenagerLesSuivants : corriger les dates de tous les suivants

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE LaTable SET LaTable.DateDebut = [DateDebut]+Formulaires!LeFormulaire!txtDuree, LaTable.DateFin = [DateFin]++Formulaires!LeFormulaire!txtDuree
    WHERE (((LaTable.Priorite)>[Formulaires]![LeFormulaire]![txtPriorite]));
    Au clic de la case à cocher, on déclenche une macro qui exécute r002 et r003.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse.

    Le soucis est que je bosse non pas directement sur la table avec des query, mais dans un formulaire (d'ailleurs date fin est un champ calculé dans le formulaire).

    Je pensais lancer les requêtes SQL lors d'une modification du champ "priorité" grâce à code VBA (genre DoCmd.RunSQL strSQL)

    J'arrive à lancer ces requêtes, mais elles ouvrent une nouvelle fenêtre pour chaque requête, au lieu de trier/modifier directement dans le formulaire ouvert en mode "feuilles de données"...

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    Peux-tu déposer une version Access2000 avec la table et ton formulaire ?

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Je suis navré mais je n'arrive pas à enregistrer en version 2000 depuis mon access 2010.

    je pense que ça n'est pas dans la politique de windows...ou bien je n'ai pas trouvé !

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut
    La conversion est seulement possible lorsque tu n'utilises pas de fonctionnalités seulement disponibles en 2010.

    Sinon, pour ton info : Fichier/Enregistrer la base de données sous...

    Désolé de ne pouvoir t'aider davantage.

  9. #9
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci pour ton aide ClaudeLELOUP. J'ai finalement trouvé une solution en utilisant non pas des requêtes SQL, mais un recordset...je ne sais pas si c'est le plus élégant, mais ça me causait plus.

    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
    23
    24
    25
    26
    27
    28
     
    Private Sub PRIORITE_AfterUpdate()
    Dim rs As DAO.Recordset
    Dim dateDebutSuiv As Date
    Dim tpsAjouter As Integer
     
    DoCmd.SetOrderBy "[PRIORITE] , ASC"
    Set rs = Me.Recordset
     
    rs.FindFirst "[PRIORITE] <> 0"
    If rs![DATE DEBUT] <> "" Then
        Do While Not rs.EOF
            dateDebutSuiv = DateAdd("s", (rs![TPS REGLAGE] + rs![TPS PRODUCTION] + rs![DECALAGE]) * 3600, rs![DATE DEBUT])
            rs.Edit
            rs![DATE FIN] = dateDebutSuiv
            rs.Update
            rs.MoveNext
            If Not rs.EOF Then
                rs.Edit
                rs![DATE DEBUT] = dateDebutSuiv
                rs.Update
            End If
        Loop
    Else
        MsgBox "L'enregistrement ayant la priorité la plus faible n'a pas de date de début." & _
                " Merci de lui en ajouter une, puis de modifier le champ [priorité] pour relancer la macro"
    End If
    End Sub
    ps : voilà la seule option que me propose access 2010 pour "enregistrer sous..."

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 768
    Points : 58 094
    Points
    58 094
    Billets dans le blog
    42
    Par défaut
    bonjour,

    pour enregistrer en 2000 à partir de 2010, il faut aller dans Enregistrer et publier.
    Dans Enregistrer la base de données sous, on propose Base de données Access 2000 (Enregistrer une copie compatible avec Access 2000).

    C'est ça ou offrir la version 2010 à Claude

  11. #11
    Membre à l'essai
    Inscrit en
    Octobre 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Ah ben tout de suite, quand on demande aux gens de mettre la main au porte feuille, ils trouvent plus vite la solution !

    ci-joint en version 2000.

    [edit] le problème est malgré tout résolut. C'est plus pour compléter les données du problème [/edit]
    Fichiers attachés Fichiers attachés

  12. #12
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Points : 281 917
    Points
    281 917
    Par défaut

    @ f-leb

    Merci d'avoir essayé !

    @ sulliwane

    Radin !


    @ Tous,

    Joyeux Noël.

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

Discussions similaires

  1. mise à jour automatique des enregistrements
    Par laurent00 dans le forum IHM
    Réponses: 4
    Dernier message: 22/07/2008, 17h39
  2. La mise à jour automatique des plug-in
    Par jinar dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 15/04/2008, 14h49
  3. Mise à jour automatique des données
    Par enok37 dans le forum Hibernate
    Réponses: 5
    Dernier message: 01/10/2007, 09h44
  4. Mise à jour automatique par date
    Par man18 dans le forum Access
    Réponses: 2
    Dernier message: 25/01/2007, 11h06
  5. Word : Mise à jour automatique des liaisons
    Par tiftay01 dans le forum Word
    Réponses: 13
    Dernier message: 13/02/2006, 09h34

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