|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Débuté par Mathieu, 30 avr. 2025 14:17 - Aucune réponse |
| |
| | | |
|
| |
Posté le 30 avril 2025 - 14:17 |
Bonjour, j'ai un code qui fonctionne bien, il crée un fichier Excel de type OLE dynamique (qui est un fichier HTML temporaire ouvert dans Excel) et ouvre un autre fichier Excel (qui existe déjà et qui est mon fichier final qui copie les données du fichier Excel temporaire). Quand je le lance à la main, j'ai aucun soucis mais si je le lance avec une tâche planifié sur un serveur Windows (afin que le programme se lance tous les jours automatiquement), celui ci plante. De ce que j'ai compris, c'est ces deux lignes qui font planter le programme :
finalWb est un objet OLE dynamique = xlApp>>Workbooks>>Open(sFichierExcel) tempWb est un objet OLE dynamique = xlApp>>Workbooks>>Open(sFichierHtml)
Et encore de ce que j'ai compris, c'est que ce type de variable fais appel a l'objet COM d'Excel, qui nécessite une session graphique (donc il faut qu'un utilisateur soit connecté sur le serveur, hors se n'est pas toujours le cas). Comment je peux faire afin de résoudre le problème ? Car j'ai bien envisagé d'utiliser le type xlsDocument qui fonctionne car je l'utilise dans une autre procédure sans soucis, seulement le problème dans cette procédure c'est que je dois ouvrir un fichier html (qui est déjà mis en forme etc) et que le type xlsDocument n'autorise pas l'ouverture de fichier HTML, donc je n'arrive pas a copier mon fichier HTML dans mon Excel. POuvez-vous m'aidez ? Voici mon code actuel :
Procedure OpenAllHtmlFiles(sDossier est une chaîne, sFichierExcel est une chaîne)
SI PAS fFichierExiste(sFichierExcel) ALORS ErreurAvecLog(100, "[OpenAllHtmlFiles] Le fichier Excel n'est pas accessible : " + sFichierExcel) RETOUR FIN
arrFichiers est un tableau de chaînes = ListeHtmlFiles(sDossier) SI Dimension(arrFichiers) = 0 ALORS ErreurAvecLog(100, "[OpenAllHtmlFiles] Rien à afficher (aucun fichier HTML trouvé)") RETOUR FIN
xlApp est un objet OLE dynamique = allouer objet automation "Excel.Application" SI ErreurDétectée ALORS ErreurAvecLog(100, "[OpenAllHtmlFiles] Impossible de lancer Excel en OLE Automation (OpenAllHtmlFiles)") RETOUR FIN xlApp>>Visible = Faux xlApp>>DisplayAlerts = Faux
SI xlApp = Null ALORS ErreurAvecLog(100, "[OpenAllHtmlFiles] Impossible de démarrer Excel en mode invisible.") RETOUR FIN
finalWb est un objet OLE dynamique = xlApp>>Workbooks>>Open(sFichierExcel) SI ErreurDétectée ALORS ErreurAvecLog(100, "[OpenAllHtmlFiles] Impossible d'ouvrir le fichier final (OpenAllHtmlFiles) : " + sFichierExcel) xlApp>>Quit() RETOUR FIN nNbFeuilles est un entier = finalWb>>Sheets>>Count tabFeuilles est un tableau associatif d'entiers
POUR i = 1 À nNbFeuilles sNomFeuille est une chaîne = finalWb>>Sheets>>Item(i)>>Name tabFeuilles[sNomFeuille] = i FIN
POUR TOUT sFichierHtml de arrFichiers tempWb est un objet OLE dynamique = xlApp>>Workbooks>>Open(sFichierHtml) sDateFeuille est une chaîne = ExtractDateFromFileName(sFichierHtml)
SI tabFeuilles[sDateFeuille]..Existe ALORS nIndexFeuille est un entier = tabFeuilles[sDateFeuille] finalWb>>Sheets>>Item(nIndexFeuille)>>Activate()
SI xlApp>>ActiveSheet>>Name <> sDateFeuille ALORS xlApp>>ActiveSheet>>Name = sDateFeuille FIN
tempWs est un objet OLE dynamique = tempWb>>Sheets(1) finalWs est un objet OLE dynamique = finalWb>>Sheets(sDateFeuille)
nLigneB est un entier = finalWs>>Cells(finalWs>>Rows>>Count, 2)>>END(-4162)>>Row nLigneD est un entier = finalWs>>Cells(finalWs>>Rows>>Count, 4)>>END(-4162)>>Row nLigneF est un entier = finalWs>>Cells(finalWs>>Rows>>Count, 6)>>END(-4162)>>Row
nLigneDebut est un entier = Max(nLigneB, nLigneD, nLigneF) + 2
ExtraireBootCatalogCorpsMail(finalWb, sDateFeuille, nLigneDebut, ChaîneVersDate(sDateFeuille))
iLigneDebutPremierTab est un entier = nLigneDebut + 4 tempWs>>Range("A8:J13")>>Copy(finalWs>>Range("A" + iLigneDebutPremierTab))
nDerniereLigneTmp est un entier = tempWs>>Cells(tempWs>>Rows>>Count, 1)>>END(-4162)>>Row iLigneDebutDeuxiemeTab est un entier = iLigneDebutPremierTab + 7 tempWs>>Range("A27:J" + nDerniereLigneTmp)>>Copy(finalWs>>Range("A" + iLigneDebutDeuxiemeTab))
AppliquerFiltreSurColonneC(finalWs, iLigneDebutDeuxiemeTab)
tempWb>>Close(Faux) tempWs = Null tempWb = Null FIN
FIN
POUR i = 1 _À_ finalWb>>Worksheets>>Count finalWb>>Worksheets(i)>>Activate finalWb>>ActiveSheet>>Columns("A:M")>>AutoFit finalWb>>ActiveSheet>>Range("B1:G1")>>Font>>Color = RVB(255,255,255) finalWb>>ActiveSheet>>Range("B1:G1")>>Font>>Bold = True
SI finalWb>>ActiveSheet>>Name = "Historique" ALORS finalWb>>ActiveSheet>>Range("A1:B1")>>Font>>Color = RVB(255,255,255) finalWb>>ActiveSheet>>Range("A1:B1")>>Font>>Bold = True FIN FIN
finalWb>>Save() finalWb>>Close() xlApp>>Quit()
xlApp = Null finalWb = Null |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|