XL 2019 Vider cellules à une certaine heure

KiMi249

XLDnaute Nouveau
Bonjour,

Je souhaite crée une macro qui viderais certaine cellules d'un tableau à une certaine heure.
J'utilise un tableau de stock avec une feuille par jour du lundi au samedi.
J'ai donc besoin que cette macro ce lace par exemple le mardi matin sur la feuille du lundi etc...

Merci pour votre aide :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Kimi, et bienvenu sur XLD,
Pour que l'exécution soit automatique, ces macros doivent être placées dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
    'A l'ouverture du fichier, en automatique,NuméroJour donne le numéro du jour.
    '1 pour lundi, 2 pour mardi ... 6 pour samedi
    Dim NuméroJour%
    NuméroJour = Application.Weekday(Now) - 1
    'Pour chaque jour on lance la macro spécifique
    Select Case NuméroJour
        Case 1: TraitementLundi
        Case 2: TraitementMardi
        Case 3: TraitementMercredi
        Case 4: TraitementJeudi
        Case 5: TraitementVendredi
        Case 6: TraitementSamedi
    End Select
End Sub
Sub TraitementLundi()
    ' Macro à éxécuter le lundi
End Sub
Sub TraitementMardi()
    ' Macro à éxécuter le Mardi
End Sub
Sub TraitementMercredi()
    ' Macro à éxécuter le Mercredi
End Sub
Sub TraitementJeudi()
    ' Macro à éxécuter le Jeudi
End Sub
Sub TraitementVendredi()
    ' Macro à éxécuter le Vendredi
End Sub
Sub TraitementSamedi()
    ' Macro à éxécuter le Samedi
End Sub
A l'ouverture du fichier, Workbook_Open s'exécute.
En fonction du jour courant, il exécute une des 6 macros.
 

dysorthographie

XLDnaute Accro
bonjour,
j'imagine que le traitement est le même quelque soit le jour de la semaine mais il faut travailler sur bon jours

il ne faut pas oublier de sauvegarder la date pour éviter de réinitialiser à l'occasion d'une réouverture du fichier le même jour!
Code:
Private Sub Workbook_Open()
If Worksheets("Page Accueil").Range("A1") <> Date Then
  If Application.Weekday(Now) > vbSunday And Application.Weekday(Now) < vbSaturday Then TraitementSemaine Application.Weekday(Now)
 Worksheets("Page Accueil").Range ("A1") = Date
End If
End Sub
Sub TraitementSemaine(J As Integer)
Dim Jour(): Jour() = Array("", "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi") 'je préfère  définir moi même les jour de la semaine
With ThisWorkbook.Worksheets(Jour(J))
    'taitement de longlet!
End With
End Sub
 
Dernière édition:

KiMi249

XLDnaute Nouveau
Merci pour vos réponses.
Je comprend certaine donnée d'exel mais au niveau des macros j'avoue ne pas comprendre grand chose, ou du moins je n'arrive pas à trouver la "logique" d'écriture de celle-ci.
Je vous joint le fichier affin de vous présenter ce que j'ai besoin.

Dans les feuilles de chaque jour, tout ce qui est en orange j'ai besoin que ca ce vide le lendemain avant 6h. Cela doit ce faire sur des feuilles ou les zones sont protégée. Mais ... 🥁🥁🥁🥁 j'arrive à rajouter la ligne qui ôte la protection des feuilles sur la macro :cool:

D'avance merci pour vos retour.
 

Pièces jointes

  • Prévision Stock TEST.xlsm
    301.4 KB · Affichages: 5

dysorthographie

XLDnaute Accro
tu trouveras pièce joint un ficher zip qui contient un fichier VBScript !
tu pourras le lancer via le gestionnaire de taches de Windows après minuit et avant 6 heurs du Lundi au Samedi!

Si en plus ton fichier ce trouve sur un serveur Windows disposant d'Excel c'est encore mieux !

notes que si le fichier est encor ouvert par qui que ce soit il n'y aura pas de traitement!
voici le code du fichier TraitementSemaine.vbs

Tu pourras modifier la ligne const F="C:\Myrep\Prévision Stock TEST.xlsm" en ouvrant le fichier TraitementSemaine.vbs avec notepad!

Les fichiers VBS s'exécute comme des fichiers BAT.
VB:
Dim Xls, Classeur ,Fm ,Op
Op=true
const F="C:\Myrep\Prévision Stock TEST.xlsm"
On Error Resume Next
Set Xls = GetObject(, "Excel.application")
If Err <> 0 Then
        Err.Clear
        Op =False
        Set Xls = CreateObject("Excel.application")
End If
 On Error GoTo 0
Xls.visible=true
if  IsOuvert(Xls,F)=false then
        set Classeur= Xls.Workbooks.Open(F)
       If Classeur.ReadOnly=false  Then
         TraitementSemaine Classeur
         Classeur.save
         Classeur.close false
         if op=false then  Xls.Quit
       end if
end if

Function IsOuvert(Xls,F )
For Each C In Xls.Workbooks
  IsOuvert = C.FullName = F
  If IsOuvert Then Exit For
Next
End Function
Sub TraitementSemaine(Classeur)
If Weekday(Now) > 1 Then
     Dim Jour: Jour = Array("", "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi")
    With Classeur.sheets(Jour(Weekday(Now)))
    .select
  
        With .Range("A1").CurrentRegion
            .Range(.Cells(2, "F"), .Cells(.Rows.Count, "G")) = ""
            .Range(.Cells(2, "J"), .Cells(.Rows.Count, "J")) = ""
            .Range(.Cells(2, "O"), .Cells(.Rows.Count, "AZ")) = ""
        End With
    End With
End If
End Sub
 

Pièces jointes

  • TraitementSemaine.zip
    709 bytes · Affichages: 2
Dernière édition:

Discussions similaires

Réponses
2
Affichages
261

Statistiques des forums

Discussions
312 213
Messages
2 086 305
Membres
103 174
dernier inscrit
OBUTT