Vba pour macro qui s'execute toutes les 30minutes

[Fermé]
Signaler
-
 Cami13 -
Bonjour
et merci pour votre aide
j'ai ce code dans ma feuille Excel (dans ThisWorkbook)

Private Sub Workbook_Open()

Application.OnTime TimeValue("09:05:00"), "Macro 1"
End Sub

j'aimerais que ma macro qui démarre a 09:00:05 se répète toutes les 30 minutes et que le processus s'arrête le soir a 17h35(c'est moi qui ouvre mon classeur et il reste ouvert toute la journée)
merci de votre aide

Cordialement CM bonne journée a tous

2 réponses

Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 692
Bonjour

Dans le module du ThisWorkbook :
Private Sub Workbook_Open()
  Call MaMacro
End Sub

Et dans un module classique :
Option Explicit
Option Private Module
Private Const heure_déb As Date = #9:05:00 AM#
Private Const heure_fin As Date = #5:35:00 PM#

Public Sub MaMacro()
  If Time < heure_déb Then
    Application.OnTime début, "MaMacro", heure_fin
    Exit Sub
  ElseIf Time < heure_fin Then
    Application.OnTime Now + TimeValue("00:30:00"), "MaMacro", heure_fin
  End If
  'Ici le code à exécuter ...
  MsgBox "MaMacro s'execute à " & Time

End Sub

Cordialement
Patrice
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 692
Re,

Dans l'Editeur Visual Basic :
Affichage / Explorateur de projet

Pour accéder au Module de classeur : double clic sur Thisworkbook
Copier le code le 1° code cidessus / coller dans ThisWorkbook

puis Insertion / Module
et double clic sur Module1
Copier le 2° code ci-dessus / puis Coller dans le module.
>
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021

Bonjour
merci de votre patiente
j'essaye comme je peux ,avec pour le moment ce que je sais
j'ai collé le 1er code dans thisworkbook comme ci dessous
Private Sub Workbook_Open()
Call PB
End Sub
lorsque j'ouvre le classeur un message affiche
erreur de compilation nom ambigu détecté??
voila ma macro elle est dans le module 20 du classeur
je suis incapable de vous donner les raisons du message
si je mets des guillemets a "PB" comme ceci ca s'affiche en rouge donc je les ai enlevé


Sub PB()
'
' PB Macro
'

'
ActiveWindow.LargeScroll ToRight:=3
Range("EE12:EE51").Select
Selection.Copy
Range("EE12").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("EH12:EH51").Select
Application.CutCopyMode = False
Selection.Copy
Range("EH12").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.LargeScroll ToRight:=1
ActiveWindow.Panes(2).Activate
Range("EK10:EX11").Select
Selection.Copy
ActiveWindow.LargeScroll ToRight:=-1
Range("EL10:EL11").Select
ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
IconFileName:=False
Range("EK9").Select
ActiveWindow.Panes(4).Activate
Range("EK12:EX51").Select
Selection.Copy
ActiveWindow.LargeScroll ToRight:=-1
Range("EL12").Select
ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
IconFileName:=False
ActiveWindow.LargeScroll ToRight:=-1
Range("EG12:EG51").Select
Selection.Copy
Range("EK12").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.Panes(2).Activate
Range("EG10:EG11").Select
Selection.Copy
Range("EK10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.LargeScroll ToRight:=-3
ActiveWindow.Panes(4).Activate
Range("DE54").Select

ActiveWindow.SmallScroll ToRight:=1
End Sub
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 692
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 692
si le classeur est ouvert en retard a 09:20:00(15minutes de retard), la macro se déclenchera t'elle a 09:35:00 si j'ai défini l'intervalle a 30 minutes??
D'abord la macro se déclenche à l'ouverture du fichier (9h20) puis toutes les 30 minutes et elle s'arrête vers 17h35 (-29/+0).
Avec un code différent, on pourrais déclencher la macro à heure fixe (mais ce n'était pas la demande).
>
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021

re
je voulais vous dire que il faut absolument que la macro démarre a 09:05:00 et si il a un retard dans l'ouverture ;alors il faut quelle se déclenche a la prochaine cession 09:35:00si le classeur a été par exemple ouvert a 09:20:00
10:05 si le classeur a été ouvert à 09:50:00....etc
il y a une chose que je ne sais pas encore ,vous avez marque dans votre programme End If
'Ici le code à exécuter ...

faut il mettre le code de la macro entier ou supprimer Sub PB et sub end (en début et fin de la macro)
je vous met le code tel que l'ai mis dans le module 1
c'est très compliqué pour quelqu'un qui débute;il faut que j'apprenne petit a petit
je pense qu'il faut des mois et des mois pour apprendre a maitriser une petite partie de ce langage

Option Explicit
Option Private Module
Private Const heure_déb As Date = #9:05:00 AM#
Private Const heure_fin As Date = #5:35:00 PM#

Public Sub PB()
If Time < heure_déb Then
Application.OnTime début, "PB", heure_fin
Exit Sub
ElseIf Time < heure_fin Then
Application.OnTime Now + TimeValue("00:30:00"), "PB", heure_fin
End If
ActiveWindow.LargeScroll ToRight:=3
Range("EE12:EE51").Select
Selection.Copy
Range("EE12").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("EH12:EH51").Select
Application.CutCopyMode = False
Selection.Copy
Range("EH12").Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.LargeScroll ToRight:=1
ActiveWindow.Panes(2).Activate
Range("EK10:EX11").Select
Selection.Copy
ActiveWindow.LargeScroll ToRight:=-1
Range("EL10:EL11").Select
ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
IconFileName:=False
Range("EK9").Select
ActiveWindow.Panes(4).Activate
Range("EK12:EX51").Select
Selection.Copy
ActiveWindow.LargeScroll ToRight:=-1
Range("EL12").Select
ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
IconFileName:=False
ActiveWindow.LargeScroll ToRight:=-1
Range("EG12:EG51").Select
Selection.Copy
Range("EK12").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.Panes(2).Activate
Range("EG10:EG11").Select
Selection.Copy
Range("EK10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWindow.LargeScroll ToRight:=-3
ActiveWindow.Panes(4).Activate
Range("DE54").Select
ActiveWindow.SmallScroll ToRight:=1
MsgBox "PB s'execute à " & Time

End Sub
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 692
Bonjour,

1) erreur de compilation nom ambigu détecté
Effectivement PB est un nom ambigu pour Excel, il ne sait pas si il s'agit de la procédure que tu as nommé PB ou de la colonne PB de la feuille active, d'où l'importance de choisir des noms de de variables et d'objets qui ne pose aucune ambiguïté et qui facilite la lecture du code.

2) Ton code est directement issu de l'enregistreur de macro, il comporte de très nombreuses instructions inutiles : lorsque tu enregistres une macro, il est très important de se préparer avant pour ne faire que les opérations strictement nécessaires. Ensuite il faudra simplifier ton code mais pour cela, je t'invite à consulter le cours que je t'ai indiqué ci-dessus