PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → OLE COM Excel
OLE COM Excel
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