[Excel/VBA] Fermeture et enregistrement d'un classeur Excel

Résolu
cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006 - 15 mars 2005 à 14:40
nannetarnal Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 15 avril 2005 - 2 avril 2005 à 17:58
Bonjour à tous,

sous VBA, je souhaite faire ouvrir un classeur Excel, le modifier (en y faisant des calculs, en remplissant des colonnes et en y créant un graphique), puis le faire fermer en enregistrant par-dessus (entregistrement simple).
Mon classeur s'ouvre bien , les modifications s'effectuent bien, mais lors de la fermeture du classeur et de son enregistrement, une fenêtre "enregistrer sous..." s'ouvre (bien que je n'ai rien précisé de tel dans la commande VBA), et quand je l'enregistre sous le même nom que le classeur modifié, il est enregistré sous un format "fichier"
et non "classeur Excel", et le classeur initial n'est pas remplacé par la version modifiée.

Voici le bout de code problématique:

chemin= "C:\Mes Docuemnts\Classeur1.xls"
' Au cas où ce classeur est déjà ouvert,
If WorkbookOpen(chemin) = False Then Workbooks.Open (chemin)
... 'Ensemble des modifications sur ce classeur
Workbooks(chemin).Close SaveChanges:=True

La fonction WorkbookOpen() teste l'état ouvert d'un classeur Excel. son code est le suivant:
Function WorkbookOpen(WorkBookName As String) As Boolean
' retourne TRUE si le classeur est ouvert
WorkbookOpen = False
On Error GoTo WorkBookNotOpen
If Len(Application.Workbooks(WorkBookName).Name) > 0 Then
WorkbookOpen = True
Exit Function
End If
WorkBookNotOpen:
End Function
(fonction trouvée sur un autre forum: http://www.exceltip.com/st/Determine_if_a_workbook_is_already_open_using_VBA_in_Microsoft_Excel/472.html)

Ce code me semble correct, mais mes maigres connaissances en VBA sont dépassés par ce problème.
J'espère que mon problème vous paraît clair, et que vous auriez une petite idée de solution.

Merci d'avance.


Amateurement vôtre...

3 réponses

cs_nico39 Messages postés 56 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 4 octobre 2006
16 mars 2005 à 09:40
Salut Pierre,

Merci de ta réponse.
J'ai essayé ta méthode. Elle fonctionne très bien, merci.
Mais il faut bien préciser que la variable "chemin" doit être en fait le nom du classeur, et non son adresse complète (C.\.....\Classeur.xls). Sinon, une erreur survient.
Par contre, l'évènement .Open lié à l'objet Workbooks appelle l'adresse complète du fichier!!!
Il faut donc faire attention dans la déclaration des chaînes, à bien distinguer adresse complète et nom de fichier.

Encore merci pour le coup de pouce!

Bonne prog'


Amateurement vôtre...
3
Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007
15 mars 2005 à 17:38
Bonjour

Remplace

workbooks(chemin).close...

par
workbooks(chemin).save
workbooks(chemin).close

Ok?

Pierre Fauconnier
0
nannetarnal Messages postés 8 Date d'inscription mercredi 2 mars 2005 Statut Membre Dernière intervention 15 avril 2005
2 avril 2005 à 17:58
nannetarnal
0