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 :

Macro sans fin sous Excel


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien methode
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien methode
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut Macro sans fin sous Excel
    Bonjour,

    Attention, je débute ☺

    J'ai besoin pour ma boite, d’effacer régulière le contenue d'une cellule (pour limiter les erreurs de la prod.)

    Sur une feuille du classeur Excel, depuis le scan d'un code barre, je souhaite générer un lien qui ouvrira les bons documents de production (ça c'est ok).
    Avec la macro plus bas, si un autre fichier Excel est toujours ouvert, même si le fichier qui a exécuté la macro est fermée, il est à nouveau ouvert.

    J'ai aussi une première macro qui exécute, dès l'ouverture la macro ci-dessous (ça aussi c'est ok ☺).

    Ce que je voudrais, c'est qu'un fois ce classeur fermé, la macro soit stoppée...
    Par avance merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Macro1()
     
        Windows("Doc_prod.xlsm").Activate
        Worksheets("Code barre").Activate
        Sheets("Code barre").Select
        Range("C3").Select
        Selection.ClearContents
        Application.OnTime Now + TimeValue("00:00:10"), "Macro1"
    End Sub

  2. #2
    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

    tu devrais taper la touche f1 qunad tu es dans l'editeur de code (VBE)

    et dans le moteur de recherche tu tape "ontime"
    miracle on te donne la solution
    pour le moment que tu demande c'est a metre dans le beforeclose du thisworkbook

    Nom : Capture.JPG
Affichages : 513
Taille : 206,9 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

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien methode
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien methode
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut Elle reboucle toujours :(
    Merci Patrick pour ta réponse, mais... (c'est sûrement de mon côté que cela cloche)

    Plus bas, tu trouveras ce que je pense avoir compris & écris :
    les lignes sous "Private Sub Workbook_Close()"n'ont pas stoppées la macro"Feuil1.Macro1", si j'ai un autre fichier Excel ouvert, ce qui sera toujours le cas, le fichier est ouvert à nouveau automatiquement !

    Bon WE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Workbook_Open()
     
       Application.OnTime Now + TimeValue("00:00:10"), "Feuil1.Macro1"
     
    End Sub
     
    Private Sub Workbook_Close()
     
        Application.OnTime EarliestTimes:=TimeValue("00:00:10"), _
        Procedure:="Feuil1.Macro1", Shedule:=False
     
    End Sub

  4. #4
    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
    re
    on ne peut pas appeler une macro qui est dans un module feuille avec ontime tout simplement il faut que la macro soit dans un module standard
    a maconnaissance tout du moins
    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

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien methode
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien methode
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut Re: Elle reboucle toujours :(
    Même résultat avec ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Workbook_Open()
     
       Application.OnTime Now + TimeValue("00:00:10"), "Macro1"
     
    End Sub
     
    Private Sub Workbook_Close()
     
        Application.OnTime EarliestTimes:=TimeValue("00:00:10"), _
        Procedure:="Macro1", Shedule:=False
     
    End Sub

  6. #6
    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
    re
    autant pour moi j'ai testé on peu bien l'appeller quand la macro est dans une feuille (j'aurais appris quelque chose aujourd'hui)

    et ce n'est pas Shedule mais Schedule
    dans le thisworkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_Close()
        Application.OnTime now, "Feuil1.Macro1", Schedule:=False
    End Sub
    Private Sub Workbook_Open()
        Application.OnTime Now + TimeValue("00:00:05"), "Feuil1.Macro1"
    End Sub
    dans la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub macro1()
     MsgBox "toto"
     'pour la reprogramer
     Application.OnTime Now + TimeValue("00:00:05"), "Feuil1.Macro1"
     End Sub
    tu aura un coucou de toto toute les 5 secondes

    si tu veux pas qu'elle se repete tu enleve la ligne dans la macro1 pour repeter
    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

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien methode
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien methode
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Par défaut re
    Rien à faire, même ainsi ► copie des lignes que tu m'as proposés, mais sans la faute , ré-ouverture sans fin du fichier...

    Je te joins le fichier si tu as un instant.
    J'aime bien le toto en bonus

    Bon WE
    Fichiers attachés Fichiers attachés

  8. #8
    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
    ben c'est normal tu n'a pas bloqué la ligne du repeat comme je te l'ai indiqué
    apres sincerement ca sert a quoi tonon time clear ta c3 a l'open tout simplement puisque tu veux le faire qu'une fois
    je pige pas du tout la!! l'utilisté du ontime
    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

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,
    Now() change tout le temps...
    Tu dois calculer le temps d'activation dans une variable, et utiliser cette variable pour l'activation ET l'annulation.
    Sinon tu cherches à annuler un truc qui n'a pas été programmé et celui programmé reste.
    eric

  10. #10
    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 eriic
    a quoi pourrais bien servir de figer le point de depart
    comme le l'ai dis il a q'ua supprimer la ligne de relance dans macro1 c'est tout (testé)
    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

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Qui te parle de figer ?
    Si tu fais un OnTime pour le temps t1, seul un onTime Schedule:=False au avec le même instant t1 en paramètre peut l'annuler.
    eric

  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 re
    je suis pas sur eric je vais faire des recherches sur ce point
    MAIS!!
    si je raisonne logiquement sachant que ontime programme une tache (si on peut l'appeler ainsi) unique et non repetitive puisqu'il faut la relancer pour la repetion
    dis moi un peu sachant cela pourquoi faudrait-il effacer cette "tache" programmée a un certain momment avec le meme temps ?????
    sinon il y aurait un argument repeat parametrable dans la fonction on time c'est pas le cas

    pour prouver cela
    voila un petit test
    on voit bien que si on relance pas la boucle s'arrete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim x, y
    Sub lance()
    x = 0
    Application.OnTime (Now + TimeValue("00:00:01")), "macro"
    End Sub
    Sub macro()
     If x <= 10 Then
    Cells(1, 1) = x
    Application.OnTime (Now + TimeValue("00:00:01")), "macro"
    End If
    x = x + 1
    End Sub
    a mon avis schedule est juste pour liberer la memoire OU!! pour la stopper avant qu'elle n'est une lieu
    Application.OnTime Now ,"macro",schedule=false

    je vais verifier mais je suis quasiment sur de moi

    d'autant plus que si on programme une tache avec le result du now figer dans une variable
    dis moi un peu ce que donnerait alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.OnTime (AncienNow + TimeValue("00:00:01")), "macro",schedule:=false
    t'a pas l'impression quelle ratterait le coche

    je sais pas j'essaie de raisonner logiquement

    d'ailleur tiens en meme temps que je reponds j'ai testé

    j'ai essayé d'arrétter la macro programée avant quelle ai été effectuée ben walouhh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub macro()
    MsgBox "toto"
    End Sub
    Sub test()
    maintenant = Now + TimeValue("00:00:05")
    Application.OnTime (maintenant), "macro"'on la programe
    Application.OnTime (maintenant ), "macro", schedule = False' ne l'arrete pas elle va bien s'effectuer dans 5 secondes donc ta théorie walouhh
    Application.OnTime (maintenant + TimeValue("00:00:06")), "macro", schedule = False' ne l'empeche pas de s'effectuer 
    'au mieux je pense que  la memoire est vidée 1 seconde apres que la tache se soit  executée et que l'on peut pas la vider avant!!! ce petit test nous le prouve 
    End Sub
    voila donc ta théorie sur le time dans une variable nest pas bonne
    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
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    dis moi un peu sachant cela pourquoi faudrait-il effacer cette "tache" programmée a un certain moment avec le meme temps ?????
    Imagine que tu lances plusieurs différées de la même macro en parallèle, il faudra bien pouvoir spécifier laquelle tu veux annuler.

    Et si tu en as une seule en route, que tu fermes ton fichier, il se rouvrira pour l'exécuter à l'heure dite (problème du demandeur). Il faut la supprimer, toujours en indiquant son heure d'exécution programmée. C'est celle-là et pas une autre que tu veux (et peux) annuler.
    Il faut aussi gérer l'erreur potentielle à la suppression qu'elle ait déjà été exécutée et pas encore recrée, qu'elle n'existe plus. Avec un On Error Resume Next
    Si tu fournis une heure qui ne correspond à rien comme now()+xxxx cette tâche n'existe pas et tu n'annules rien.

    Tu peux faire le test en programmant une et en fermant ton fichier. Tu le verras se rouvrir à l'heure dite.
    Teste ensuite en la supprimant au Close, tu verras bien dans quel cas ça fonctionne. Tu constateras qu'il veut l'heure exacte programmée.

    Autre test simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test2()
    Application.OnTime EarliestTime:=TimeValue("17:00:00"), Procedure:="test"
    Application.OnTime EarliestTime:=TimeValue("17:01:00"), Procedure:="test", Schedule:=False
    End Sub
    Sub test()
    ' rien
    End Sub
    Erreur sur l'annulation car la tâche à 17:01 n'existe pas.
    Corrige et met 17:00. Plus d'erreur, il a pu l'annuler car elle existe bien.

    En résumé pour le demandeur :
    Création :
    Public t2 As Date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    t2 = Now + TimeValue("00:00:10")
    Application.OnTime t2, "Macro1"
    Annulation à la fermeture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    On Error Resume Next
    Application.OnTime EarliestTime:=t2, Procedure:="Macro1", Schedule:=False
    On Error GoTo 0
    eric.

    Edit : exemple aide OnTime :
    Cet exemple montre comment exécuter my_Procedure à 17 heures.
    Visual Basic pour Applications
    Application.OnTime TimeValue("17:00:00"), "my_Procedure"
    Cet exemple montre comment annuler le paramétrage de OnTime de l'exemple précédent.
    Visual Basic pour Applications
    Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
    Procedure:="my_Procedure", Schedule:=False

Discussions similaires

  1. Problème de macro en VBA sous excel
    Par Nadounette123 dans le forum Excel
    Réponses: 2
    Dernier message: 19/09/2013, 15h34
  2. Macro sur Bouton sous Excel 2003
    Par diguert dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/04/2013, 11h46
  3. [XL-2010] Macro fonctionne pas sous excel 2010 ?
    Par mlafleur74 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/05/2012, 10h16
  4. Macro en VBA sous Excel
    Par vidapi007 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/07/2009, 10h19
  5. Macro CATIA V5 sous Excel
    Par cestimagik dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/12/2006, 10h20

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