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

cs_nico39
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Dernière intervention
4 octobre 2006
- 15 mars 2005 à 14:40 - Dernière réponse : nannetarnal
Messages postés
8
Date d'inscription
mercredi 2 mars 2005
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...
Afficher la suite 

3 réponses

Meilleure réponse
cs_nico39
Messages postés
56
Date d'inscription
vendredi 4 mars 2005
Dernière intervention
4 octobre 2006
- 16 mars 2005 à 09:40
3
Merci
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...

Merci cs_nico39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Pierre_faucon
Messages postés
96
Date d'inscription
jeudi 10 juin 2004
Dernière intervention
22 mai 2007
- 15 mars 2005 à 17:38
0
Merci
Bonjour

Remplace

workbooks(chemin).close...

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

Ok?

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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.