Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ouvrir Automatiquement Excel selon des dates prédéfinis dans la colonne A

18 réponses
Avatar
Apitos
Bonsoir =E0 tous,

Comment puis-je ouvrir automatiquement un fichier excel selon des dates pr=
=E9d=E9finis dans ce m=EAme fichier dans la colonne A ?

Merci.

8 réponses

1 2
Avatar
Gloops
Apitos a écrit, le 10/04/2012 19:58 :
Bonsoir à tous,

Comment puis-je ouvrir automatiquement un fichier excel selon des dates prédéfinis dans ce même fichier dans la colonne A ?

Merci.



Bonjour,

J'ai jeté un coup d'œil, j'aurais trois petites observations :
- en enregistrant les valeurs au format date (donc numérique) je ne les
atteins pas par Find, en revanche en les mettant au format texte ça
marche bien. Rien n'empêche, si on a des dates, au format date, dans un e
colonne, d'avoir leur conversion par la fonction Texte, dans une autre,
c'est alors dans celle-ci qu'il faudra lancer la recherche.

- par ailleurs, si on veut vérifier la correspondance à la minute prè s,
ça signifie qu'il faudra lancer le script une fois par minute. Il sembl e
plus raisonnable alors de laisser le fichier ouvert, et d'effectuer la
comparaison en boucle. ça n'est pas ça qui était visé, si ? Si on veut
effectuer un traitement quotidien, comme l'a fait remarquer MichD il
s'agit de mettre juste la date dans l'argument de recherche. Donc,
format(Now, "dd/mm/yyyy"), ou tout simplement Date -étant entendu que l e
format de date court est bien "dd/mm/yyyy".

- le lancement d'un traitement au chargement du classeur peut être plus
simple en le plaçant dans Workbook_Open, dans le module du classeur
(ThisWorkbook dans l'explorateur de projet), à condition toutefois de
régler la sécurité d'Excel pour que cette autorisation soit permise ,
éventuellement en assortissant ce classeur d'un certificat de sécurit é.
Cela étant, maintenant que le script est écrit, ce que je dis là do it
sembler bien compliqué.

ça devrait marcher, non ?
A part qu'on avait parlé de ne rendre le classeur visible que si la dat e
est inscrite dans la colonne des dates, et qu'on le rend visible au
début du traitement, mais ... ça, je suppose que c'est évident.
Avatar
Apitos
Bonjour MichD,

Bon, Je vais essayer de chercher par- là par-ci et revenir poser quelque s questions !
Avatar
Apitos
Bonjour Gloops,

Les grandes lignes de ce sujet :

1 – Ouvrir le fichier Excel à une date définie manuellement pour une première fois dans le planificateur de tâche (C’est fait par le fichi er *.vbs)

2 – Comparer si la date actuelle corresponde à la liste des dates rense ignées dans la colonne A pour effectuée un traitement d’un besoin (ch ose faite avec Find)

3 –Avant de le fermer (Pour ne pas épuiser les ressources du système) , on regarde si c’est la première ouverture du fichier Excel, on réc upère les dates pour planifier des nouvelles ouvertures à l’avenir (c réer des nouvelles tâches planifier). Un pas à realiser !

Voilà !
Avatar
Gloops
Apitos a écrit, le 21/04/2012 12:27 :
Bonjour Gloops,

Les grandes lignes de ce sujet :

1 – Ouvrir le fichier Excel à une date définie manuellement pour une première fois dans le planificateur de tâche (C’est fait par le fichier *.vbs)

2 – Comparer si la date actuelle corresponde à la liste des dates r enseignées dans la colonne A pour effectuée un traitement d’un beso in (chose faite avec Find)

3 –Avant de le fermer (Pour ne pas épuiser les ressources du systè me), on regarde si c’est la première ouverture du fichier Excel, on récupère les dates pour planifier des nouvelles ouvertures à l’av enir (créer des nouvelles tâches planifier). Un pas à realiser !

Voilà !




Je verrais bien créer une tâche planifiée quotidienne une bonne foi s
pour toutes à heure fixe, pour ouvrir le classeur, et à ce moment-là ,
dans le classeur on peut avoir le code pour dire si ce jour-là on a
quelque chose à faire ou pas. Si ce n'est pas le cas, on ferme. Non ?

Une fois le classeur ouvert, si le délai avant la prochaine action est
de quelques heures, on peut avoir un timer qui vérifie toutes les cinq
minutes si il y a quelque chose à faire (ou peut-être un délai diff érent
selon les contraintes).
Avatar
Apitos
Bonsoir,

En cherchant, j'ai trouvé ce code vba qui crée des tâches planifiers, mais il contient encore des lacunes :

1 - Les tâches sont créés pour s'exécuter périodiquement, or j'ai merais que la tâche soit exécutée selon le delai défini.

Par exemple : à 22:12:10 le 22/04/2012

Et la tâche sera détruite après.

2 - Une fois le delai venu, j'ai un message d'erreur dans "Etat" me disant "N'a pas pu démarré"

Je crois qu'il faut configurer la session dans laquelle sera exécutée l a tâche.

Option Explicit

Private Declare Function NetScheduleJobAdd& Lib "netapi32.dll" _
(ByVal Servername$, Buffer As A ny, JobID&)
Private Declare Function GetComputerName& Lib "kernel32" Alias _
"GetComputerNameA" (ByVal lpBuffe r$, nSize&)

Private Type AT_INFO
JobTime As Long
DaysOfMonth As Long
DaysOfWeek As Byte
Flags As Byte
dummy As Integer
command As String
End Type

Private Sub CreateTask(H$, D$, F$, Optional I As Boolean = False, Optiona l P As Boolean = True)
Dim Start$, Jrs$(), dWeek() As Variant
Dim j%, w%, AT As AT_INFO, JobID&, Computer$
Computer = StrConv(ComputerName, vbUnicode)
MsgBox "Computer " & Computer
dWeek = Array("M", "T", "W", "TH", "F", "S", "SU")
With AT
Start = Format(H, "hh:mm")
.JobTime = (Hour(Start) * 3600 + Minute(Start) * 60) * 1000
Jrs = Split(D, ",")
' Dates de chaque mois
If Val(D) Then
For j = 0 To UBound(Jrs)
.DaysOfMonth = .DaysOfMonth + 2 ^ (Jrs(j) - 1)
Next
' Jours de chaque semaine
Else
For j = 0 To UBound(Jrs)
For w = 0 To UBound(dWeek)
If UCase(Jrs(j)) = dWeek(w) Then
.DaysOfWeek = .DaysOfWeek + 2 ^ w
End If
Next
Next
End If
' Interactivité
If Not I Then .Flags = .Flags Or &H10
' Periodicité
If P Then .Flags = .Flags Or &H1
.command = StrConv(F, vbUnicode)
End With
If NetScheduleJobAdd(Computer, AT, JobID) Then
MsgBox "Impossible de créer la Tâche !", 64
Else
MsgBox "Tâche (" & JobID & ") ajoutée !", 64
End If
End Sub

Private Function ComputerName() As String
Dim PCName As String
PCName = String(50, Chr(0))
GetComputerName PCName, 50
ComputerName = "" & Trim(PCName)
End Function

Sub AddScheduledTask()
Dim iTime$, iFreq$, iProg$
Dim Cel As Range
'----
For Each Cel In Range("A2:A" & [A65000].End(xlUp).Row)
iTime = Right(Cel, 8)
iFreq = Day(Left(Cel, 8))
iProg = "TestDates.xls!TraitementTache"
CreateTask iTime, iFreq, iProg
Next Cel
'----
End Sub
Avatar
Gloops
Apitos a écrit, le 23/04/2012 00:40 :
Bonsoir,

En cherchant, j'ai trouvé ce code vba qui crée des tâches planifi ers, mais il contient encore des lacunes :

1 - Les tâches sont créés pour s'exécuter périodiquement, or j'aimerais que la tâche soit exécutée selon le delai défini.

Par exemple : à 22:12:10 le 22/04/2012

Et la tâche sera détruite après.



http://zailes.org/Retard/Retard.aspx

bien que je voie que tu t'es donné du mal dans une autre voie.

Et donc tu gardes l'idée de créer une tâche planifiée plusieurs f ois
dans la journée ? A quelques heures d'écart ça se défend.
Il est vrai que c'est bien pour ça que j'ai écrit le programme Retard .

Toutefois, décharger Excel pour le recharger dix minutes plus tard, ç a
mérite vraiment réflexion, un timer c'est efficace tu sais.


2 - Une fois le delai venu, j'ai un message d'erreur dans "Etat" me dis ant "N'a pas pu démarré"



Quelle est exactement la ligne de commande ?

Comme je soupçonne que le problème risque d'être là, j'attends av ant de
me plonger dans la suite :)

Alors si la ligne consiste à appeler un script, bien entendu, il faudra
regarder ce que le script a dans les tripes, j'imagine qu'il a
probablement évolué depuis la dernière fois qu'il a été publié .
Avatar
Apitos
Bonjour,

je voie que tu t'es donné du mal dans une autre voie.



J'essaye seulement de trouver une solution !

Toutefois, décharger Excel pour le recharger dix minutes plus tard, ç a
mérite vraiment réflexion, un timer c'est efficace tu sais.



Je crois qu'il existe la fonction OnTime de Excel ?


Quelle est exactement la ligne de commande ?



Pas compris ?

Un exemple ?
Avatar
Gloops
Apitos a écrit, le 24/04/2012 14:12 :
Bonjour,

je voie que tu t'es donné du mal dans une autre voie.



J'essaye seulement de trouver une solution !



Oui, j'imagine.


Toutefois, décharger Excel pour le recharger dix minutes plus tard, ça
mérite vraiment réflexion, un timer c'est efficace tu sais.



Je crois qu'il existe la fonction OnTime de Excel ?



Absolument.



Quelle est exactement la ligne de commande ?



Pas compris ?

Un exemple ?



Ben, une tâche planifiée, ça sert à exécuter ... une tâche. L aquelle est
précisée dans une ligne de commande, non ?
Je vois que ton objet AT a une propriété Command ...

Là-dedans, on doit trouver le chemin de l'exécutable (en l'occurrence
Excel si je ne m'abuse), suivi d'un espace et des arguments, dont le
chemin du fichier (en n'oubliant pas d'encadrer le chemins avec des
guillemets, puisqu'ils comportent des espaces).

Oh, j'aurais peut-être dû réviser, avant de dire ça. Selon les mo yens
d'appeler une commande, certains attendent les arguments dans la même
propriété que la commande, d'autres dans une autre propriété. Mai s
logiquement tu sais ça mieux que moi, puisque tu as travaillé dessus
récemment.


J'ignorais qu'il fallût fournir la commande en unicode, d'ailleurs. Mai s
je te fais confiance pour avoir consulté la doc.
1 2