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. #41
    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 n'ai mis qu'une partie du même code.
    Dans la sortie manuelle, avec un bouton, je teste, quand je sors, si un autre programme est présent. Si oui, enregistrement et sortie simple du code, si non enregistrement et Quit Excel.
    Dans la sortie auto, je teste si un autre programme est présent. Si oui, sortie simple du code, sinon, Quit.

    Mais, même avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Close True
    simplement c'est pareil

  2. #42
    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 n'ai mis qu'une partie du même code.
    Dans la sortie manuelle, avec un bouton, je teste, quand je sors, si un autre programme est présent. Si oui, enregistrement et sortie simple du code, si non enregistrement et Quit Excel.
    Dans la sortie auto, je teste si un autre programme est présent. Si oui, sortie simple du code, sinon, Quit.
    le code que tu nous montre quitte à tous les coups ..!


    je ne vois pas dans ton code ou tu stoppe les procédures planifiées !

  3. #43
    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
    Voici ce que j'ai actuellement dans ma Base et qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    For Each classeur In Workbooks
    If classeur.Name <> "Base des Incidents.xls" Then
    Exit For
    End If
    GoTo Fin
    Next classeur
    Windows("Base des Incidents.xls").Activate
    Sheets("Accueil").Select
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    Fin:
    Sheets("Accueil").Select
    ActiveWorkbook.Save
    Application.Quit
    Je l'ai adapté avec les infos que tu m'avais donné

  4. #44
    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
    Non il ne doit pas marcher ce code ..

    une étiquette ( :fin) n'arrête pas la procédure et les lignes qui suivent sont exécutées.



    pour tester s'il y as plusieurs classeurs ouvert il te suffit de tester la propriété count de workbooks.


    ton adaptation de code ne contient toujours pas le code de fin des procédures planifiées !

  5. #45
    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
    Dans ce code, qui est celui appliqué à mon bouton FIN, ce qui arrête la procédure, ce n'est pas l'étiquette Fin: c'est
    qui enlève ma base une fois sauvegardée et qui laisse les autres applis présentes. En revanche, s'il y a plusieurs applis, c'est l'étiquette Fin: qui rentre en jeu.

    Voici le code que j'utilise pour la procédure planifiée :
    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
    Option Explicit
    Public yaLastDate As Date 'Variable  permettant d'effacer la tache planifiée..
    Public yaLastContinue As Date 'Variable permettant d'effacer la tache planifiée..
    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()
     
     
     
    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()
    Dim classeur As Excel.Workbook
    Application.DisplayAlerts = False
    For Each classeur In Workbooks
    If classeur.Name <> "Base des Incidents.xls" Then
    Exit For
    End If
    GoTo fin
    Next classeur
    Windows("Base des Incidents.xls").Activate
    ActiveWorkbook.Close
    fin:
    Application.Quit
    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 5 minutes
          yaLastDate = Now + TimeSerial(0, 0, 3000)
          Application.OnTime yaLastDate, "yaStoppe" 'Appel procédure fin application
     
        End Sub
    et dans ThisWorbook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Private Sub Workbook_Open()
    yaTestActivite
    End Sub
    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
    Tout cela fonctionne quand il n'y a que ma base. Pas quand j'ai plusieurs applis en même temps.

  6. #46
    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
    tu n'as pas déplacé la déclaration de la variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Static yaLastDate As Date 'Variable statique permettant d'effacer la tache planifiée..
    Cette variable doit être disponible pour toutes tes procédures qui stoppent les actions planifiés.


    pour ton :fin , peu-être que ton thisworkbooks.close met fin à ta procédure avant le end sub, mais j'ai un gros doute et de toutes façon c'est trés laid comme code !

  7. #47
    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
    J'ai constaté qu'en mode pas à pas, cela fonctionne. Quelle est la différence avec l'exécution automatique ?

  8. #48
    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
    J'ai constaté qu'en mode pas à pas, cela fonctionne. Quelle est la différence avec l'exécution automatique ?
    essai d'éviter de partir dans tous les sens si tu n'as pas corrigé la déclaration de variables cela ne doit pas marcher.

  9. #49
    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
    Comme tu me l'as conseillé, j'ai mis le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Static yaLastDate As Date
    disponible pour toutes tes procédures qui stoppent les actions planifiés, mais cela ne change rien.
    Elle y est dans : et dans mon module de fin

  10. #50
    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
    Comme tu me l'as conseillé, j'ai mis le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Static yaLastDate As Date
    disponible pour toutes tes procédures qui stoppent les actions planifiés, mais cela ne change rien.
    Elle y est dans : et dans mon module de fin
    je n'ai pas dis cela , une variable vb ne doit être déclarée qu'une seule fois !

  11. #51
    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
    A force de persévérence, j'ai trouvé ce que je voulais et c'est finalement plus simple.
    Dans ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Option Explicit
    Private Sub Workbook_Open()
    test_timer
    End Sub
    puis 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
    Option Explicit
    Sub test_timer()
    Dim PauseTime, Start
        PauseTime = 60   ' Définit la durée.
        Start = timer    ' Définit l'heure de début.
        Do While timer < Start + PauseTime
            DoEvents    ' Donne le contrôle à d'autres processus.
        Loop
    MsgBox "1 mn d'inactivité"
    Dim classeur As Excel.Workbook
    For Each classeur In Workbooks
    If classeur.Name <> "TEST_OK.xls" Then
    Exit For
    End If
    GoTo Fin
    Next classeur
    Windows("TEST_OK.xls").Activate
    Application.ThisWorkbook.Close False
    Fin:
    Application.Quit
    End Sub
    Sub Fin()
    Dim classeur As Excel.Workbook
    For Each classeur In Workbooks
    If classeur.Name <> "TEST_OK.xls" Then
    Exit For
    End If
    GoTo Fin
    Next classeur
    Windows("TEST_OK.xls").Activate
    Application.ThisWorkbook.Close True
    Fin:
    ActiveWorkbook.Save
    Application.Quit
    End Sub
    Merci encore à toi.

  12. #52
    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
    si c'est cela que tu voulais ta question est mal posée :
    MsgBox "1 mn d'inactivité"
    il n'y as rien dans ton code qui détecte l'inactivité..!!

  13. #53
    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

    Cela fonctionne quand on met le code
    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
    Option Explicit
    Sub test_timer()
    Dim PauseTime, Start
        PauseTime = 60   ' Définit la durée.
        Start = timer    ' Définit l'heure de début.
        Do While timer < Start + PauseTime
            DoEvents    ' Donne le contrôle à d'autres processus.
        Loop
    MsgBox "1 mn d'inactivité"
    Dim classeur As Excel.Workbook
    For Each classeur In Workbooks
    If classeur.Name <> "TEST_OK.xls" Then
    Exit For
    End If
    GoTo Fin
    Next classeur
    Windows("TEST_OK.xls").Activate
    Application.ThisWorkbook.Close False
    Fin:
    Application.Quit
    End Sub
    directement dans une feuille
    et 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
    Sub Fin()
    Dim classeur As Excel.Workbook
    For Each classeur In Workbooks
    If classeur.Name <> "TEST_OK.xls" Then
    Exit For
    End If
    GoTo Fin
    Next classeur
    Windows("TEST_OK.xls").Activate
    Application.ThisWorkbook.Close True
    Fin:
    ActiveWorkbook.Save
    Application.Quit
    End Sub
    pour une fin manuelle

  14. #54
    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 JackOuYA Voir le message
    si c'est cela que tu voulais ta question est mal posée :

    il n'y as rien dans ton code qui détecte l'inactivité..!!

  15. #55
    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
    Effectivement, cela ne répond pas entièrement à ce que je désirais faire, mais malheureusement, je n'arrivais pas à faire tourner le code que tu m'as proposé lorsqu'il y a plusieurs applis qui tournent en même temps.
    Celle dont on parle, je suis obligé de l'appeler en ouvrant, car contrairement à ce que j'ai écrit, elle ne fonctionne pas dans la feuille concernée car, ayant déjà des commandes style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'MsgBox ("prestataire")
    If Target.Column = 7 Then
    If ActiveCell.Value = "" Then
    If Target.Row < 500 Then
    xx_Prestataires.Show
    Range(Target.Address).Offset(0, 3).Select
    End If
    End If
    End If
    end sub
    cela fait des conflits car je n'arrête pas de faire appel à ces routines. Je vais essayer de plancher sur tes idées.

  16. #56
    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

    Dans la continuité de la question sur le time-out(qui fonctionne) j'aimerai afficher dans une pseudo horloge le temps restant avant la fermeture d'excel. J'ai regardé sur le forum sans trouver de solution à mon problème.
    Quelqu'un pourrait-il venir à mon aide, je l'en remercie par avance.

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

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