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 :

exécuter une macro 1 seule fois par semaine ?


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut exécuter une macro 1 seule fois par semaine ?
    Bonjour,

    J'ai une marco qui met à jour ma base de donnée, avec en 1ère ligne l' action : "exécuter application" qui lance la mise à jour de mes fichiers sources et me les placent dans un fichier défini...
    ensuite j'ai les requêtes qui vide les tables puis celles des qui importent les fichiers...

    J'aimerais savoir comment faire en sorte que la 1ère action ne puisse que s'éxécuter une seul fois dans la semaine ?
    sachant que l'éxécution de l'action fait "rouler" les fichiers... cad que ce sont des données hebdo et je garde 4 semaines d'historique et donc à chaque exécution de l'action les fichiers se décalent...c'est en cela que plusieurs éxécutions sont gênantes dans le sens ou cela duplique les fichiers...

    je suis pas sur d'avoir été clair mais si quelqu'un à une piste pour faire en sorte que la 1ère ligne de ma macro de mise à jour ne puisse s'éxécuter qu'une seule fois ?

    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 639
    Points : 34 361
    Points
    34 361
    Par défaut
    bonjour,

    tu peux stocker des valeurs dans des fichiers txt fixes, dans lesquels tu indiques la dernière date d'exécution.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    merci pour la piste Jpcheck mais je ne comprends pas ce que tu veux dire par "stocker des valeurs dans des fichiers txt fixes" ?

    mes extractions me ramènent bien des fichiers txt mais leurs donner des valeurs ??

    si tu peux m'en dire plus merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 639
    Points : 34 361
    Points
    34 361
    Par défaut
    l'idée est de faire 2 fonctions:
    -écrire dans un fichier,
    -lire dans un fichier

    voir les FAQ pour les codes exemples.

    Au final tu fais tourner ton code avec cette logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If CDate(MaFonctionLireMonFichier("C:\temp\monfichiertxt.txt"))>(Now()+7) Then
    'manipulation
    MaFonctionEcrireMonFichier("C:\temp\monfichiertxt.txt",Now())
    Else
    Msgbox "Déjà lancé il y a a moins d'une semaine."
    End If

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    ok merci je pense avoir compris le principe...

    je teste tous mes fichiers avant de lancer l'application...

    Si le fichier a été lu il y a plus d'une semaine j'éxécute l"application maj
    sinon Msgbox ;?

    cela revient à mettre une condition à mon action "exécuter l'application" no ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CDate(MaFonctionLireMonFichier
    si la date de lecture du fichier ? mais si quelqu'un l'ouvre entre temps ?

    MaFonctionEcrireMonFichier("C:\temp\monfichiertxt.txt",Now())
    j'éxécute mon script application ?

    En faite je me demandais si il était possible de mettre une condition directement à l'éxécution de l'application ?

    merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 639
    Points : 34 361
    Points
    34 361
    Par défaut
    en fait, la fonction MaFonctionLireMonFichier était plutot pensée comme fonction renvoyant un type String, casté en Date...
    ca n'est pas possible d'allouer une valeur en dynamique, qui soit par la suite gardée une fois l'application fermée. A moins que tu n'alloues manuellement (dans le code) la valeur de la mise à jour, autrement dit que tu stockes "en dur" la date...

  7. #7
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Un moyen peut-être plus simple pour stocker la date, c'est d'utiliser une table. J'ai toujours une table dédiée pour cela, qui ne comporte qu'une seule ligne, avec divers champs (no de version, date de la dernière sauvegarde, etc...).

    Pour le reste, le principe énoncé par jpcheck est bien entendu celui à utiliser.

    Domi2

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    ok merci à vous 2 je vais regardez ça de plus près...

    peut être une table serait en éffet une solution pratique..

    et après ouvrir une requête qui vérifie si la date est > à 7 jours...

    et enfin exécuter l'appli si valeur vrai...

    merci encore

  9. #9
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 87
    Points : 80
    Points
    80
    Par défaut bonjour
    j'ai eu un besoin presque identique il y a quelques temps
    j'ai cree 2 choses:qui se base sur les conseil precedents de jpcheck
    1°) une fonction (DateMaj)qui cherche la date dans une table qui a ete precdemment mise a jour(supposons qu'elle s'appelle :table_de_reference)

    puis j'ai ajouté le code suivant dans un module

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Function fin_de_campagne()
    DoCmd.SetWarnings False
     
    'calcul du jour de semaine:
    js = Weekday(Date)
     
    DerMaj = DateMaj("table_de_reference")
    If Date > DerMaj Then
    'js=(2:lundi,3:mardi...)
    If js = 2 Then
     
    '***************************************
    'liste des actions a faire
    '***************************************
     
     End If
     End If
    fin:
            DoCmd.SetWarnings True
     End Function
     
     
    Public Function DateMaj(PTable As String) As Date
    On Error GoTo err
    Dim DB As DAO.Database
    Dim T As DAO.TableDef
    Set DB = CurrentDb
    Set T = DB.TableDefs(PTable)
    DateMaj = T.LastUpdated
    DateMaj = Format(DateMaj, "dd / mm / yyyy")
    GoTo fin:
    err:
    MsgBox "Impossible d'accéder à la table"
    fin:
    Set DB = Nothing
    Set T = Nothing
    End Function
    2°j'ai créé un macro autoexec
    avec a l'interieur:executer code nom fonction=fin_de_campagne ()

    a toi de mettre les actions a faire

    pour info:cette macro te permet de lancer un processus(action a faire) 1 seule fois par lundi
    a l'ouverture de la base

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Le code donnée pas gillo(94) m’intéresse pour pouvoir faire un envoie de mail tous les mercredi. par contre j'ai essayer mais celui-ci envois les mail en continu.
    Je voudrais donc savoir ce qui doit être mis comme champs dans la dites table "Table_de_reference" pour que cela ne fonctionne que 1 fois le mercredi

    Cordialement

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/12/2009, 12h18
  2. Réponses: 38
    Dernier message: 02/11/2009, 18h20
  3. lu tous les jours mais exécuté une seule fois par mois
    Par sianto dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 17/11/2008, 09h08
  4. [MySQL] N'afficher la page que une seul fois par jour par ip
    Par Nutaak dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/12/2007, 17h38
  5. Réponses: 2
    Dernier message: 04/07/2006, 02h32

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