Automatiser une mise à jour

Bonjour,

Je reviens vers vous pour savoir si c'est possible d'automatiser le Click sur un bouton MAJ qui lance une macro (cette macro contient une requête sql). Si oui comment s'il vous plait.

tttt

Merci d'avance

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 :

docs.microsoft.com/fr-fr/office/vba/api/excel.application.ontime?f1url=%3FappId%3DDev11IDEF1%26l%3Dfr-FR%26k%3Dk(vbaxl10.chm133184)%3Bk(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue

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()

Merci Eric !

Salut Eric,

J'ai refait le programme en me basant sur vos conseils, mais en fermant le fichier j'ai un message d'erreur!

Je vous laisse voir sur les photos pour m'aider à comprendre l'erreur.

cp4

Merci d'avance

cp1 cp2 cp3

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

Rechercher des sujets similaires à "automatiser mise jour"