PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Intégration Word et Excel
Intégration Word et Excel
Débuté par Arnaud, 18 mai 2026 16:52 - 6 réponses
Posté le 18 mai 2026 - 16:52
Bonjour,

Pour une application, je voudrai ouvrir directement les documents Word et Excel.
Le souci est que mon client a beaucoup de fichier encore au format DOC et XLS.
Les composants Windev n'autorise que DOCX et XLSX.
Avez-vous déjà rencontré ce souci et comment éventuellement les convertir ?

Merci d'avance
Posté le 19 mai 2026 - 20:16
Bonjour,
J'ai été confronté à ce problème il y a quelques années (en ce qui concerne Word.) Je suis passé par un objet automation.
Le principe est d'ouvrir le document .doc est de le sauvegarder en .docx
A la volée
Procedure DocVersDocx(saCheminDoc est chaîne)
//Convertit un document Word au format .doc dont le chemin est dans saCheminDoc (e.g. C:\Temp\MonDoc.doc) en fichier .docx (C:\Temp\MonDoc.docx)
//saCheminDoc est passé par adresse, le changement effecyu dans la procédure sera donc utilisable tel quel dans la fonction appelante
oDocWord est un objet automation dynamique

oDocWord = allouer un objet automation "word.Application"

oDocWord>>Visible = Faux //Tout se passe sans la fenêtre Word

oDocWord>>Documents>>Open(saCheminDoc)

saCheminDoc =ChaîneConstruit("%1x",saCheminDoc)
Word>>ActiveDocument>>SaveAs(saCheminDoc,16) //16 correspond au format par défaut de Word (docx)

oDocWord>>ActiveDocument>>Close
oDocWord>>quit

Pour Excel, le pricipe devrait être le même
Membre enregistré
1 439 messages
Posté le 20 mai 2026 - 17:51
Il y a je crois une coquile dans ton code

Procedure DocVersDocx(saCheminDoc est chaîne)
//Convertit un document Word au format .doc dont le chemin est dans saCheminDoc (e.g. C:\Temp\MonDoc.doc) en fichier .docx (C:\Temp\MonDoc.docx)
//saCheminDoc est passé par adresse, le changement effecyu dans la procédure sera donc utilisable tel quel dans la fonction appelante
oDocWord est un objet automation dynamique

oDocWord = allouer un objet automation "word.Application"

oDocWord>>Visible = Faux //Tout se passe sans la fenêtre Word

oDocWord>>Documents>>Open(saCheminDoc)

saCheminDoc =ChaîneConstruit("%1x",saCheminDoc)
oDocWord>>ActiveDocument>>SaveAs(saCheminDoc,16) //16 correspond au format par défaut de Word (docx)


oDocWord>>ActiveDocument>>Close
oDocWord>>quit


--
Bertin CARRIERE
SRL GDPR.Zen-Project.be
support@zen-project.be
www.zen-project.be www.linkedin.com/in/bertincarriere www.binaire.be
Solution PEPPOL Belgique, Comptabilité Peppol LUCA
+32 (0)71 35.78.92

Repreneur d'activités
Membre enregistré
1 439 messages
Posté le 20 mai 2026 - 17:52
Mais je me suis permis de le copier dans ma collection de procedure Outil.

Merci

--
Bertin CARRIERE
SRL GDPR.Zen-Project.be
support@zen-project.be
www.zen-project.be www.linkedin.com/in/bertincarriere www.binaire.be
Solution PEPPOL Belgique, Comptabilité Peppol LUCA
+32 (0)71 35.78.92

Repreneur d'activités
Membre enregistré
4 403 messages
Posté le 20 mai 2026 - 19:09
Bertin - Zen-Project a écrit :
Il y a je crois une coquile dans ton code

Oui en effet, ODocWord à la place de Word
Voici la version propre et commentée avec la ref pour les code de format Word (pour Excel, il faudra vérifier.)
// Résumé : Convertit un .doc en .docx
//
// Syntaxe :
//DocVersDocx (<saCheminDoc> est chaîne)
//
// Paramètres :
// E/S
// saCheminDoc (chaîne ANSI) : Chemin du .doc puis du .docx (on utilise un passage par adresse donc
// la modification de saCheminDoc se répercutera dans la fonction appelante)
//
// Exemple :
//saChemin est une chaîne
//saExtension est chaine
//
//// Ouvre le sélecteur de fichiers
//saChemin = fSélecteur("", "", "Sélectionnez un fichier...",...
//"Document Word" + TAB + "*.doc;*docx" + RC + "Classeur Excel" +...
//TAB + "*.xls;*.xlsx", "*.doc;*docx")
//
//saExtension=ExtraitChaîne(saChemin,1,".",DepuisFin)
//
//SELON Minuscule(saExtension)
// CAS "doc"
// DocVersDocx(saChemin)
// CAS "xls"
// XlsVerXlsx(saChemin)
//FIN


Procedure DocVersDocx(saCheminDoc est chaîne)

autMonDoc est objet automation "Word.Application"
//On interdit l'ouverture de Word
autMonDoc>>Visible = Faux

autMonDoc>>Documents>>Open(saCheminDoc)
saCheminDoc= ChaîneConstruit("%1x",saCheminDoc)

//16 correspond à la valeur de wdFormatDocument qui permet l'enregistrement
//au format par défaut de Word (.docx) cf https://learn.microsoft.com/fr-fr/office/vba/api/word.wdsaveformat
autMonDoc>>ActiveDocument>>SaveAs2(saCheminDoc,16)

autMonDoc>>ActiveDocument>>Close
autMonDoc>>quit


Bertin - Zen-Project a écrit :
Mais je me suis permis de le copier dans ma collection de procedure Outil.

C'est fait pour ça

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 20 mai 2026 - 19:12
Membre enregistré
4 403 messages
Posté le 21 mai 2026 - 16:03
Comme je l'expliquais, le principe est le même pour Excel. Il suffit d'utiliser un objet Workbooks à la place d'un objet Document
FONCTION XlsVersXlsx(saCheminClasseur est chaîne) : booléen

autMonClasseur est objet automation "Excel.Application"
saMsgErreur est chaîne

//On prépare le message qui sera créé en cas d'erreur ou d'exception
saMsgErreur="Une %1 a eu lieu dans %2%3%1 n° %4%3%5"

//On interdit l'ouverture d'Excel
autMonClasseur>>Visible = Faux

autMonClasseur>>Workbooks>>Open(saCheminClasseur)
saCheminClasseur= ChaîneConstruit("%1x",saCheminClasseur)

//51 correspond à la valeur de xlOpenXMLWorkbook qui permet l'enregistrement
//au format .xlsx cf https://learn.microsoft.com/fr-fr/office/vba/api/excel.xlfileformat
autMonClasseur>>ActiveWorkbook>>SaveAs(saCheminClasseur,51)

autMonClasseur>>ActiveWorkbook>>Close
autMonClasseur>>quit

RENVOYER Vrai

CAS ERREUR:
SELON ErreurInfo(errCode)
//Récupérer le code des erreur connues pour avoir un message spécifique
AUTRE CAS
//Cas general
saMsgErreur=ChaîneConstruit(saMsgErreur,"Erreur",dbgInfo(dbgTraitement),CRLF,...
ErreurInfo(errCode),ErreurInfo(errMessage))
FIN
ErreurPropage(saMsgErreur)
RENVOYER Faux
CAS EXCEPTION:
SELON ExceptionInfo(errCode)
//Récupérer le code des erreur connues pour avoir un message spécifique
AUTRE CAS
//Cas général
saMsgErreur=ChaîneConstruit(saMsgErreur,"Exception",dbgInfo(dbgTraitement),CRLF,...
ExceptionInfo(errCode),ExceptionInfo(errMessage))
FIN
ExceptionPropage(saMsgErreur)
RENVOYER Faux


--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 21 mai 2026 - 16:05
Posté le 27 mai 2026 - 16:23
Voroltinquo a écrit :
Comme je l'expliquais, le principe est le même pour Excel. Il suffit d'utiliser un objet Workbooks à la place d'un objet Document
FONCTION XlsVersXlsx(saCheminClasseur est chaîne) : booléen

autMonClasseur est objet automation "Excel.Application"
saMsgErreur est chaîne

//On prépare le message qui sera créé en cas d'erreur ou d'exception
saMsgErreur="Une %1 a eu lieu dans %2%3%1 n° %4%3%5"

//On interdit l'ouverture d'Excel
autMonClasseur>>Visible = Faux

autMonClasseur>>Workbooks>>Open(saCheminClasseur)
saCheminClasseur= ChaîneConstruit("%1x",saCheminClasseur)

//51 correspond à la valeur de xlOpenXMLWorkbook qui permet l'enregistrement
//au format .xlsx cf https://learn.microsoft.com/fr-fr/office/vba/api/excel.xlfileformat
autMonClasseur>>ActiveWorkbook>>SaveAs(saCheminClasseur,51)

autMonClasseur>>ActiveWorkbook>>Close
autMonClasseur>>quit

RENVOYER Vrai

CAS ERREUR:
SELON ErreurInfo(errCode)
//Récupérer le code des erreur connues pour avoir un message spécifique
AUTRE CAS
//Cas general
saMsgErreur=ChaîneConstruit(saMsgErreur,"Erreur",dbgInfo(dbgTraitement),CRLF,...
ErreurInfo(errCode),ErreurInfo(errMessage))
FIN
ErreurPropage(saMsgErreur)
RENVOYER Faux
CAS EXCEPTION:
SELON ExceptionInfo(errCode)
//Récupérer le code des erreur connues pour avoir un message spécifique
AUTRE CAS
//Cas général
saMsgErreur=ChaîneConstruit(saMsgErreur,"Exception",dbgInfo(dbgTraitement),CRLF,...
ExceptionInfo(errCode),ExceptionInfo(errMessage))
FIN
ExceptionPropage(saMsgErreur)
RENVOYER Faux


--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM


Un grand merci à tous