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

  1. #1
    Membre du Club
    diminuer la sollicitation de l'utilisateur pour une meme date dans des requetes simultanées
    Bonjour

    J'ai une macro qui purge une table de certaines donnée, préalablement, je demande l'impression de deux états basés sur cette table pour conserver une trace "papier" des données avant leur suppression.
    Pour créer cette effet, j'ai confectionné des requètes sur lesquelles les états imprimés sont basés, et comme je dois travailler pour des jours donnés, il y a une interrogation sur un critère de date au moment du lancement de la macro.

    Mon probleme vient de la multiple demande faite au niveau de la date; en effet, la date est demandée pour l'impression de l'état n°1, puis une nouvelle fois pour le n°2 et enfin pour selectionner la date à puger...

    existe t il un moyen pour que la date ne soit demandée qu'une seule fois à l'utilisateur et que les 3 actions aient lieu ?


    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur



    Comment lances-tu tes requêtes ? l'une après l'autre ?

    Un moyen : Lancer la procédure à partir d'un formulaire. La date à purger est saisie dans une Zone Texte et toutes les requêtes font référence à cette zone

    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  3. #3
    Membre du Club
    Citation Envoyé par Jeannot45 Voir le message


    Comment lances-tu tes requêtes ? l'une après l'autre ?
    Tout d'abord, merci de ta réponse

    Oui, en fait le bouton sur lequel on clic lance une macro, la macro contient 3 lignes, les deux premières sont des demandes d'ouverture d'etat basé sur une requete (où la date est demandée) et la dernière ligne est une requete de remplacement où là aussi la date est demandée.

    Donc en cliquant on a 3 demandes de dates consécutives....


    Citation Envoyé par Jeannot45 Voir le message
    Un moyen : Lancer la procédure à partir d'un formulaire. La date à purger est saisie dans une Zone Texte et toutes les requêtes font référence à cette zone

    Bonne continuation
    Techniquement pour des raisons de travail, je ne peu pas passer par un formulaire....l'idéal serai que le clic ouvre une seule et meme zone (formulaire réduit au minimum...) et effectivement que les requetes s'y référent, mais je ne vois pas comment:
    - faire que les 3 requetes s'y referent
    - ne pas garder cette date (donc qu'elle soit remise a 0 à chaque fois)
    - fermer cette zone (formulaire?) une fois la dernière requete exécutée...


    Je vais faire quelques essais basés sur ton idée, mais si quelqu'un peut me guider plus avant dans cette construction ou si quelqu'un a une autre idée, je suis preneur

  4. #4
    Membre du Club
    Bon....

    Rien à faire....

    je n'arrive pas a aller recuperer une date dans une table que j'aurai rempli précédement apres l'avoir ouvert sur clic....en plus la table s'ouvre bien mais aussitot apres la suite de la macro se lance et cela n'attends pas que je rentre la date dans la table

    Donc deux problemes:

    - Comment, grace à une macro, aller recuperrer la date dans une table et s'en servir comme date de départ pour une selection avec la ligne suivante de la macro (ouverture d'etat) ?

    - Comment faire pour que la macro attende au moins le temps nécessaire a la saisie de la date pour continuer à s'exécuter ?

  5. #5
    Rédacteur/Modérateur

    Bonjour,

    Tu peux utiliser une inputbox pour la saisie des dates

    • saisie de la date
    • ouverture du report
    • Attente de la fermeture du report
    • suppression des données de la table concernant la date


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim vDate As String
    vDate = InputBox("Entrez la date :")
    DoCmd.OpenReport "Monreport", acViewPreview, , "ChampDate=" & vDate
    While CurrentProject.AllReports("MonReport").IsLoaded
       DoEvents
    Wend
    DoCmd.RunSQL "Delete * From matable where ChampDate=" & vDate


    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  6. #6
    Membre du Club
    Voilà mon code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub Commande77_Click()
    Dim dateselection As String
    dateselection = InputBox("Entrez la date :")
    DoCmd.OpenReport "Etat des projets", acViewPreview, , "Date=" & dateselection
    While CurrentProject.AllReports("Etat des projets").IsLoaded
       DoEvents
    Wend
    DoCmd.RunSQL "Delete * From TableTempoDateImpression where DateTemp=" & dateselection
    End Sub


    Le probleme est que le rapport s'affichant corresponds a une date vide

    Où ai je commis l'erreur ?

  7. #7
    Rédacteur/Modérateur

    Oups les dates dans VBA... une longue histoire d'amour !

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    Dim dateselection As Date
    dateselection = InputBox("Entrez la date :")
    DoCmd.OpenReport "test", acViewPreview, , "cdbl(DernierReval)=" & CDbl(dateselection)


    On caste en double (format natif des dates dans les bases de données) pour éviter les problèmes du changement de format en VBA (les dates sont automatiquement passées en UK mm/jj/aaaa).

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  8. #8
    Membre du Club
    on me demande d'entrer une valeur pour :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    DernierReval


    et toujours pas de date dans le resultat

  9. #9
    Rédacteur/Modérateur

    Le code transmis est à adapter à ton cas. Donc mettre le bon nom de champ date présent dans ton état.

    Important ! En relisant ton code précédent je m'aperçois que tu emplois des mots clefs pour tes noms. C'est TRES FORTEMENT DECONSEILLE, à moins que tu sois de nature masochiste et que tu aimes te faire souffrir inutilement en plaçant des [] partout dans ton code et tes expressions.

    Regarde les mots clefs dans l'aide.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  10. #10
    Membre du Club
    Citation Envoyé par loufab Voir le message
    Le code transmis est à adapter à ton cas. Donc mettre le bon nom de champ date présent dans ton état.
    A priori j'ai tout vérifié et j'ai mis le bon nom
    l'etat s'ouvre mais ne renvoie aucune donnée....



    Citation Envoyé par loufab Voir le message
    Important ! En relisant ton code précédent je m'aperçois que tu emplois des mots clefs pour tes noms. C'est TRES FORTEMENT DECONSEILLE, à moins que tu sois de nature masochiste et que tu aimes te faire souffrir inutilement en plaçant des [] partout dans ton code et tes expressions.

    Regarde les mots clefs dans l'aide.
    Tu veux parler des noms des tables et des objets ?
    Je sais bien, mais une des contraintes de travail que l'on m'a donné est de rendre cela explicite a ceux qui, apres moi, devront reprendre la tâche ou la maintenance (ou en mon absence) il me faut donc donner des noms explicites

  11. #11
    Rédacteur/Modérateur

    On peut donner des noms explicites sans pour cela utiliser les mots réservés. Il suffit souvent d'un caractère supplémentaire.

    Je faisais référence à ton champ nommé Date.

    Idem pour les espaces dans les noms d'objets il faut mettre des crochets partout, en SQL et plus génant dans VBA.

    ça devrait donner ça :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    DoCmd.OpenReport "Etat des projets", acViewPreview, , "cdbl([Date])=" & CDbl(dateselection)


    [Date] est bien un champ date ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  12. #12
    Membre du Club
    Ah oui c'est clair que ça marche vachement mieux comme ça !!!

    Je m'en suis mis une claque (véridique!) tellement faire une boulette pareille est inadmissible...et le pire c'est que cela m'a rappellé que j'avais déjà fait la même erreur d'emploi de mot réservé à une autre occasion ....

    Ce coup là j'espère que je vais m'en souvenir !!!

    En tous cas un grand merci, ca me permets d'avancer
    je teste le reste de la procédure et si c'est Ok je manque "résolut"

  13. #13
    Rédacteur/Modérateur

    Bon c'est pas une raison pour se menotter au radiateur non plus !
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  14. #14
    Membre du Club
    alors ca marche tres bien
    La seule chose, c'est qu'avant quand j'utilisait des macro qui sollicitaient l'utilisateur de façon multiple, ça imprimait automatiquement les pages meme si j'avais un affichage des données en prévisualisation, là je n'ai que la prévisualisation sans impression automatique

    est ce qu'il y a un moyen pour imposer l'impression ?


    Il faut aussi que je vois comment lancer une macro depuis cette partie de code car la macro de purge se fait tres bien et simplement par une requete de suppression de données nominatives et de remplacement par des données du type "purgé" pour les champs texte et "0000000000" pour les champs numériques...

    Je test le lancement de macro pour le moment ...

  15. #15
    Membre du Club
    Je croyais me simplifier la vien en lancant une requete au lieu d'une macro, mais a priori il me manque un argument....

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenQuery (Requête Purge2)


    Car là, au lieu de faire appel a la date, il me propose de supprimer tous mes enregistrement

    Je n'ai pas trouvé l'argumentaire qui correspondait au code de l'envoie de l'etat

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenReport "Etat des projets", acViewPreview, , "cdbl([Date])=" & CDbl(dateselection)

  16. #16
    Membre émérite
    Bonjour.

    Pour imprimer un état directement la syntaxe est

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    DoCmd.OpenReport "Etat des projets", acViewNormal, , "cdbl([Date])=" & CDbl(dateselection)


    Pierre

    PS ; utiliser l'aide F1 dans l'éditeur de code, cela donne de précieux renseignements

  17. #17
    Membre du Club
    Citation Envoyé par pier.antoine Voir le message
    Bonjour.

    Pour imprimer un état directement la syntaxe est

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    DoCmd.OpenReport "Etat des projets", acViewNormal, , "cdbl([Date])=" & CDbl(dateselection)


    Pierre

    PS ; utiliser l'aide F1 dans l'éditeur de code, cela donne de précieux renseignements



    Bonjour

    Oui pour imprimer un etat, quelqu'un m'avait fort aimablement dépanné (je n'aurai pas trouvé seul... )

    Mais maintenant il s'agit de lancer une requete....et je ne trouve pas comment inclure le meme argument de date...

  18. #18
    Expert confirmé
    si tu utilises la fonction suivante
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function memorise(Optional x As Variant) As Variant
    Static y As Variant
    If Not IsMissing(x) Then y = x
    memorise = y
    End Function


    il te suffit à la première requête d'entrer

    select memorise(ladate paramètre entré par l'utilisateur)

    les requêtes suivantes utiliseront memorise() sans paramètre
    Elle est pas belle la vie ?

  19. #19
    Membre du Club
    il doit me manquer quelque chose, le debugger me demande un "case"....

  20. #20
    Rédacteur/Modérateur

    bizarre !

    Peux-tu poster ton code ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie