Bonjour à tous!
Je me retrouve confronté à un problème assez gênant lorsque je tente de faire fonctionner 2 classeurs différents contenant chacun une macro liée à un application.ontime, et qui me fait me demander s'il est même simplement techniquement possible de faire tourner 2 tableaux avec des macros sur le même PC.
Ils ne se déclenchent pas du tout aux même heures, l'un est un Today + Timevalue, et l'autre est un Now + Timevalue (je mets les codes ci-dessous).
Ces 2 tableaux sont situés dans un répertoire commun, pas dans le même dossier cela dit. Ils sont ouverts sur un PC qui tourne 24/24.
Tableau 1 doit faire une impression .pdf de lui-même et l'expédier en pj d'un mail 2 fois par jour (à 08h00 et à 20h00). Il est opérationnel seul depuis des semaines sans problème.
Tableau 2 doit faire une extraction .csv de lui-même, et l'envoyer en pj à une autre liste de diffusion mail 1x par jour à 23h. Il est en phase de test pour le moment.
Les 2 automatismes fonctionnent très bien quand ils sont seuls.
Au début j'ai même fait des tests sur tableau 2 sans extraction csv ni pj, juste en lui faisant envoyer un mail test, donc avec un code vraiment très simple.
J'ai eu différents bugs en laissant les 2 tableaux tourner en même temps, mais en gros tableau 1 se retrouve bloqué (la macro ne fonctionne plus) parfois, ou fonctionne mais envoi une impression pdf de tableau 2 (chose que personne ne lui demande). Depuis que j'ai ajouté l'extraction .csv dans tableau 2, ce code qui fonctionne parfaitement seul, se retrouve à tout bloquer quand je le met en test sur le PC 24/24 suite erreur de compilation sur une des lignes de la partie extraction .csv. Et de fait, tableau 1 est bloqué dans son exécution aussi à cause de ça... j'ai également aussi eu des problèmes d'envoi multiples de mail (entre 3 et 8 dans la même minutes) sur tableau 1 et 2.
Enfin bref, c'est n'importe quoi.
Dans tous les cas ça fait que je n'ai malheureusement pas beaucoup de retour et donc de précision sur les bugs, car j'ai absolument besoin que tableau 1 fonctionne tout le temps, ce qui me limite dans les possibilité de tester les défaillances...
Est-ce que cela semble cohérent ou parlerait à quelqu'un? J'ai fait quelques recherches mais difficile de trouver les bons mots clés pour ça...
Pour les 2 codes:
Tableau 1
TABLEAU 2
Je pense qu'il y a beaucoup d'éléments pas forcément utile pour cibler le problème, mais je laisse plus ou moins tel qu'utilisé au cas où un expert d'ici verrais une fonction annexe susceptible de générer un bug.
Merci d'avance pour vos idées!
Je me retrouve confronté à un problème assez gênant lorsque je tente de faire fonctionner 2 classeurs différents contenant chacun une macro liée à un application.ontime, et qui me fait me demander s'il est même simplement techniquement possible de faire tourner 2 tableaux avec des macros sur le même PC.
Ils ne se déclenchent pas du tout aux même heures, l'un est un Today + Timevalue, et l'autre est un Now + Timevalue (je mets les codes ci-dessous).
Ces 2 tableaux sont situés dans un répertoire commun, pas dans le même dossier cela dit. Ils sont ouverts sur un PC qui tourne 24/24.
Tableau 1 doit faire une impression .pdf de lui-même et l'expédier en pj d'un mail 2 fois par jour (à 08h00 et à 20h00). Il est opérationnel seul depuis des semaines sans problème.
Tableau 2 doit faire une extraction .csv de lui-même, et l'envoyer en pj à une autre liste de diffusion mail 1x par jour à 23h. Il est en phase de test pour le moment.
Les 2 automatismes fonctionnent très bien quand ils sont seuls.
Au début j'ai même fait des tests sur tableau 2 sans extraction csv ni pj, juste en lui faisant envoyer un mail test, donc avec un code vraiment très simple.
J'ai eu différents bugs en laissant les 2 tableaux tourner en même temps, mais en gros tableau 1 se retrouve bloqué (la macro ne fonctionne plus) parfois, ou fonctionne mais envoi une impression pdf de tableau 2 (chose que personne ne lui demande). Depuis que j'ai ajouté l'extraction .csv dans tableau 2, ce code qui fonctionne parfaitement seul, se retrouve à tout bloquer quand je le met en test sur le PC 24/24 suite erreur de compilation sur une des lignes de la partie extraction .csv. Et de fait, tableau 1 est bloqué dans son exécution aussi à cause de ça... j'ai également aussi eu des problèmes d'envoi multiples de mail (entre 3 et 8 dans la même minutes) sur tableau 1 et 2.
Enfin bref, c'est n'importe quoi.
Dans tous les cas ça fait que je n'ai malheureusement pas beaucoup de retour et donc de précision sur les bugs, car j'ai absolument besoin que tableau 1 fonctionne tout le temps, ce qui me limite dans les possibilité de tester les défaillances...
Est-ce que cela semble cohérent ou parlerait à quelqu'un? J'ai fait quelques recherches mais difficile de trouver les bons mots clés pour ça...
Pour les 2 codes:
Tableau 1
VB:
Sub MAIL_TABLEAU_1()
' Cadencement de la diffusion (pour activer, cliquer sur l'icône Email dans le tableau une première fois).
Application.OnTime Now + TimeValue("12:00:00"), "MAIL_TABLEAU_1"
'Procédure rafraichissement des liaisons avec 2 autres tableaux data bases
Dim NomFich$, Wsh As Worksheet
NomFich = "chemin database 1"
For Each Wsh In ThisWorkbook.Worksheets
Wsh.Cells.Replace What:=NomFich, Replacement:=NomFich _
, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next
Dim NomFichB$, WshB As Worksheet
NomFichB = "Chemin data base 2"
For Each WshB In ThisWorkbook.Worksheets
WshB.Cells.Replace What:=NomFichB, Replacement:=NomFichB _
, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next
' Export du tableau en PDF:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"chemin extraction.pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
'
'Création nouveau mail :
Dim Outapp As Object
Dim Outmail As Object
Set Outapp = CreateObject("Outlook.Application")
Set Outmail = Outapp.CreateItem(0)
With Outmail
.SentOnBehalfOfName = "mail@expéditeur.com"
.To = "Liste@diffusion.com"
.Subject = "Suivi mis à jour le " & Date & " à " & Time
.HTMLBody = "Bonjour," & "<br><br>" & _
"Veuillez trouver ci-joint le suivi tel que connu au " & Date & " à " & Time & "<br><br>" & _
.Attachments.Add "chemin pièce jointe.pdf"
'
.Send
End With
'Nettoyage
Set Outmail = Nothing
Set Outapp = Nothing
'
End Sub
TABLEAU 2
Code:
Sub Tableau_2()
' Cadencement (pour activer, cliquer une première fois sur l'icône flèches dans le tableau).
Application.OnTime Today + TimeValue("23:00:00"), "Tableau_2"
'Mise à jour des liaisons
Dim NomFichA$, WshA As Worksheet
NomFichA = "Chemin data base 1"
For Each WshA In ThisWorkbook.Worksheets
WshA.Cells.Replace What:=NomFichA, Replacement:=NomFichA _
, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next
Dim NomFich$, Wsh As Worksheet
NomFich = "Chemin data base 2"
For Each Wsh In ThisWorkbook.Worksheets
Wsh.Cells.Replace What:=NomFich, Replacement:=NomFich _
, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next
' Export du tableau en CSV :
Dim Chemin As String, Fichier As String
Application.ScreenUpdating = False
Chemin = "Chemin extraction" & "\"
Fichier = "BILAN" & Format(Now, "yyyymm")
ThisWorkbook.Worksheets("Feuille 1").Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Chemin & Fichier, FileFormat:=xlCSV, Local:=True
ActiveWorkbook.Close
'Application.DisplayAlerts = True
'Création nouveau mail:
Dim Outapp As Object
Dim Outmail As Object
Set Outapp = CreateObject("Outlook.Application")
Set Outmail = Outapp.CreateItem(0)
With Outmail
'Choix adresse mail expéditeur:
.SentOnBehalfOfName = "Mail@expéditeur.com"
.To = "Liste@destinataires.com"
.Subject = "TEST Tableau 2 " & Date & " à " & Time
.HTMLBody = "Bonjour," & "<br><br>" & _
"Fonction diffusion du tableau 2 validée OK le " & Date & " à " & Time & "<br><br>"
.Attachments.Add Chemin & "\" & Fichier & ".csv"
'
.Send
End With
'Nettoyage
Set Outmail = Nothing
Set Outapp = Nothing
End Sub
Je pense qu'il y a beaucoup d'éléments pas forcément utile pour cibler le problème, mais je laisse plus ou moins tel qu'utilisé au cas où un expert d'ici verrais une fonction annexe susceptible de générer un bug.
Merci d'avance pour vos idées!