PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → Excel enregistrer sous
Excel enregistrer sous
Started by Calimero, Sep., 23 2023 11:42 AM - 13 replies
Registered member
90 messages
Posted on September, 23 2023 - 11:42 AM
Bonjour,

Après avoir cherché un peu partout, je ne trouve pas de fonction enregistrer sous depuis un fichier Excel. ( je suis sous windev 25 )

Voilà mon souci :

J'ouvre un fichier "modèle", je remplis mes lignes mais je voudrais que ce modèle ne se modifie pas mais s'enregistre sous un autre nom de fichier.

N'y a t-il pas une fonction du style XLSSauveVers ?

Sinon, je pourrais aussi remplir mon fichier modèle, l'enregistrer mais il faudrait que toutes les lignes se suppriment la prochaine fois que je l'ouvre avant de le remplir de nouveau et ça, je ne sais pas faire du style supprime toutes les lignes depuis la ligne 3 jusqu'à la fin du fichier.

Dans l'attente de vos lumières

Merci d'avance
Registered member
4,256 messages
Posted on September, 25 2023 - 10:05 AM
Bonjour,
Cette option est disponible via la méthode EnregistrerSous de la classe cExcel (disponible dans l'exemple didactique WD Pilotage de Excel.)

--
Il y a peut être plus simple, mais, ça tourne
Registered member
90 messages
Posted on September, 25 2023 - 12:49 PM
Bonjour Voroltinquo,

Mon post date de 2 jours, je ne comprends pas qu'il soit seulement en ligne.

En tout cas, merci pour ta réponse.

J'avais trouvé dans un premier temps la commande pour supprimer les lignes de mon fichier Excel mais c'était extrêmement long pour 60 000 lignes.
J'ai donc pris connaissance de cette fameuse Classe Excel.

On ne trouve pas beaucoup d'aide sur le sujet, surtout pour la syntaxe mais j'ai réussi à me débrouiller avec l'exemple sur windev.
J'ouvre donc mon modèle, je remplis et je sauvegarde sous un autre nom. Tout ce que je voulais, c'est très rapide et ça m'apprend encore une nouvelle fonctionnalité.

Merci et à bientôt
Registered member
4,256 messages
Posted on September, 25 2023 - 2:59 PM
En ce qui concerne le post, il n'y a pas de modo le WE. Pas de modo, pas de publication. Il en va de même le soir, ou tôt le matin.

--
Il y a peut être plus simple, mais, ça tourne
Message modified, September, 25 2023 - 3:00 PM
Registered member
949 messages
Posted on September, 25 2023 - 11:56 PM
Bonjour,
Voroltinquo a apporté la réponse (pas surprenant). ;)
Ceci dit, j'ai lu la solution que tu souhaitais mettre en place dans ta question #1, je cite : Sinon, je pourrais aussi remplir mon fichier modèle, etc...
Pas top du tout, en revanche tu aurais pu faire un fCopieFichier du fichier modèle sous un autre nom et ouvrir cette copie pour la modifier.

Bon c'est juste pour info.
Cdlt
Registered member
90 messages
Posted on September, 28 2023 - 2:23 PM
Bonjour à tous,

Je reviens sur la classe Excel. Je cherche partout et je ne trouve pas d'aides sur le sujet. Même dans la doc ( Windev 25 ), on sait que ça existe mais rien de plus. J'ai bien trouvé un post de 2011 mais ça semble assez obsolète, donc si quelqu'un pouvait m'expliquer un peut comment ça fonctionne ou si je peux trouver une aide quelque part. Ne serait ce que sur la syntaxe.

Donc voici ce que je cherche à faire, ouvrir un classeur "Modèle", remplir le classeur, le fermer sans qu'il enregistre mais qu'il enregistre sous un autre nom.

Pour faire ça, j'ai déclaré
gpclExcel est un objet dynamique CExcel dans ma fenêtre

j'ai mis en fin d'initialisation
gpclExcel = allouer un CExcel(Vrai)
gpclExcel:EstVisible()


dans mon bouton, j'ai mis ( je simplifie )

monmodele est un xlsDocument
gpclExcel :OuvrirClasseur(monmodele)

i est un entier = 2
HLitPremier(fournisseur)

TANTQUE PAS HEnDehors(fournisseur)
i++
gpclExcel:EcrireValeur(i"A",fournisseur.reference) // je ne sais pas quelle est la syntaxe du EcrireValeur donc A3
HLitSuivant(fournisseur)
FIN

gpclExcel:Enregistrer("C:\Mes Projets\exe\mise a jour\catalogue fournisseur.xlsx")



A votre bon coeur ;-)
Registered member
949 messages
Posted on September, 28 2023 - 5:59 PM
Calimero

Voir ici :
xlsSauve (Fonction)
https://doc.pcsoft.fr/?1000018057

// On va mettre OK dans la case A 25
MaFeuille[25,"A"] = "OK"

si tu as besoin de gérer la feuille dans le classeur :
xlsFeuilleEnCours (Fonction)
https://doc.pcsoft.fr/?3080022

pour enregistrer sous, tu donnes le chemin et le nom du fichier (ou un nouveau nom dans le même chemin)
Dans ton code, vérifies que le nom n'est pas égal au nom du modèle pour ne pas l'écraser.
Cdlt
Message modified, September, 28 2023 - 6:06 PM
Registered member
90 messages
Posted on September, 28 2023 - 8:05 PM
Bonjour Cédric,

Encore merci pour ton aide.
Je m'étais plutôt focalisé sur les "Classe Excel" mais si je peux faire autrement...

Donc, là, ça fait 2 heures que j'essaye avec xlssauve mais je n'y arrive pas.

Voilà ce que j'ai fait ( en dernier ) parce que j'ai essayé plein de choses différentes.

Est ce que tu saurais corriger? Serait-ce un problème avec xlsFeuilleEnCours ?

Si je n'ouvre pas "miseajour", il me dit qu'il ne le trouve pas


//Déclaration du fichier modèle
modele est un xlsDocument
Fichiermodele est une chaîne = "C:\Mes Projets\Exe\modele\Modèle.xlsx"

//Déclaration du fichier de destination
miseajour est un xlsDocument
fichiermiseajour est une chaîne = "C:\Mes Projets\Exe\MISES A JOUR\mise à jour.xlsx"

//Ouverture des 2 fichiers
miseajour = xlsOuvre(fichiermiseajour,xlsEcriture)
modele = xlsOuvre(Fichiermodele,xlsEcriture)

//j'écris en A3
modele [3,"A"] = "OK"

nFeuilleencours est un entier = xlsFeuilleEnCours(modele)

//Je sauvegarde la mise à jour
xlsSauve(miseajour)

//Je ferme modele sans sauvegarder
xlsFerme(modele)

LanceAppliAssociée(fichiermiseajour)
Registered member
90 messages
Posted on September, 28 2023 - 8:07 PM
Voroltinquo a écrit :
En ce qui concerne le post, il n'y a pas de modo le WE. Pas de modo, pas de publication. Il en va de même le soir, ou tôt le matin.

--
Il y a peut être plus simple, mais, ça tourne
Message modifié, 25 septembre 2023 - 15:00

Merci pour tes éclaircissements Voroltinquo.
Je comprends mieux.

Ce qui est dommage aussi est que je n'ai pas de notifications quand quelqu'un répond ou poste quelque chose et c'est pourtant coché.
Registered member
949 messages
Posted on September, 28 2023 - 10:18 PM
Voici le code :
CompleteRep ajoute automatiquement le \ si il est manquant
fRepExe pointe sur le répertoire de l'application (conseillé pour éviter la modification des chemins lors de la création de l'exe de l'application)

sFichier est un xlsDocument
sFichiermodele est une chaîne = ComplèteRep(fRepExe) + "modele\Modele.xlsx"
sfichiermiseajour est une chaîne = ComplèteRep(fRepExe) + "MISES_A_JOUR\mise_a_jour.xlsx" //il est fortement conseillé d'éviter les noms de fichiers avec des espaces ou des caractères accentués (pour les répertoires aussi)

// On ouvre seulement le modèle qui sera enregistré sous un autre nom et/ou à un autre emplacement
sFichier = xlsOuvre(sFichiermodele, xlsEcriture)

bFeuilleEnCours est un booléen = xlsFeuilleEnCours(sFichier, 1) // On travaille sur la feuille 1

sFichier[3,"A"] = "OK" //On écrit en A3

//On sauvegarde sous un autre nom, on pourrait sécuriser d'avantage en vérifiant : si fFichierExiste(sfichiermiseajour) = faux Alors
xlsSauve(sFichier, sfichiermiseajour)

//On ferme le nouveau fichier (le modèle a été fermé automatiquement lors de la sauvegarde sous un autre nom)
xlsFerme(sFichier)

LanceAppliAssociée(sfichiermiseajour)
Message modified, September, 28 2023 - 10:21 PM
Registered member
90 messages
Posted on September, 29 2023 - 12:32 AM
Merci, c'est parfait.
Je ne connaissais pas fRepExe, ça va effectivement me faciliter la vie parce que je travaille avec énormément de dossiers et fichiers et j'ai bien noté aussi d'éviter les espaces et accentuation..

je pense avoir bien compris le déroulement de l'opération. Juste une petite question : pourquoi FeuilleEnCours est un booléen et pas un entier ?

Grâce à toi, je viens de faire un grand pas dans l'élaboration de mon projet. Merci beaucoup ;-)
Registered member
949 messages
Posted on September, 29 2023 - 10:05 AM
Concernant le booléen :
on utilise ici la fonction xlsFeuilleEnCours en modification de la feuille en cours. Dans ce cas, la fonction ne renvoie que Vrai (1) ou Faux (0) donc inutile de déclarer un entier qui prend plus de place en mémoire.
Pour info, on peut juste écrire :
xlsFeuilleEnCours(sFichier, 1)
au lieu de :
bFeuilleEnCours est un booléen = xlsFeuilleEnCours(sFichier, 1)

Si on souhaite connaître le nom de la feuille en cours, la syntaxe est :
nFeuilleEnCours est un entier = xlsFeuilleEnCours(sFichier)
car dans ce cas la fonction renvoie le numéro de la feuille (un booléen ne suffit pas).
Cdlt
Message modified, September, 29 2023 - 10:06 AM
Registered member
90 messages
Posted on October, 01 2023 - 11:40 AM
Merci Cédric.

Impressionnant. Comment on fait pour apprendre tout ça ? Je parcours beaucoup de tutos, je lis la doc, j'ai fait quelques formations mais c'est toujours très succinct. As tu des pistes où on peut apprendre plus en profondeur les possibilités de windev ?
Il me manque beaucoup d'informations pour tout ce que je veux faire.
A bientôt parce que je m'engouffre dans un projet et je ne sais absolument pas comment je vais coder mais après de longues recherches, je pense que j'aurai encore besoin de votre aide ;-)
Registered member
949 messages
Posted on October, 02 2023 - 9:48 AM
Bonjour Calimero,
Bon, ma réponse de dimanche est partie aux oubliettes donc je recommence (les joies du forum le week-end).
En principe, je préfère ne pas agir en dehors du forum, mais si tu peux me fournir une adresse mail (par prudence, pas ton adresse principale), j'aurai effectivement des choses intéressantes à te transmettre.
Cdlt