OVH Cloud OVH Cloud

Modele Excel avec WinDev

8 réponses
Avatar
Alicia-Océane
Bonjour,

Apr=E8s ma gal=E8re pour les mod=E8les de documents Word que j'ai fin par
trouver, j'aurais besoin d'une id=E9e pour utiliser un mod=E8le Excel
depuis WinDev.
Je rappelle donc ce que je veux faire : ouvrir un document mod=E8le de
type Excel, et remplacer automatiquement le mot "NomClient" par la
valeur de ma table table_client.nomClient
Je n'utilise pas de fen=EAtre ActiveX.
Pour les mod=E8les Word, le code =E9tait :

autMonWord est un objet OLE "Word.Application"
LanceAppliAssoci=E9e("C:\MonAppli\Modeles\monModele.doc")
SI
HLitRecherchePremier(table_client,table_client.numeroClient,SAIS_CLIENT)
ALORS

autMonWord>>Selection>>Find>>Execute("NomClient",Faux,Vrai,Faux,Faux,Faux,V=
rai,1,Faux,table_client.nomClient,2)
FIN

Pour les mod=E8les Excel le rechercher/remplacer n'existe pas, j'ai donc
pens=E9 utiliser sLireValeur et EcrireValeur de la classe Excel. Pour le
moment j'ai test=E9 =E7a :

autMonExcel est un objet OLE "Excel.Application"
valcel est une cha=EEne
col est un caract=E8re
nLigne est un entier
LanceAppliAssoci=E9e("C:\MonAppli\Modeles\monModele.xls")
SI
HLitRecherchePremier(table_client,table_client.numeroClient,SAIS_CLIENT)
ALORS
POUR col =3D "A" A "Z"
POUR nLigne =3D 1 A 500
valcel =3D autMonExcel>>Range(col+nLigne)>>Value
SI valcel =3D "CLT_IDCLIENT" ALORS
autMonExcel>>Range(col+nLigne)>>Value =3D table_client.nomClient
FIN
FIN
FIN
FIN

La recherche et le remplacement de la valeur fonctionnent bien, pour la
ligne c'est bon mais c'est pour la colonne que je suis bloqu=E9e, car je
veux faire toutes les colonnes de "A" =E0 "Z" mais bien s=FBr le POUR col
=3D "A" =E0 "Z" =E7a ne marche pas car on ne peut pas faire ++ sur une
colonne.
Donc quelqu'un pourrait-il me dire comment tester chaque colonne, ou
alors me sugg=E9rer une tout autre id=E9e pour mon mod=E8le ?
Merci d'avance.

8 réponses

Avatar
Pierre BOUSQUET
pour b=1 a 26
trace(Caract(64+b))
FIN

Alicia-Océane vient de nous annoncer :
Bonjour,

Après ma galère pour les modèles de documents Word que j'ai fin par
trouver, j'aurais besoin d'une idée pour utiliser un modèle Excel
depuis WinDev.
Je rappelle donc ce que je veux faire : ouvrir un document modèle de
type Excel, et remplacer automatiquement le mot "NomClient" par la
valeur de ma table table_client.nomClient
Je n'utilise pas de fenêtre ActiveX.
Pour les modèles Word, le code était :

autMonWord est un objet OLE "Word.Application"
LanceAppliAssociée("C:MonAppliModelesmonModele.doc")
SI
HLitRecherchePremier(table_client,table_client.numeroClient,SAIS_CLIENT)
ALORS

autMonWord>>Selection>>Find>>Execute("NomClient",Faux,Vrai,Faux,Faux,Faux,Vrai,1,Faux,table_client.nomClient,2)
FIN

Pour les modèles Excel le rechercher/remplacer n'existe pas, j'ai donc
pensé utiliser sLireValeur et EcrireValeur de la classe Excel. Pour le
moment j'ai testé ça :

autMonExcel est un objet OLE "Excel.Application"
valcel est une chaîne
col est un caractère
nLigne est un entier
LanceAppliAssociée("C:MonAppliModelesmonModele.xls")
SI
HLitRecherchePremier(table_client,table_client.numeroClient,SAIS_CLIENT)
ALORS
POUR col = "A" A "Z"
POUR nLigne = 1 A 500
valcel = autMonExcel>>Range(col+nLigne)>>Value
SI valcel = "CLT_IDCLIENT" ALORS
autMonExcel>>Range(col+nLigne)>>Value = table_client.nomClient
FIN
FIN
FIN
FIN

La recherche et le remplacement de la valeur fonctionnent bien, pour la
ligne c'est bon mais c'est pour la colonne que je suis bloquée, car je
veux faire toutes les colonnes de "A" à "Z" mais bien sûr le POUR col
= "A" à "Z" ça ne marche pas car on ne peut pas faire ++ sur une
colonne.
Donc quelqu'un pourrait-il me dire comment tester chaque colonne, ou
alors me suggérer une tout autre idée pour mon modèle ?
Merci d'avance.



--
Pierre BOUSQUET

" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
Avatar
Alicia-Océane
merci, ça fonctionne pour les colonnes aussi maintenant. Par contre,
j'ai droit à un message d'erreur (il me marque cette erreur quand je
ferme l'application, pourtant il a bien rempli le modèle en
remplaçant les champs que je voulais) :

" En tentant d'invoquer la méthode <Range>, l'objet Automation/ActiveX
a renvoyé l'erreur suivante :
'Erreur 80010001' "

il s'agit apparemment d'une erreur sur la ligne :
valcel = autMonExcel>>Range(Caract(64+col)+nLigne)>>Value

Quelqu'un saurait me dire d'où ça vient et comment faire pour enlever
cette erreur ?
Avatar
Pierre BOUSQUET
ce n'est pas vraiment une réponse à ton problème mais voici ce que je
fais avant toutes actions OLE :

MaFeuilleXLS>>DisplayAlerts(Faux)

comme ca pas de message d'erreur


Alicia-Océane a exprimé avec précision :
merci, ça fonctionne pour les colonnes aussi maintenant. Par contre,
j'ai droit à un message d'erreur (il me marque cette erreur quand je
ferme l'application, pourtant il a bien rempli le modèle en
remplaçant les champs que je voulais) :

" En tentant d'invoquer la méthode <Range>, l'objet Automation/ActiveX
a renvoyé l'erreur suivante :
'Erreur 80010001' "

il s'agit apparemment d'une erreur sur la ligne :
valcel = autMonExcel>>Range(Caract(64+col)+nLigne)>>Value

Quelqu'un saurait me dire d'où ça vient et comment faire pour enlever
cette erreur ?



--
Pierre BOUSQUET

" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
Avatar
Alicia-Océane
je me réponds à moi-même sur cette bizarrerie. En fait il me sort
cette erreur lorsque je ferme le fichier qui vient d'être créé avant
qu'il ait totalement fini la parcours, semble-t-il. Car si je le laisse
ouvert + longtemps, il ne dit rien quand je le ferme.
Y a-t-il une solution ou faut-il que je prie pour que l'utilisateur
attende assez longtemps avant de fermer son fichier ?
Avatar
Alicia-Océane
ah, merci, je vais essayer !
Avatar
[Bernard Vessiot]
Alicia-Océane a exprimé avec précision :
je me réponds à moi-même sur cette bizarrerie. En fait il me sort
cette erreur lorsque je ferme le fichier qui vient d'être créé avant
qu'il ait totalement fini la parcours, semble-t-il. Car si je le laisse
ouvert + longtemps, il ne dit rien quand je le ferme.
Y a-t-il une solution ou faut-il que je prie pour que l'utilisateur
attende assez longtemps avant de fermer son fichier ?



bonjour,
peut être une piste :
1) tu previent l'utilisateur que le fichier est en cours de
constitution
2) tu fabriques le fichier en laissant excel invisible
3) a la fin de la creation: information a l'utilisateur et proposition
d'ouverture ?

bon dev

@+++

--
[Bernard Vessiot]
34980 Saint Gély du Fesc
Avatar
Pierre BOUSQUET
MaFeuilleXLS>>Visible = Faux

Alicia-Océane avait soumis l'idée :
je me réponds à moi-même sur cette bizarrerie. En fait il me sort
cette erreur lorsque je ferme le fichier qui vient d'être créé avant
qu'il ait totalement fini la parcours, semble-t-il. Car si je le laisse
ouvert + longtemps, il ne dit rien quand je le ferme.
Y a-t-il une solution ou faut-il que je prie pour que l'utilisateur
attende assez longtemps avant de fermer son fichier ?



--
Pierre BOUSQUET

" Ne me dites pas que ce problème est difficile.
S'il n'était pas difficile, ce ne serait pas un problème. "
Avatar
Alicia-Océane
ça fonctionne ! :-)
Merci beaucoup à tous pour l'aide que vous m'avez apportée.