Page 1 sur 1

[R] Fermeture d'un Book exel sans le sauvegarder et desactiver la boite de dialog

Posté : jeu. 09 juin 2022 16:36
par Nyco
Bonjour à tous,
je suis en train de faire un script qui parcoure une liste de fichier excel, il les ouvre, défini une zone d'impression, les exporte en PDF puis les ferme.
Mon problème est le suivant :lorsque j'ouvre un fichier en lecture seule ou que je souhaite le fermer sans enregistrer, la boite de dialogue suivante " Voulez-vous enregistrer les modifications .... " s'affiche automatiquement. Cette boite de dialogue empêche l'éxcécution de la fin du code. Est il possible de s'affranchir de cette boite de dialogue ?

je vous remercie de l'attention portée a mon problème.

Code : Tout sélectionner

 Func _xls2pdf($Destination,$Repertoire,$Non,$source,$Ecraser)
	;	Argument 1 chemain generale de destination
	;	Argument 2 dosier de destination
	;	Argument 3 non du fichier
	; 	Argument 4 fichier a convertir
	;	Argument 5 comportement ci le pdf existe deja 1 ecrase 0 passe

	Local Const $PaperA4 = 9, $Portrait = 1
	Local Const $PrintZonne = "$A$1:$Q$54"
	Local const $pdf = ".pdf"

	If not FileExists($Destination & $Repertoire) Then
		If Not DirCreate ( $Destination & $Repertoire) Then Return ("Impossible de crer le repertoire" & $Repertoire )
	EndIf


	If FileExists($Destination & $Repertoire & "\" & $Non & ".pdf") Then
		If $Ecraser Then
			if FileDelete($Destination & $Repertoire & "\" & $Non & ".pdf") then
			Else
				Return ("Impossible de suprimer le fichier" & $Destination & $Repertoire & "\" & $Non & ".pdf")
			EndIf
		Else
			Return ("Le fichier " & $Destination & $Repertoire & "\" & $Non & ".pdf existe deja")
		EndIf
	EndIf

	Local $oAppl=_Excel_Open(True);False rans le claseur visible
	If @error Then Return("L'objet excel necessaire a la convertion en pdf n'as pas pu etre crée!")

	Local $oWorkbook2 = _Excel_BookOpen($oAppl, $source, True) ; True ouvre le classeur en lecture seul problème lore de la fermeture propose d'enregistrer
	If @error Then Return ("Impossible d'ouvrir le fichier; " & $source)



	Local $aSheets = _Excel_SheetList($oWorkbook2)
	If @error then Return ("Erreur lors de l'énumération des feuilles")

	For $i = 0 To UBound($aSheets) - 1
		 If $aSheets[$i][1].Visible <> $xlSheetVisible Then ContinueLoop
		 $oAppl.PrintCommunication = False
		 $aSheets[$i][1].PageSetup.PaperSize = $PaperA4
		 $aSheets[$i][1].PageSetup.Orientation = $Portrait
		 $aSheets[$i][1].PageSetup.FitToPagesWide = 1
		 $aSheets[$i][1].PageSetup.FitToPagesTall = 1
		 $aSheets[$i][1].PageSetup.PrintArea = $PrintZonne
		 If @error Then Return ("Erreur de configuration de la mise en page" & @CRLF & "@error = " & @error & ", @extended = " & @extended & @CRLF)
	Next

	_Excel_Export($oAppl, $oWorkbook2, $Destination  & $Repertoire & "\" & $Non & $pdf, Default, Default, False, Default, Default,  False)
	_Excel_BookClose ($oWorkbook2,False)
	_Excel_Close($oAppl)

	If @error Then Return("Erreur de sauvegarde pdf: " & $Non & ".pdf" & @CRLF & "@error = " & @error & ", @extended = " & @extended & @CRLF)

	Return True
EndFunc

Re: Fermeture d'un Book exel sans le sauvegarder et desactiver la boite de dialog

Posté : ven. 10 juin 2022 10:27
par TommyDDR
Regardez le 2eme paramètre de

Re: Fermeture d'un Book exel sans le sauvegarder et desactiver la boite de dialog

Posté : ven. 10 juin 2022 10:42
par walkson
Bonjour,
Comme ceci

Code : Tout sélectionner

#include <Excel.au3>

Local $oExcel = _Excel_Open()
Local $oWorkbook = _Excel_BookNew($oExcel)
_Excel_RangeWrite($oWorkbook, Default, "Test" )
$oExcel.ActiveWorkbook.Saved = True
MsgBox(0,"","pour vérifier")
_Excel_Close($oExcel)

[Edit] Mais la méthode de TommyDDR est la meilleure :D

Re: Fermeture d'un Book exel sans le sauvegarder et desactiver la boite de dialog

Posté : dim. 12 juin 2022 12:28
par mikell
Le 2ème paramètre de _Excel_Open est False par défaut (supprime toutes les invites, etc) , et Nyco ne l'utilise pas dans son script, donc j'imagine que c'est insuffisant :wink:

Je verrais assez une solution à base de WinWaitActive (avec timeout) et WinClose, c'est assez barbare mais ça marche bien :mrgreen:

Re: Fermeture d'un Book exel sans le sauvegarder et desactiver la boite de dialog

Posté : lun. 13 juin 2022 09:53
par Nyco
Bonjour,
En premier lieu je tiens à vous présenter mes excuses pour mon délai de réponse je m'attendais recevoir un e-mail si le sujet avait une réponse mais ce n'est pas le cas.

Effectivement la solution de Walkson avec :
$oExcel.ActiveWorkbook.Saved = True
Fonctionne parfaitement pour ce que je souhaite faire.

Mikell j'étais parti sur une solution semblable à la tienne en exécutant un exécutable contenant sensiblement ton code, proposé, cela fonctionnait quand je lançais la fonction manuellement mais quand je la lance depuis mon script principal l'exécutable ne démarrait pas. J'étais passé par un exécutable car quand je lance la commande fermée je ne peux pas avancer dans le script. Je lançais donc mon exécutable puis la commande fermée afin d'avoir de script qui tournent simultanément.

Re: [R] Fermeture d'un Book exel sans le sauvegarder et desactiver la boite de dialog

Posté : lun. 13 juin 2022 17:00
par walkson
J'avais oublié que
_Excel_BookClose($oWorkbook1, False) et
_Excel_Close($oExcel1,False,True) ferme Excel sans demander une sauvegarde
_Excel_BookClose() peut être intéressant dans votre cas, cela évite de relancer Excel à chaque ouverture de classeur

Re: [R] Fermeture d'un Book exel sans le sauvegarder et desactiver la boite de dialog

Posté : lun. 13 juin 2022 19:19
par TommyDDR
My bad, en effet, je suis allé trop vite en besogne !