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

Macros et VBA Excel Discussion :

Détails sur Application.OnTime


Sujet :

Macros et VBA Excel

  1. #1
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut Détails sur Application.OnTime
    Bonjour à tous,

    J'ai une petite question relative à l'utilisation de Application.OnTime :

    • J'aimerais savoir s'il est possible de récupérer des informations sur les macros en attentent de lancement après l'utilisation de Application.OnTime?
      Information basique comme les noms des procédures et les heures de lancement prévues.


    Merci d'avance

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Re bonjour tout le monde,

    J'ai encore deux petites questions pour vous :

    • Après l'utilisation de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnTime Heure1, "Test"
    Si je veux annuler le lancement de la procédure Test a l'heure Heure1, je vais utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnTime Heure2, "Test", ,False
    Faut-il que Heure1 et Heure2 soit exactement identiques ? (il me semble que oui mais je voudrais confirmation ^^)


    • J'ai trouvé dans Excel la bibliothèque TaskScheduler, pensez-vous qu'elle pourrait permettre d'explorer les macros planifiées via Application.OnTime ou fais-je fausse piste ? Si possible des infos sur l'utilisation de cette bibliothèque me seraient très utiles.



    Encore merci d'avance

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    re
    bonjour Antony
    pour la 2 ° il me semble que l'heure devrait être la le même mais tu met une sub vide
    du moins je crois je sais pas si on peut supprimer un ontime programmé alors on peut peut-être reprogrammer la sub de la demande

    exemple
    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
    sub tache()
    application.ontime heure1,test
    end sub 
     
    sub suptache()
    application.ontime heure1,annule
    end sub 
     
    sub test()
    balablablabla
    end sub 
     
    sub annule
    'rien ici
    end sub
    après pour shtasksheduler je suis intéressé si il y a cela dans excel je voudrais bien savoir ou je bricole justement en ce moment sur les taches planifiés Windows avec excel pour sebphyto
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Patrick

    Merci pour la réponse.

    Avec ton explication, ça voudrait dire qu'on ne peut pas planifier deux tâches différentes à la même. Cela s'emblerais étonnant, non ?


    Apres quelques tests, je crois comprendre qu'une tache planifier via .OnTime est identifier par le nom de la Proc ET l'heure.


    Pour ce qui est de la référence TaskScheduler, je suis sur Office 2010 et elle se nomme TaskScheduler 1.1 Type Library mais même une fois activée, je dois avouer que je ne sais pas trop comment déclarer les variables et encore moins les affecter pour ensuite explorer ces dernières.




    Je te fais confiance pour mener l'enquête
    Si tu sais me faire avancer dans mes questionnements on va vraiment de faire une rubrique dédiée


    Peux-tu m'indiquer la discussion avec sebphyto dont tu fais référence ?

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    non en fait dans mon exemple je reonrient latache vers une sub vide ce qui a pour effet d'annuler la premiere et rien faire
    maintenant pour ton object TaskScheduler 1.1 Type Library
    comme je suis un récalcitrantnt du earlybinding

    voila une demo avec cet object en LATEBINDING que j'ai adapté a vba et traduite en Français

    cet exemple d'éclanche Notepad exe 1 minute après que tu est lancer l'inscription dans la liste des tache

    je tiens a te remercier!!!! car jusqu'à présent je le faisait avec un CMD dynamique pour lancer la tache malheureusement pour reprogrammer la tache j'avais une action a faire alors que les paramètre était en invisibles

    visiblement en essayant de résoudre les problèmes des autres je résout les miens

    hier c'était pour OLIV+ avec son object update et aujourd'hui c'est toi avec les taches planifiées


    donc cet exemple fait la même chose sauf que je n'ai pas besoins de taper O et entrer pour confirmer que je veux modifier la tache
    teste ce code attend une minute et vois la lumière
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    '------------------------------------------------------------------
    ' Cet exemple programme une tâche pour lancer Notepad.exe 60 secondes
    ' à partir du moment où la tâche est enregistrée.
    '------------------------------------------------------------------
    ' Une constante qui spécifie un déclencheur basé sur le temps.
    Const TriggerTypeTime = 1
    ' Une constante qui spécifie une action exécutable.
    Const ActionTypeExec = 0
    Sub test()
    '********************************************************
    ' Créer l'objet TaskService.
    Set service = CreateObject("Schedule.Service")
    Call service.Connect
    '********************************************************
    ' Obtenez un dossier pour créer une définition de tâche.
    Dim rootFolder
    Set rootFolder = service.GetFolder("\")
    ' La variable tâche Définition est l'objet de la définition des tâches.
    Dim taskDefinition
    ' Le paramètre flags est 0 car il est pas pris en charge.
    Set taskDefinition = service.NewTask(0)
    '********************************************************
    ' Définir des informations sur la tâche.
    ' Définir les informations d'enregistrement de la tâche par
    ' la création de la Registration Info objet.
    Dim regInfo
    Set regInfo = taskDefinition.RegistrationInfo
    regInfo.Description = "Start notepad at a certain time"
    regInfo.Author = "Author Name"
    '********************************************************
    ' Définir l'entité pour la tâche
    Dim principal
    Set principal = taskDefinition.principal
    ' Définissez le type de connexion à l'ouverture de session interactive
    principal.LogonType = 3
     
    ' Réglez la tâche d'info réglage pour le Planificateur de tâches par
    ' création d'un objet Paramètres des tâches.
    Dim settings
    Set settings = taskDefinition.settings
    settings.Enabled = True
    settings.StartWhenAvailable = True
    settings.Hidden = False
    '********************************************************
    ' Créer un déclencheur basé sur le temps.
    Dim triggers
    Set triggers = taskDefinition.triggers
    Dim trigger
    Set trigger = triggers.Create(TriggerTypeTime)
    ' Déclencher variables qui définissent lorsque le déclencheur est actif.
    Dim startTime, endTime
    Dim time
    time = DateAdd("s", 60, Now)  'start time = 30 seconds from now
    startTime = XmlTime(time)
    time = DateAdd("n", 5, Now) 'end time = 5 minutes from now
    endTime = XmlTime(time)
    MsgBox "startTime :" & startTime & vbCrLf & "endTime :" & endTime
     
    trigger.StartBoundary = startTime
    trigger.EndBoundary = endTime
    trigger.ExecutionTimeLimit = "PT5M"    'Five minutes
    trigger.ID = "TimeTriggerId"
    trigger.Enabled = True
    '***********************************************************
    ' Créer l'action pour la tâche à exécuter ..
    ' Ajouter une action à la tâche à exécuter notepad.exe.
    Dim Action
    Set Action = taskDefinition.Actions.Create(ActionTypeExec)
    Action.Path = "C:\Windows\System32\notepad.exe"
    MsgBox "définition tâche créée . enregistrement de la tâche ..."
    '***********************************************************
    ' Inscrire (créer) la tâche.
    Call rootFolder.RegisterTaskDefinition( _
        "Test TimeTrigger", taskDefinition, 6, , , 3)
    MsgBox "Tâche programée"
    End Sub
    '------------------------------------------------------------------
    ' Permet d'obtenir le temps de la détente
    'startBoundary et à la fin des limites.
    ' Retourne le temps dans le format correct:
    ' YYYY-MM-DDTHH:MM:SS.
    '------------------------------------------------------------------
    Function XmlTime(t)
        Dim cSecond, cMinute, CHour, cDay, cMonth, cYear
        Dim tTime, tDate
        cSecond = "0" & Second(t)
        cMinute = "0" & Minute(t)
        CHour = "0" & Hour(t)
        cDay = "0" & Day(t)
        cMonth = "0" & Month(t)
        cYear = Year(t)
        tTime = Right(CHour, 2) & ":" & Right(cMinute, 2) & _
            ":" & Right(cSecond, 2)
        tDate = cYear & "-" & Right(cMonth, 2) & "-" & Right(cDay, 2)
        XmlTime = tDate & "T" & tTime
    End Function
    tu la vois la lumière
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Re Patrick,

    Merci pour cette démo ! (Tu vas encore croire que je me moque mais cette fois je ne me suis pas fait avoir j'ai tout de suite enlevé Option Explicit :p)


    Je vais essayer de comprendre en détail le fonctionnement.
    J'ai déjà pu voir que cette fois la tâche était bien présente dans le planificateur de tâche Windows. Ce n'était pas le cas avec Application.OnTime.

    Sais tu ou est stockée la tâche a venir avec l'utilisation de .OnTime ?

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    oui bon ben ses raisins sont trop vert pour un goujat comme dit chez nous hein!!!

    c'es une demo que j'ai fait en même temps que je l'apprends donc si il manque quelle déclaration V tu va pas m'en vouloir hein!!!!

    après le ontime je sais pas je vais chercher et je trouverais bien entendu hein!!!!! avec ou sans variables explicites
    Nom : 6.gif
Affichages : 2287
Taille : 11,8 Ko je vais, l'envoyer chercher il s'appelle polux
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bien sûr que non que je ne t'en veux pas ! Bien au contraire, la démo est top.

    On paramètre la tâche et ensuite on l'envoie dans le Planificateur de tâches avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Call rootFolder.RegisterTaskDefinition( _
        "Test TimeTrigger", taskDefinition, 6, , , 3)
    donc elle est créée ou mise à jour. C'est ça ? (j'espère sinon je vais avoir l'air c** et je pourrais plus me moquer de mon maitre :p)

    Je vais chercher comment faire pour lancer une macro d'un fichier.
    Il faut surement modifier Const ActionTypeExec = 0 et Action.Path = "C:\Windows\System32\notepad.exe" reste à déterminer comment.


    Encore une question, tu utilises le LATEBINDING. Comment fais-tu pour connaitre les propriétés, méthodes ou constante relative à tes objets ? Ou plutôt comment un simple Padawan peut-il s'y retrouver sans l'auto-complétude ?

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    donc elle est créée ou mise à jour. C'est ça ? (j'espère sinon je vais avoir l'air c** et je pourrais plus me moquer de mon maitre :p)
    reponse = oui c'est ca qui est genial
    Je vais chercher comment faire pour lancer une macro d'un fichier.
    Il faut surement modifier Const ActionTypeExec = 0 et Action.Path = "C:\Windows\System32\notepad.exe" reste à déterminer comment.
    réponse = non et oui moi je m'en sert pour declancher un ".vbs" donc a mon avis la 1° constante décrit l'action et non ce qui doit être exécuté contrairement a ce que l'on pourrais en déduire
    tu d'ailleur créer un vbs dynamique et le programmer du genre dans le vbs

    set app=createobject ("excel.application")
    app.workbooks.open (lechemin)
    et run la macro
    je me souviens plus de la syntaxe mais on est pas loin
    Encore une question, tu utilises le LATEBINDING. Comment fais-tu pour connaitre les propriétés, méthodes ou constante relative à tes objets ? Ou plutôt comment un simple Padawan peut-il s'y retrouver sans l'auto-complétude ?
    reponse
    un travail de recherche sur divers forum et MSDN c'est intense !!!!! et oui on s'y retrouve

    et dans ce cas présent moi aussi je redeviens un padawan je connaissais pas cet object
    il faudrait que je liste toutes les références dispos dans vba et que je fasse une recherche sur tout ce que je connais pas je suis certain de découvrir des surprises qui pourrait me/nous simplifier la vie
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Patrick concernant ton premier post maintenant que c'est un peu plus clair dans ma tête, je t'invite à tester le code ci-dessous :

    Dans un module : 3 procédures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    '!!!!!!!!!!!!!!
    Option Explicit
    '!!!!!!!!!!!!!!
    Const PasTaper = "Désole je ne sais pas m'en empêcher"
     
    Sub Test1():    Range("A1") = "Test1 à " & Now:    End Sub
    Sub Test2():    Range("A2") = "Test2 à " & Now:    End Sub
    Sub rien():        End Sub
    Ensuite 4 tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub LancerTest1()
        Dim vDate As Date
        Range("A1:A2").ClearContents
            vDate = Now + TimeSerial(0, 0, 5)
            Application.OnTime vDate, "Test1"
            Application.OnTime vDate, "Test2"
    'Les deux macros sont exécutées
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub LancerTest2()
        Dim vDate As Date
        Range("A1:A2").ClearContents
            vDate = Now + TimeSerial(0, 0, 5)
            Application.OnTime vDate, "Test1"
            Application.OnTime vDate, "rien"
    'Test1 est bien exécuté
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub LancerTest3()
        Dim vDate As Date
        Range("A1:A2").ClearContents
            vDate = Now + TimeSerial(0, 0, 5)
            Application.OnTime vDate, "Test1"
            Application.OnTime vDate, "Test2"
            Application.OnTime vDate, "Test1", , False
    'Test2 est bien exécuté mais Test1 est annulé
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub LancerTest4()
        Dim vDate As Date, vDate2 As Date
        Range("A1:A2").ClearContents
            vDate = Now + TimeSerial(0, 0, 5)
            vDate2 = vDate + TimeSerial(0, 0, 1)
            Application.OnTime vDate, "Test1"
            Application.OnTime vDate, "Test1", , False
            Application.OnTime vDate, "Test2"
            Application.OnTime vDate2, "Test2", , False
    'Test1 est annulé, Test2 est planifier et Debug sur la ligne Application.OnTime vDate2, "Test2", , False.
    'surement parce que la planification de Test2 a l'heure vDate2 n'existe pas.
    End Sub

    Je pense qu'on peut en conclure que les macros planifiées via App.OnTime sont identifiées par le nom de la proc et la date de lancement prévue.

    Mais j’avais pu lire dans mes recherches les 3 choses suivantes :
    • La méthode événementielle OnTime permet de disposer d'une gestion multitâche par appel de fonctions depuis le système d'exploitation.
    • La gestion de l'événement est externe à l'application Excel
    • La tâche s'exécute même en cas de fermeture du classeur (réouverture du classeur sous réserve qu'une instance d'Excel soit ouverte)

    Lien : http://www-lagis.univ-lille1.fr/~bon...ents_Excel.pdf

    Mais savoir avec quoi communique Excel est un peu hors de mes compétences. J’espère que Polux est en forme

  11. #11
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    donc elle est créée ou mise à jour. C'est ça ? (j'espère sinon je vais avoir l'air c** et je pourrais plus me moquer de mon maitre :p)
    Citation Envoyé par patricktoulon Voir le message
    reponse = oui c'est ca qui est genial
    Cool donc je ne suis pas si bête ^^

    Citation Envoyé par antonysansh Voir le message
    Je vais chercher comment faire pour lancer une macro d'un fichier.
    Il faut surement modifier Const ActionTypeExec = 0 et Action.Path = "C:\Windows\System32\notepad.exe" reste à déterminer comment.
    Citation Envoyé par patricktoulon Voir le message
    réponse = non et oui moi je m'en sert pour declancher un ".vbs" donc a mon avis la 1° constante décrit l'action et non ce qui doit être exécuté contrairement a ce que l'on pourrais en déduire
    tu d'ailleur créer un vbs dynamique et le programmer du genre dans le vbs
    Je vais me pencher sur cette solution, j’avais vu dans mes recherches des choses de ce genre. Et il faut bien apprendre un jour.

    Citation Envoyé par antonysansh Voir le message
    Encore une question, tu utilises le LATEBINDING. Comment fais-tu pour connaitre les propriétés, méthodes ou constante relative à tes objets ? Ou plutôt comment un simple Padawan peut-il s'y retrouver sans l'auto-complétude ?
    Citation Envoyé par patricktoulon Voir le message
    reponse
    un travail de recherche sur divers forum et MSDN c'est intense !!!!! et oui on s'y retrouve

    et dans ce cas présent moi aussi je redeviens un padawan je connaissais pas cet object
    il faudrait que je liste toutes les références dispos dans vba et que je fasse une recherche sur tout ce que je connais pas je suis certain de découvrir des surprises qui pourrait me/nous simplifier la vie
    La différence entre toi et moi c’est que c’est plus facile et plus rapide quand on sait un minimum ce qu’on cherche. T'es trop fort

    Encore Merci !!!

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    oulah!!! tu a déterré des chose intéressante
    l'application se déclencherait hors excel ca c'est intéressant
    je vais potasser
    en plus je crois que tu viens de me donner la solution pour une variable avec timeserial je connaissais dateserial mais pas celui la
    et je suis en train de faire une boucle d'iteration d'heure minute et je n'arrive pas a trouver comment arréter la boucle j'ai essayer plein de truc
    je reviens

    bon apres analyse de tes reponse
    • La méthode événementielle OnTime permet de disposer d'une gestion multitâche par appel de fonctions depuis le système d'exploitation.
    • La gestion de l'événement est externe à l'application Excel
    • La tâche s'exécute même en cas de fermeture du classeur (réouverture du classeur sous réserve qu'une instance d'Excel soit ouverte)
    ligne 1 a vérifier et trouver comment
    ligne 2 ca j'en suis moins sur puisque c'est application.ontime
    ligne3 cette ligne confirme ma question sur la 2° c'est donc bien gerer par l'application excel mais parcontre on est pas obligé de laisser le classeur concerné ouvert
    ce qui implicite que dans la macro le thisworkbook et le sheets ainsi que tout les parametres soient renseignés
    mais c'est interessant tout de meme

    je regarde maintenant ton code et reviens
    tiens puisque tu es la file moi un coup de main
    dans cette macro je veux faire un array en string des heure de 06.30 a une heure qui est an cellules (1,2) soit 22:57:00
    je cherche a avoir un string comme ca:
    09:30|10:00|10:30|11:00|11:30|...................22:57
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test2()
    dep = "01/01/2016 09:30:00"
    endTime = CDate("01/01/2016 " & Cells(1, 2).Text)
    Do
    i = i + 1
    stime = DateAdd("s", 60 * i * 30, dep)
    texte = texte & Format(stime, "hh:nn") & "|"
    Loop Until i = stime > endTime
    Debug.Print texte
    End Sub
    si tu a une idée pour arrêter la boucle je suis preneur en l'état elle ne s'arrête plus ....ne fait l'erreur de la lancer j'dis ca moi hein!!!!!

    bon j'ai pigé pour mon soucis c'est bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test4()
    stoptime = TimeSerial(Split(Cells(1, 2), ":")(0), Split(Cells(1, 2), ":")(1), Split(Cells(1, 2), ":")(2))
    Do
    i = i + 1
    texte = texte & TimeSerial(9, 0 + 30 * i, 0) & "|"
    Loop Until TimeSerial(9, 30 + 30 * i, 0) > stoptime
    texte = texte & stoptime
    Debug.Print texte
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #13
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Re Patrick,

    Désolé, je sors de réunion

    Pour ton code même si trop tard, j'aurais fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test4()
        stoptime = TimeValue(Format(Cells(1, 2), "hh:mm:ss"))
            While TimeSerial(9, 30 + 30 * i, 0) < stoptime
                i = i + 1
                texte = texte & TimeSerial(9, 0 + 30 * i, 0) & "|"
            Wend
        texte = texte & stoptime
        Debug.? texte
    End Sub

    Pour ces 3 lignes :
    •La méthode événementielle OnTime permet de disposer d'une gestion multitâche par appel de fonctions depuis le système d'exploitation.
    •La gestion de l'événement est externe à l'application Excel
    •La tâche s'exécute même en cas de fermeture du classeur (réouverture du classeur sous réserve qu'une instance d'Excel soit ouverte)
    Je trouve comme toi une légère incohérence entre externe à l'application Excel et sous réserve qu'une instance d'Excel soit ouverte
    Encore une fois c'est peu trop loin de mes compétence mais j'ai comme hypothèse que App.OnTime communique des Events à exécuter au système d'exploitation mais que la fermeture de l'instance Excel coupe le canal entre Excel et le Système d'exploitation. (je ne sais pas se qu'il se passe réellement lors d'un App.Quit)

    Pour le coté multi-tache, c'est automatique, regarde mon Test1.

    Enfin La gestion de l'événement est externe à l'application Excel admettons que ce soit vrai, App.OnTime Date, "Proc", ,False désactive bien l'exécution de la Procédure Proc. Donc externe mais avec un canal de communication entre les deux. Ils doit bien être exploitable ce lien ! Mais ou ? la documentation est compliqué a ce sujet.


    EDIT :

    J'avais mal lu :
    ligne3 cette ligne confirme ma question sur la 2° c'est donc bien gerer par l'application excel mais parcontre on est pas obligé de laisser le classeur concerné ouvert
    ce qui implicite que dans la macro le thisworkbook et le sheets ainsi que tout les parametres soient renseignés
    mais c'est interessant tout de meme
    Il ne faut pas comprendre que le classeur doit resté ouvert mais que l'instance qui a ouvert le classeur reste ouverte.

    Exemple :
    J'ouvre mon classeur (1 seul classeur ouvert), je lance mon App.OnTime qui fait un msgbox, je fais Ctrl + w puis Ctrl + n le msgbox sera affiché.
    Il faut seulement que le classeur existe physiquement pour que la macro qu'il contient existe bien et puisse être lancé.

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    oui donc si c'est la meme instance alors c'est walooh!!!!
    car la on tombe dans l'excès de "xel"
    en effet si on doit gérer en externe l'instance ce qui est impossible a proprement parler si c'est pas un exécutant externe du type vbs ou autre script de ligne de commande qui la créé
    il faut donc que le classeur reste ouvert si que lui dans l'instance tu vois ce que je veux dire
    alors si c'est un truc qui doit se mettre a jour toutes les minutes je veux bien et encore il y a d'autre moyen mais si c'est un truc qui doit se mettre a jour tout les heures ou plus imagine un classeur ou encore une instance qui reste ouverte pour ca

    donc conclusion je préfère bien manipuler l'object pour les taches planifiée qui peut permettre pendant les temps morts de n'avoir rien d'ouvert je dis bien rien!!!!
    wagadougou!!!!!
    je te fait un exemple si tu veux pour mieux comprendre

    re

    bon apres longue recherche ca confirme bien ce que je pensait
    La méthode événementielle OnTime permet de disposer d'une gestion multitâche par appel de fonctions depuis le système d'exploitation
    oui en faisant ce que je dis
    au lieu d'appeler test on apelle un script externe
    ou
    dans la sub test appeler le script externe et le code de la sub test mis dans le script externe

    tu m'avais mis le doute


    il est impossible physiquement pour vba de faire du multitâche

    alors on peut raisonnablement convenir que garder une instance ou le fichier ouvert pour faire ce que font les taches externes n'est pas rentable en terme d'utilisation d'UC

    d'autant plus que pour preuve si tu met l'heure réelle de fin de macro dans les cellules tu verra qu'elle te renvoie pas la même différence de temps entre elles
    bon dans ton exemple les macros sont simples mais en cas de traitement important la on sentirais vraiment la différence
    je te laisse mettre tes espions horaires dans tes sub et vérifier par toi même
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Salut à vous deux,

    Un petit coucou en passant, et un clin d'œil à Patrick car visiblement mon post ici, relève de vos compétences et creuse vos méninges...et loin des miennes pour le moment....
    Seb

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    t'inquiet seb j'ai fini la base déjà de prog et en plus plus de fichier CMD laisser corriger un petit détail que je ne comprends pas et après je te donne la base bien évidement sur ton post

    il es perdu le pauvre seb sans moi hahahahahaha
    je veille
    Nom : 9.gif
Affichages : 2232
Taille : 11,0 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour vous deux,

    Seb concernant ton post c'est pour moi aussi un peu compliqué, je comprends mais serais incapable d'écrire le code.
    Mais j'ai quand même contribué en montrant du doigt une ou deux briques que Patrick n'avait pas vu pour construire sa maison.

    Patrick merci d'avoir passé du temps pour me répondre et m'éclairer sur des choses un peu flou. Je vais faire confiance à ton avis d'expert.
    J'abandonne l'idée d'explorer la pile d'appels définie via App.OnTime car c'est "logiquement impossible" étant donnée notre enquête commune

    Je vais plutôt utiliser le TaskScheduler en m'inspirant de ta démo et voir pour me lancer dans l'écriture de VBS qui sont à coups extrêmement utile.

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

Discussions similaires

  1. Application.OnTime qui bloque avec du code validé sur d'autres topic
    Par tmlpqsdpmdlc dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/04/2015, 14h11
  2. Windows 8 : des détails sur la galerie d'applications révélés
    Par Hinault Romaric dans le forum Windows 8
    Réponses: 297
    Dernier message: 25/07/2012, 18h16
  3. [VBA-E] Comment annuler un appel planifié avec Application.OnTime ?
    Par Efpoint dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/05/2006, 14h24
  4. Conseils sur Application client/serveur
    Par MICHELBORLAND dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/05/2006, 15h58
  5. [QuickReport] Entete de groupe + détail sur la même page
    Par portu dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/06/2005, 10h15

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