cs_clothilde
Messages postés15Date d'inscriptiondimanche 20 mars 2005StatutMembreDernière intervention 4 avril 2005
-
31 mars 2005 à 21:50
cs_clothilde
Messages postés15Date d'inscriptiondimanche 20 mars 2005StatutMembreDernière intervention 4 avril 2005
-
4 avril 2005 à 17:20
Bonsoir tout le monde,
je ne savais pas dans quelle rubrique poster ce sujet, je l'ai donc mis dans "au secours".
Je travaille avec Visual C++, j'ai créé une appli qui, au terme de diverses manip, vient écrire son compte rendu dans un fichier excel.
Jusque là pas de soucis. J'accès bien à excel, je crée bien le fichier si nécessaire et je sauvegarde via une ligne du style :
worksheet->SaveAs(cheminDeSauvegarde);
Lorsque le fichier n'existe pas, aucun soucis, le fichier est créé et excel est fermé ensuite par un close.
Comme je souhaite que cette manipe soit faite de façon transparente pour l'utilisateur, je n'affiche pas excel.
Mon soucis réside dans le SaveAs. En effet, comme je viens de le dire, lorsque le fichier n'existe pas, c'est ok.
Par contre, lorsque le fichier existe, je complète son contenu avec les nouvelles infos, pas de soucis. Mais étant donné qu'il s'agit d'un SaveAs, comme tout SaveAs qui se respecte, il me demande, par l'intermédiaire d'une boite de dialogue, si je veux remplacer le fichier existant.
La transparence est foutue :-(
Etant donné que si le fichier existe je l'ouvre pour y ajouter des données, je souhaiterais pouvoir le sauver à la méthode du Save, c'est à dire sans poser de question.
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 4 avril 2005 à 09:27
Bonjour Clothilde,
Désolé de ma réponse tardive. Je me demande si nous sommes bien sur la bonne voie... J'ai en effet découvert une propriété qui définit (sous Excel 97 mais cela doit fonctionner sur les versions suivantes) pour éviter la boîte de dialogue :
cs_clothilde
Messages postés15Date d'inscriptiondimanche 20 mars 2005StatutMembreDernière intervention 4 avril 2005 1 avril 2005 à 14:06
Salut Meech,
tout d'abord merci pour le lien, j'ai eu beau chercher je n'avais pas trouvé (mettons ça sur le dos de la fatigue ;-) )
Pour répondre à ta question, oui j'ai bien mis visible à False. L'environnement Excel n'apparaît pas à l'utilisateur. Seule la boîte de dialogue de confirmation d'enregistrement du fichier apparaît.
Alors effectivement, grâce au lien que tu viens de m'indiquer, je constate que la méthode Save est une méthode du workbook et non pas du sheet. Ce qui est déjà très intéressant.
En utilisant la méthode Save correctement appliquée, il y a une évolution : la dialogue box n'affiche plus "il existe déjà un fichier machin.xls, voulez-vous le remplacer ?" mais "Voulez-vous sauvegarder les modifications apportées au fichier machin.xls", ce qui en soit est déjà un net progrès car le deuxième message est moins inquiétant d'un point de vue utilisateur.
Mais cela ne résoud pas entièrement le problème. L'idéal serait de ne pas avoir du tout cette dialogue box.
Toujours avec le lien que tu m'as indiqué, je vois que la méthode SaveAs peut s'appliquer au wookbook au lieu du sheet, avec un paramètre suplémentaire qui est le paramètre ConflictResolution . Ce paramètre semble être ce que je recherche.
Je suppose qu'en lui passant la valeur xlLocalSessionChanges je devrais pouvoir forcer l'enregistrement des modifications sans afficher de dialog box.
Et là je sèche de nouveau, comment faire pour passer ce paramètre ?
A la compilation la constante n'est pas reconnue (avec un x ou un X d'ailleurs)
D'autre part, quelle valeur faut-il passer aux autres paramètres pour que leur valeur par défaut soit conservée ? est-ce que NULL fait l'affaire ou surtout pas ?
J'ai essayé de chercher, mais j'avoue bloquer sur ce point.
Si tu as la solution, je t'en serais reconnaissante ;-)
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 1 avril 2005 à 15:09
Re-bonjour,
A priori, d'après ce que j'ai pu trouver, en C ou C++ (ou quel que soit le langage, en fait...),
xlLocalSessionChanges est une macro définie du genre :
#define xlLocalSessionChanges 2
... ce qui me porte à dire qu'en spécifiant 2 dans l'argument concerné, tu obtiendras peut-être une solution à ton problème. En effet, MSDN lui-même n'explique-t-il pas que "xlLocalSessionChanges (automatically accept the local users changes)" ?
Bref, en gros, xlLocalSessionChanges est sans doute une macro non spécifiée dans un des nombreux fichiers d'en-têtes fourni avec Visual C++...
En espérant que tu vois le bout du tunnel,
Ciao.
PS. Dans l(hypothèse où cela fonctionne enfin, n'oublies pas de valider ma réponse !
Vous n’avez pas trouvé la réponse que vous recherchez ?
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 1 avril 2005 à 15:10
Re-bonjour,
A priori, d'après ce que j'ai pu trouver, en C ou C++ (ou quel que soit le langage, en fait...),
xlLocalSessionChanges est une macro définie du genre :
#define xlLocalSessionChanges 2
... ce qui me porte à dire qu'en spécifiant 2 dans l'argument concerné, tu obtiendras peut-être une solution à ton problème. En effet, MSDN lui-même n'explique-t-il pas que "xlLocalSessionChanges (automatically accept the local users changes)" ?
Bref, en gros, xlLocalSessionChanges est sans doute une macro non spécifiée dans un des nombreux fichiers d'en-têtes fourni avec Visual C++...
En espérant que tu vois le bout du tunnel,
Ciao.
PS. Dans l'hypothèse où cela fonctionne enfin, n'oublies pas de valider ma réponse !
cs_clothilde
Messages postés15Date d'inscriptiondimanche 20 mars 2005StatutMembreDernière intervention 4 avril 2005 2 avril 2005 à 14:29
:-(
je reste bloquée, je n'arrive pas à passer l'argument à la méthode parmis les 11 arguments requis, j'ai cherché un peu partout mais aucune solution :-(
cs_clothilde
Messages postés15Date d'inscriptiondimanche 20 mars 2005StatutMembreDernière intervention 4 avril 2005 4 avril 2005 à 15:26
Salut Meech,
en fait l'AlertBeforeOverwriting concerne l'écrasement des cellules et non pas l'écrasement des fichiers semblerait-il.
Toujours est-il qu'en travaillant sur cette dernière option j'ai repris un peu mon code et je l'ai modifié de la sorte :
excel->PutVisible (
false);
Excel::_WorkbookPtr workbook;
if (!existant) { workbook = excel->Workbooks->Add(
static_cast<
long>(Excel::xlWorksheet));}
if (existant) { workbook = excel->Workbooks->Open (cheminDeSauvegarde); }
où existant est un booléen permettant de savoir si le fichier existe déjà ou non
puis je fais mes manipe et je fais un
worksheet->SaveAs(cheminDeSauvegarde);
si le fichier n'existait pas au départ
ou un
workbook->Save();
si le fichier existait.
Et là ça marche. Il me semble que j'avais fait ça dès ton premier indice, mais apparemment j'avais dû écrire workbook->Save; qui fonctionne mais qui fait apparaître la dialogue d'après les essais que j'ai pû faire.
En tout cas merci pour ton aide, merci à BruNews également.