Automatiser une mise à jour
Clic droit sur le bouton -> "Affecter une macro" -> tu sélectionnes ta macro
Si ce n'est pas ça, c'est que je n'ai pas compris ta requête.
J'ai compris ce que vous voulait dire ! en fait la macro a été déjà affecté à mon bouton mise à jour.
Je voudrais maintenant avoir la mise à jour qui se fait tous les dix minutes sans pour autant appuyer sur le bouton.
Cordialement
Dans ce cas, tu pourrais utiliser un timer. Je te joins le lien d'explication de Microsoft, en revanche je n'en ai jamais utilisé donc je ne vais pas pouvoir t'aider... Bon courage, et n'hésites pas à mettre tes progrès sur ce topic, ça pourra aider de futures personnes :)
Fonction timer (Visual Basic pour Applications) | Microsoft Docs
Bonjour,
la proposition MS fournie dans le lien au-dessus ne semble pas adaptée, elle monopolise toutes les ressources en permanence.
Voir plutôt la méthode OnTime.
L'aide donne un exemple :
eric
Merci pour vos propositions @erriiic et @féfoush. Je vous tiendrai au cours de l'avancée.
Sub my_Procedure()
MsgBox "hello world"
Call test ' for starting timer again
End Sub
Sub test()
Application.OnTime Now + TimeValue("00:10:00"), "my_Procedure"
End Sub
'ça c'est le code pour répondre à mon problématique!
'J'espère ça aidera d'autre personnes
'cordialement
Bonjour,
il faut aussi le désactiver à la fermeture dans l'événement Workbook_BeforeClose de ThisWorkbook sinon ton fichier va se rouvrir tout seul.
Mémoriser chaque heure de lancement dans une variable m_nextTime et :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' arreter le timer
Application.OnTime EarliestTime:=m_nextTime, Procedure:="my_Procedure?", Schedule:=False
End Sub
eric
Bonjour,
Mon fichier s'ouvre tout seul après fermeture. J'ai essayé votre programme mais ça n'a pas marché pour mon fichier!!
voici mon programme :
Sub timer()
Application.OnTime Now + TimeValue("00:03:00"), "Pointagecde" 'lancer la macro toutes les 5 minutes
End Sub
Sub Pointagecde()
Dim Dte As Date
Dim ChDte As String
Dim DLg As Integer
Dim currentd As Date
Dim i, imax
SQL_server =
SQL_catalog =
''SQL_catalog = "TestV10"
SQL_login =
SQL_password =
Dte = Cells(1, 4).Value
ChDte = "'" & Right(Dte, 4) & Mid(Dte, 4, 2) & Left(Dte, 2) & "'"
ActiveCell.SpecialCells(xlLastCell).Select
DLg = ActiveCell.Row
Dte = Range("D1").Value
imax = Range("A65536").End(xlUp).Row
For i = 4 To imax + 1
If (Range("A" & i).Value <> refdate) And (Range("A" & i).Value <> "") Then
Range("A" & i).EntireRow.Delete
i = i - 1
End If
Next i
''Enlever tout filtre avant la mise à jour
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=2
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=3
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=4
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=5
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=6
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=7
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=8
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=9
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=10
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=11
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=12
Range("C1").Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
'Connexion to file
Set Source = CreateObject("ADODB.Connection")
Source.Open "Provider=SQLOLEDB;Data Source=" & SQL_server & "; Initial Catalog=" & SQL_catalog & "; User ID=" & SQL_login & "; Password=" & SQL_password
'SQL Request
texte_SQL = "select ETEMPS.DateTravail, ETEMPS.CodeOperateur, ETEMPS.CodeLanctimprod, ETEMPS.Phase, LCTE.QuantiteLancee, ETEMPS.QtiteFabNonEntSk, " & _
"ETEMPS.DureeExecution, ETEMPS.CodePoste, POSTE.Designation1, LCTC.VarAlphaUtil " & _
"from ETEMPS " & _
"INNER JOIN LCTC ON ETEMPS.CodeLanctimprod = LCTC.CodeLancement and ETEMPS.CodePoste = LCTC.CodeRubrique and etemps.Phase = lctc.Phase " & _
"INNER JOIN POSTE ON ETEMPS.CodePoste = POSTE.CodePoste " & _
"LEFT OUTER JOIN LCTE ON LCTC.CodeLancement = LCTE.CodeLancement " & _
"where POSTE.Designation1 NOT LIKE 'SS%' and POSTE.Designation1 NOT LIKE 'Progr%' and POSTE.Designation1 NOT LIKE 'Dessin%' and ETEMPS.DateTravail = " & ChDte & " " & _
"order by ETEMPS.DateTravail"
Set requete = CreateObject("ADODB.Recordset")
Set requete = Source.Execute(texte_SQL)
'Paste data
Cells(4, 1).CopyFromRecordset requete
'Closing connexion
Set requete = Nothing
Set Source = Nothing
'
' definirremplissage Macro
Range("J4:K300").Select
Range("J4:K4").Activate
Dim lacellule As Range
For Each lacellule In Selection
couleurderemplissage = lacellule
Next lacellule
Range("J4:K4").Select
Range("J4:K4").Activate
' Convertir Macro
'
'
Range("Tableau1[Code Poste]").Select
ActiveWindow.SmallScroll Down:=-81
Range("Tableau1[Phase]").Select
ActiveWindow.ScrollRow = 4
Range("C1").Select
Call timer 'lancer la macro toutes les 5 minutes
End Sub
Bonjour,
Comme on ne sait pas ce que tu as fait on ne peut te dire où tu t'es trompé...
La divination a ses limites.
eric
EDIT : il manque la partie dans ThisWorkbook justement.
Et je t'avais dit de mémoriser la dernière heure de lancement. Tu as besoin de la connaitre, c'est celle que tu dois annuler. Dans une variable Public
EDIT2, ça doit donner un truc comme ça. Dans un module standard :
Public m_nextTime As Double
Sub timer()
m_nextTime = Now + TimeValue("00:03:00")
Application.OnTime m_nextTime, "Pointagecde" 'lancer la macro toutes les 5 minutes
End Sub
+ la partie Workbook_BeforeClose()
Bonjour Diagne,
La méthode Application.OnTime n'est pas la plus adaptée à l'exécution périodique d'une macro, car peu maintenabl. Je te conseillerais plutôt d'utiliser le task manager de windows, que tu trouveras dans C:\Windows\System32\taskschd.msc.
Je te laisse en regarder la documentation, qui permet l'exécution de tâches périodiques chaque jour, plusieurs fois par jour, certains jours de la semaine, etc de façon très simple.
Mais surtout, avantage majeur : tu vois à un seul endroit toutes les tâches planifiées que tu as, contrairement à Application.OnTime, et donc éviter les conflits d'exécution ! Tu peux aussi les activer/désactiver très facilement, sans avoir à toucher à ton code.
En fichier exécutable, tu peux te créer un petit script VBS qui ressemble à ça :
Set objExcel = CreateObject("Excel.Application")
Set wb = objExcel.Workbooks.Open(cheminDeTonFichierMacro)
objExcel.Run "macroName"
wb.close True
Bonjour,
garde les photos pour les forums photoshop.
Ici il faut un fichier xl
eric
PS : utiliser le bon nom de la procédure partout. Elle ne s'appelle pas my_procedure apparemment
"garde les photos pour les forums photoshop.
Ici il faut un fichier xl
eric"
je me suis senti agressé en lisant ce message pourtant j'ai déjà envoyé le code. et en plus le code il est lié avec l'ERP de ma boite.
Merci quand même d'avoir pris le temps de m'aider mais j'aurais aimé qu'elle (cette aide) soit plus courtois!
Cordialement
Bonjour, (oui, la courtoise commence par ça)
Tu pouvais, ça l'était (modérément, je peux faire pire rassure-toi)
Comprends-moi :
1) ce n'est pas très lisible, ça fatigue et on zappe
2) il faut recopier si on veut tester
Et c'est recommandé dans la charte que tu aurais dû prendre le temps de lire avant de poster. Au point 4 : https://forum.excel-pratique.com/excel/a-lire-avant-de-poster-charte-du-forum-et-informations-utiles...
Tu peux tout aussi facilement copier-coller le code en utilisant l'icone </>. On a juste à le copier si on veut tester (un fichier en situation est préférable) ou simplement éditer pour te fournir la réponse.
Toi tu viens d'arriver, nous ça fait des années qu'on rabâche ça car une évidence ne l'est pas pour tout le monde. Au bout d'un moment ça saoule
Sans rancune
eric