Discussion:
Ouvrir Automatiquement Excel selon des dates prédéfinis dans la colonne A
(trop ancien pour répondre)
Apitos
2012-04-10 17:58:25 UTC
Permalink
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.
MichD
2012-04-10 18:35:51 UTC
Permalink
Bonjour,

Tu peux utiliser le planificateur de tâches de Windows pour lancer un petit fichier VBS (vbscript)
qui selon un horaire que tu détermineras dans le planificateur de tâche lancera le fichier Excel
sans l'afficher et vérifiera à l'aide d'une macro spécifique contenue dans le fichier si la date
d'aujourd'hui correspond à une date de la colonne A:A

Voici un petit script pour ce travail :

Tu copies ce qui suit dans un fichier NotePad et tu l'enregistres en lui donnant
l'extension .VBS

C'est ce fichier .VBS que tu appelles dans le planificateur de tâches de Windows.

'----------------------------------
Dim Xl
set xl = createobject("Excel.application")
Xl.Visible = True
Xl.enableevents=false
'Chemin et nom du fichier à ouvrir
set Wk = Xl.workbooks.open("c:\Chemin & NomDuFichier.xlsm")

'J'ai supposé que la macro a exécuté s'appelait "MaMacro" et qu'elle était
'située dans un MODULE STANDARD.
Xl.Run "MaMacro"
Xl.enableevents=true

'wk.save ' sauvegarde si nécessaire
'wk.close ' fermeture du fichier si nécessaire

'xl.quit ' fermeture de l'instance du fichier si nécessaire
'----------------------------------


Dans le fichier Excel, si tu veux savoir si la date d'aujourd'hui existe dans la colonne A:A de la feuil1
Exemple de code :

'----------------------------------
Sub MaMacro()
Dim X As Variant
With Feuil1
X = Application.Match(CLng(Date), .Range("a:A"), 0)
If IsNumeric(X) Then
ThisWorkbook.Application.Visible = True 'Rend l'application visible (si besoin)
'X représente le numéro de la ligne
'reste du code
End If
End With
End Sub
'----------------------------------

Attention, si suite à l'exécution de la macro "MaMacro" tu fermes le classeur et Excel par
du code, il ne faut pas dédoubler ces commandes dans le fichier .VBS.


MichD
------------------------------------------
Apitos
2012-04-11 19:48:07 UTC
Permalink
Bonjour MichDenis,

J'ai appliqué le code, mais le fichier excel n'est jamais ouvert !

Le format des dates dans la colonne A est :

10/04/2012 20:40
10/04/2012 22:19
10/04/2012 22:25
10/04/2012 22:27
10/04/2012 22:29
10/04/2012 22:31
10/04/2012 22:35
10/04/2012 22:38
10/04/2012 22:42
10/04/2012 22:45
10/04/2012 22:49

Un autre souci :

L'exécution continu du fichier .VBS ne cause-t-elle pas de problème au systeme ?

Et est-ce qu'on peut récupérer les dates du fichier Excel lors d'un premier lancement et puis introduire la liste récupérée dans le planificateur de tâches ?
Apitos
2012-04-13 13:43:52 UTC
Permalink
Bonjour MichDenis,

Une approche ?
MichD
2012-04-13 14:27:58 UTC
Permalink
Ça fait longtemps que je t'ai répondu, mais les messages ne sortent pas du répertoire
d'envoi de Windows Live Mail. Un problème se serveur ou Windows Live Mail, je n'en sais
rien!

La macro que j'ai commise cherche une "DATE" comme contenu de cellule. Toi, dans tes
cellules tu as une date + l'heure. C'est ce pour quoi la macro ne trouve pas la date.

Numéro d'erreur Windows Live Mail : 0x8DE20007

Tu peux utiliser la méthode "Find" au lieu de "Match" pour trouver une date même si la
cellule affiche l'heure.
La méthode proposée s'applique seulement si ces dates ne sont pas le résultat de formules.

Voici la ligne de code à adapter : elle recherche la date d'aujourd'hui dans la plage A:A

Dim Set Rg As Range

With Feuil1
.Activate
set Rg = .Range("A:A").Find(What:=Date, LookIn:=xlFormulas, Lookat:=xlPart)
if not rg is nothing then
Msgbox rg.address
'OU
Rg.select
end if
end with


MichD
---------------------------------------------------------------
Apitos
2012-04-13 17:16:29 UTC
Permalink
Bonsoir MichDenis,
Post by MichD
C'est ce pour quoi la macro ne trouve pas la date.
Je crois que la macro n'est pas exécutée du tout.

Parce qu'il y a un test if...else

Si la recherche ait échouée, alors le message du else est affiché.

mais aucun message n'est affiché ni même Excel n'est ouvert !!!

Bon voici la macro que j'ai utilisé (Pas encore de résultat!!)

'----------------------------------
Sub MaMacro()
Dim Frm As String
Dim Rg As Range
With Feuil1
.Activate
Frm = Format(Now, "dd/mm/yyyy hh:mm")
ThisWorkbook.Application.Visible = True
Set Rg = .Range("A:A").Find(What:=Frm, LookIn:=xlValues, LookAt:=xlPart)
If Not Rg Is Nothing Then
MsgBox "La date " & Frm & " est trouvée à l'adresse " & Rg.Address
'OU
'Rg.Select
Else
MsgBox "La date : " & Frm & " n'a pas été trouvée"
End If
End With
End Sub
'----------------------------------

Cordialement.
MichD
2012-04-13 18:55:15 UTC
Permalink
A ) Ouvre ton fichier et lance l'exécution de la macro pas à pas.
Tu places ton curseur entre la ligne de déclaration de la macro et le End Sub et tu
appuies sur la touche F8 pour exécuter une ligne à la fois de la procédure. Tu vas voir si
au moins ta procédure fonctionne!

B ) Je crois que tu n'as pas saisi l'explication que je t'ai donnée à propos du format
date.

- Si tu définis comme critère de recherche la date + l'heure comme dans la liste suivante
:
| Frm = Format(Now, "dd/mm/yyyy hh:mm")

À la place de cette ligne, tu devrais utiliser :
Dim Frm As Date
Frm = Date

J'ai testé la procédure suivante et elle est fonctionnelle :
Attention, si ta plage de cellules sur laquelle se fait la recherche est différente
de la colonne A:A, à toi d'adapter!

'------------------------------------------
Sub MaMacro()
Dim Frm As Date
Dim Rg As Range
With Feuil11
.Activate
Frm = Date
ThisWorkbook.Application.Visible = True
Set Rg = .Range("A:A").Find(What:=Frm, LookIn:=xlFormulas, LookAt:=xlPart)
If Not Rg Is Nothing Then
MsgBox "La date " & Frm & " est trouvée à l'adresse " & Rg.Address
'OU
'Rg.Select
Else
MsgBox "La date : " & Frm & " n'a pas été trouvée"
End If
End With
End Sub
'------------------------------------------

MichD
---------------------------------------------------------------
--
MichD
---------------------------------------------------------------
Apitos
2012-04-13 21:23:27 UTC
Permalink
Re,

J'ai deja testé avec F8 et la procédure est fonctionnelle en cas de Frm = Date

Mais comme j'aurai besoin de tester l'heure aussi pour ouvrir Excel, j'ai changé le Frm en = Format(Now,"dd/mm/yy hh:mm") pour recherché aussi l'heure et les minutes.

Et ca marche aussi.

Mais avec l'appel du fichier AutoTest.vbs depuis le planificateur de tâches, ça ne marche plus !

Et voila les fichiers avec lesquels je travaille :

http://cjoint.com/?BDnxtZvV2QP

Merci.
MichD
2012-04-14 12:09:50 UTC
Permalink
Ce fichier .VBS fonctionne très bien.

Dans le fichier que j'ai ouvert (un fichier .vbs peut-être édité en utilisant la commande
"ouvrir avec" dans le menu contextuel lors d'un clic droit sur le fichier en choisissant
"NotePad"), Le chemin et le nom du fichier n'étaient pas complets!

La procédure ouvre le fichier dans une instance unique d'Excel, si tu veux autre chose, il
faut le dire!

Quand tu utilises des fonctions comme "Now()" ou "maintenant()", tu peux appliquer un
format de cellule de ce type : DD/MM/AA H:MM mais n'oublie pas que cela est un format,
mais dans la cellule, la valeur numérique contient aussi les secondes même si elles ne
sont pas affichées... et vouloir faire une recherche sur une telle valeur est pour le
moins particulier!


'----------------------------------
Dim Xl
dim wk

Set Xl = CreateObject("Excel.application")
Xl.Visible = True
'Chemin et nom du fichier à ouvrir à adapter...
Set Wk =
Xl.Workbooks.Open("C:\Users\DM\Downloads\Apitos\BDnxtZvV2QP_autoexec\TestDates.xls")
'J'ai supposé que la macro a exécuté s'appelait "MaMacro" et qu'elle était
'située dans un MODULE STANDARD.
Xl.Run "MaMacro"

'wk.save ' sauvegarde si nécessaire
'wk.close ' fermeture du fichier si nécessaire

'xl.quit ' fermeture de l'instance du fichier si nécessaire
'----------------------------------
--
MichD
---------------------------------------------------------------
Apitos
2012-04-19 19:14:35 UTC
Permalink
Bonsoir MichD,

L'erreur était dans la session qui ouvrira le fichier vbs.

entre temps j'ai trouvé ce lien :

http://jpcheck.developpez.com/tutoriels/access/generer-taches-planifiees-depuis-access

qui traite des tâches planifiées depuis access à l'aide des fichier *.batch.

et je le trouve très intéréssant.

seulement j'ai du mal à l'adapter sous excel.

peux-tu m'aider à réaliser cela ?

Merci d'avance.
MichD
2012-04-20 12:57:20 UTC
Permalink
Je n'ai pas vraiment la disponibilité pour le travail que tu demandes. Je suis un bénévole
qui essaie dans la mesure du possible de faire quelques suggestions lorsqu'un usager a des
difficultés avec Excel.

Je ne sais toujours pas vraiment ce que tu tentes de faire. La création de Batchs file
pour créer et exécuter des tâches planifiées n'est pas nécessairement de tous repos!

Dans une fenêtre d'une "invite de commande" (celle qui ressemble à l'ancienne fenêtre DOS)
tape ceci :
Schtasks.exe /? et tu auras un peu d'information sur la manière d'utiliser la commande.

À cette adresse, on décrit de façon beaucoup plus complète la manière d'utiliser
l'exécutable : Schtasks.exe
http://support.microsoft.com/kb/814596/fr

Si tu utilises des problèmes chemin faisant, cette adresse pourra t'aider...
http://social.technet.microsoft.com/search/fr-fr?query=Schtasks.exe&x=0&y=0
--
MichD
---------------------------------------------------------------

"Apitos" <***@gmail.com> a écrit dans le message de groupe de discussion :
30352781.50.1334862875503.JavaMail.geo-discussion-***@vbhc14...
Bonsoir MichD,

L'erreur était dans la session qui ouvrira le fichier vbs.

entre temps j'ai trouvé ce lien :

http://jpcheck.developpez.com/tutoriels/access/generer-taches-planifiees-depuis-access

qui traite des tâches planifiées depuis access à l'aide des fichier *.batch.

et je le trouve très intéréssant.

seulement j'ai du mal à l'adapter sous excel.

peux-tu m'aider à réaliser cela ?

Merci d'avance.
Apitos
2012-04-21 10:26:54 UTC
Permalink
Bonjour MichD,

Bon, Je vais essayer de chercher par- là par-ci et revenir poser quelques questions !
Gloops
2012-04-20 22:39:57 UTC
Permalink
Post by Apitos
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 une
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 semble
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 le
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à doit
sembler bien compliqué.

ça devrait marcher, non ?
A part qu'on avait parlé de ne rendre le classeur visible que si la date
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.
Apitos
2012-04-21 10:27:58 UTC
Permalink
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 renseignées dans la colonne A pour effectuée un traitement d’un besoin (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’avenir (créer des nouvelles tâches planifier). Un pas à realiser !

Voilà !
Gloops
2012-04-21 10:47:07 UTC
Permalink
Post by Apitos
Bonjour Gloops,
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 renseignées dans la colonne A pour effectuée un traitement d’un besoin (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’avenir (créer des nouvelles tâches planifier). Un pas à realiser !
Voilà !
Je verrais bien créer une tâche planifiée quotidienne une bonne fois
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).
Apitos
2012-04-22 22:40:45 UTC
Permalink
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'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.

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 la tâche.

Option Explicit

Private Declare Function NetScheduleJobAdd& Lib "netapi32.dll" _
(ByVal Servername$, Buffer As Any, JobID&)
Private Declare Function GetComputerName& Lib "kernel32" Alias _
"GetComputerNameA" (ByVal lpBuffer$, 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, Optional 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
Gloops
2012-04-22 23:35:46 UTC
Permalink
Post by Apitos
Bonsoir,
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 fois
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.
Post by Apitos
2 - Une fois le delai venu, j'ai un message d'erreur dans "Etat" me disant "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 avant 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é.
Apitos
2012-04-24 12:12:44 UTC
Permalink
Bonjour,
Post by Gloops
je voie que tu t'es donné du mal dans une autre voie.
J'essaye seulement de trouver une solution !
Post by Gloops
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 ?
Post by Gloops
Quelle est exactement la ligne de commande ?
Pas compris ?

Un exemple ?
Gloops
2012-04-24 16:39:59 UTC
Permalink
Post by MichD
Bonjour,
Post by Gloops
je voie que tu t'es donné du mal dans une autre voie.
J'essaye seulement de trouver une solution !
Oui, j'imagine.
Post by MichD
Post by Gloops
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.
Post by MichD
Post by Gloops
Quelle est exactement la ligne de commande ?
Pas compris ?
Un exemple ?
Ben, une tâche planifiée, ça sert à exécuter ... une tâche. Laquelle 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 moyens
d'appeler une commande, certains attendent les arguments dans la même
propriété que la commande, d'autres dans une autre propriété. Mais
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. Mais
je te fais confiance pour avoir consulté la doc.

Loading...