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 :

Time-out sur Application


Sujet :

Macros et VBA Excel

  1. #21
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    il faut stopper la tache yaTestActivite , ou ne pas la lancer

    rajoute une variable globale :
    yaStoppe ce limite alors a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub yaStoppe()
      yaClose = True
    End Sub
    et au tou début de test activité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     If yaClose Then
       ThisWorkbook.Close true
       Exit Sub
     End If

  2. #22
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    le mieux est effectivement de la stopper

  3. #23
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Citation Envoyé par babybell Voir le message
    le mieux est effectivement de la stopper
    tu as effectué les derniéres modifications proposés ..? j'ai utilisé la 2° solution, lorsque je veux stopper je monte un flag (yaClose) , et au prochain appel de yaTestConnection close.

    tu dis quoi ..

  4. #24
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Bonsoir

    J'essaierai la semaine prochaine.
    "yaTestConnection", tu le mets où ?

  5. #25
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    C'est Sub yaTestActivite() qu'il faut modifier. ( désolé pour le connection )

  6. #26
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Bon Week end

  7. #27
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Bonjour

    Pour résumer, si j'ai bien compri, le code devient :

    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
    Dim yaClose As Boolean
    Private Declare Function GetLastInputInfo Lib "user32.dll" (ByRef plii As LASTINPUTINFO) As Long
    Private Type LASTINPUTINFO
     cbSize As Long
     dwTime As Long
    End Type
    '
    ' Procedure yaTestActivité .., à appeller au sur
    'avec ThisWorkBook_open, ensuite elle s'appelle" toutes les secondes pour controler l'activité
    Sub yaTestActivite()
     If yaClose Then
       ThisWorkbook.Close True
       Exit Sub
     End If
     Dim yaLastInput As LASTINPUTINFO
     Static yaMemoLastInput As Long
      yaLastInput.cbSize = Len(yaLastInput)
     If GetLastInputInfo(yaLastInput) <> 0 Then
        If yaMemoLastInput <> yaLastInput.dwTime Then
            yaMemoLastInput = yaLastInput.dwTime 'Memorise "le moment" de la derniére activité.
            yaContinue 'Le moment de la derniére activité à évoluer on continue.
         End If
     End If
     Application.OnTime Now + TimeSerial(0, 0, 1), "yaTestActivite" 'Test activité toutes les 10s
    End Sub
    Sub yaStoppe()
      yaClose = True
    End Sub
    '
    ' yaContinue doit être appellé au moins toutes les 30s sinon
    ' elle appelle la procédure yaStoppe..
    '
    '
        Sub yaContinue()
         Static yaLastDate As Date 'Variable statique permettant d'effacer la tache planifiée..
         If yaLastDate <> 0 Then
           ' Efface la date planifiée ..
           On Error Resume Next
            Application.OnTime EarliestTime:=yaLastDate, _
            Procedure:="yaStoppe", Schedule:=False
         End If
          'Calcul prochaine date dans 1 minutes
          yaLastDate = Now + TimeSerial(0, 0, 60)
          Application.OnTime yaLastDate, "yaStoppe" 'Appel procédure fin application
     
        End Sub
    C'est bien cela ?

  8. #28
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Citation Envoyé par babybell Voir le message
    C'est bien cela ?
    oui , alors tu dis quoi ...c'est ok?

  9. #29
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Ca ne fonctionne toujours pas. Quand je quitte la base incidents, pour voir, avec le pas à pas, j'ai toujours le même message d'erreur, et lorsque je charge plusieurs appli excel, quand je quitte la base, elle se relance automatiquement.

  10. #30
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Bonsoir,

    Il te faut terminer tes OnTime sur l'événement thisWorkbook.close..

    mémorise pour chacune des 2 commandes Ontime la derniére date d'exécution demandé , puis sur le .Close exécute les 2 OnTime... avec Sheduled = false..

    pour info .voir la façon dont testActivité termine le précédent Ontime ...

  11. #31
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Je suis désolé, mais là je n'arrive pas à suivre, cela devient trop compliqué pour moi pour l'instant. Je ne suis pas assez chevronné en VBA.
    Merci quand même pour ton aide, je vais essayer de bidouiller tes codes.
    Bonne soirée

  12. #32
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    un peu de bidouille alors :


    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
    Public yaLastDate As Date 'Variable  permettant d'effacer la tache planifiée..
    Public yaLastContinue As Date 'Variable permettant d'effacer la tache planifiée..
    Dim yaClose As Boolean
    Private Declare Function GetLastInputInfo Lib "user32.dll" (ByRef plii As LASTINPUTINFO) As Long
    Private Type LASTINPUTINFO
     cbSize As Long
     dwTime As Long
    End Type
    '
    ' Procedure yaTestActivité .., à appeller au sur
    'avec ThisWorkBook_open, ensuite elle s'appelle" toutes les secondes pour controler l'activité
    Sub yaTestActivite()
     Debug.Print Now & " yaTestActivité"
     Dim yaLastInput As LASTINPUTINFO
     Static yaMemoLastInput As Long
      yaLastInput.cbSize = Len(yaLastInput)
     If GetLastInputInfo(yaLastInput) <> 0 Then
        If yaMemoLastInput <> yaLastInput.dwTime Then
            yaMemoLastInput = yaLastInput.dwTime 'Memorise "le moment" de la derniére activité.
            yaContinue 'Le moment de la derniére activité à évoluer on continue.
         End If
     End If
     yaLastContinue = Now + TimeSerial(0, 0, 10)
     Application.OnTime yaLastContinue, "yaTestActivite"  'Test activité toutes les 10s
    End Sub
    Sub yaStoppe()
      ThisWorkbook.Close True
    End Sub
    '
    ' yaContinue doit être appellé au moins toutes les 30s sinon
    ' elle appelle la procédure yaStoppe..
    '
    '
        Sub yaContinue()
         Debug.Print Now & "--------> yaContinue"
         If yaLastDate <> 0 Then
           ' Efface la date planifiée ..
           On Error Resume Next
            Application.OnTime EarliestTime:=yaLastDate, _
            Procedure:="yaStoppe", Schedule:=False
         End If
          'Calcul prochaine date dans 1 minutes
          yaLastDate = Now + TimeSerial(0, 0, 30)
          Application.OnTime yaLastDate, "yaStoppe" 'Appel procédure fin application
     
        End Sub

    dans ThisWorkBook :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
           On Error Resume Next
            Application.OnTime EarliestTime:=yaLastDate, _
            Procedure:="yaStoppe", Schedule:=False
            Application.OnTime yaLastContinue, "yaTestActivite", False 'Fin tache
     
    End Sub
     
    Private Sub Workbook_Open()
     yaTestActivite
    End Sub
    je suis pas sur que l'on soit au bout , c'est pas une opération courante, il faut tester .

  13. #33
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Bonjour

    Merci, je vois le cheminement.
    Une question suis-je obligé de mettre dans "ThisWorkBook "ce que tu m'indiques.
    Ma question vient du fait que le bouton que j'utilise pour sortir de ma base fait appel à un code qui fait certaines manips(des controles) avant de clore la base par un code que j'ai déjà dans this "worbook beforeclose"; et c'est justement quand je clique sur le bouton de sortie pour mes contrôles que ça se plante; je n'arrive même pas à this "workbook beforeclose".
    D'où ma question première, suis-je obligé de mettre dans "this workbook beforeclose" le code que tu m'as indiqué ?

  14. #34
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Merci, mais la méthode de JackOuYA me va très bien, ça marche. Merci aussi à ucfoutu, mais étant sur un réseau, Excel n'étant pas directement sur mon poste, et ayant un système de sécurité où je ne peux rien écrire dans la base de registre où n'importe où ailleurs, ta méthode ne pourra pas fonctionner pour moi et mes collègues.
    Merci encore

  15. #35
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Bonsoir à tous

    Je pensais avoir trouvé la solution avec les les aides que j'ai eu, mais il n'y a rien à faire.
    Lorsque je n'ai que ma base d'ouverte, que ce soit la fermeture automatique ou manuelle, cela fonctionne impeccablement.
    Par contre, aussitôt que j'ai au moins 2 applis ouvertes en même temps, que ce soit en fermeture auto ou manuelle, ma base se relance toute seule à chaque fois, après s'être fermée.
    La seule manière d'en sortir est de faire , ce que je ne veux pas.
    Merci de me venir en aide

  16. #36
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    bonsoir,

    Tu dois avoir un probléme sur la déplanification des tâches planifiées :

    soit tu n'exécute pas ces 2 lignes avant de fermer ton classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Application.OnTime EarliestTime:=yaLastDate, _
            Procedure:="yaStoppe", Schedule:=False
            Application.OnTime yaLastContinue, "yaTestActivite", False 'Fin tache
    soit tes varaibles yaLastDate et yaLastContinue ne sont pas bien renseignée à ce moment la.

    as tu rajouté la ligne "Option explicit" en haut de toutes tes feuilles de codes ?

  17. #37
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Non, je ne l'avais mis que dans le module de la sortie automatique

  18. #38
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Citation Envoyé par babybell Voir le message
    Non, je ne l'avais mis que dans le module de la sortie automatique
    rajoute le pour être sur de ne pas avoir un probléme sur un nom de variable.

  19. #39
    Membre actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    je l'ai fait, cela ne change rien.
    Quand le code est utilisé seul, cela fonctionne, aussi bien en sortie auto que manuelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim classeur As Excel.Workbook
    For Each classeur In Workbooks
    If classeur.Name <> "base.xls" Then
    Exit For
    End If
    GoTo fin
    Next classeur
    Windows("base.xls").Activate
    ThisWorkbook.Close True
    fin:
    ThisWorkbook.Close True
    Application.Quit
    .
    Par contre, lorsque j'utilise n'importe quel autre classeur, même vierge, le code se relance tout seul après la fermeture.

  20. #40
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Citation Envoyé par babybell Voir le message
    je l'ai fait, cela ne change rien.
    Quand le code est utilisé seul, cela fonctionne, aussi bien en sortie auto que manuelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim classeur As Excel.Workbook
    For Each classeur In Workbooks
    If classeur.Name <> "base.xls" Then
    Exit For
    End If
    GoTo fin
    Next classeur
    Windows("base.xls").Activate
    ThisWorkbook.Close True
    fin:
    ThisWorkbook.Close True
    Application.Quit
    .
    Par contre, lorsque j'utilise n'importe quel autre classeur, même vierge, le code se relance tout seul après la fermeture.
    il sert à quoi ce code ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Time out sur webservice
    Par sevyc64 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 29/06/2009, 17h05
  2. Time out sur connexion à un Socket
    Par melleb dans le forum C#
    Réponses: 11
    Dernier message: 26/05/2008, 11h22
  3. [BCA]Time out sur Oracle
    Par jpclabaux dans le forum Administration-Migration
    Réponses: 5
    Dernier message: 17/10/2007, 15h49
  4. [JNI] Time out sur méthode native
    Par pierre2006 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 17/11/2006, 11h44
  5. SQL Server Time out sur Access
    Par Ronin-MK dans le forum Access
    Réponses: 2
    Dernier message: 14/06/2006, 20h42

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