Sauvegarder sur un .xls et pas sur un .xlsx VB2008 [Résolu]

Signaler
Messages postés
15
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
23 mars 2015
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour, voici mon soucis
j'ouvre un fichier excel, que j'enregistre en format xls avec ( saveFichierExcel.Filter <gras>"Fichiers Excel (*.xls)|*.xls" celà marche mais lorsque j'ouvre le fichier à partir de Excel j'ai ce message " Le format du fichier "bidul.xls que vous tentez d'ouvrir est différent de celui spécifier par l'extension du fichier...vérifier si le fichier est endommagé..." avec excel 2007 ça marche quand je clic sur continuer mais avec excel XP j'ai un fichier avec plein de code bizarre. Je pense qu'il est en format xlsx car en plus quand je remplace la ligne précédente par saveFichierExcel.Filter</gras> "Fichiers Excel (*.xlsx)|*.xlsx" je n'ai plus ce problème sauf que je veux en format .xls

voici mon code, je suis sur VB2008 et j'ai ajouté en référence Microsoft Excel 12.0 à mon projet.
MERCI D'AVANCE.

savepointage() 'sauve résultat du pointage dans un ecxel
Dim chemin As String
Dim appxls As Microsoft.Office.Interop.Excel.Application
Dim Book As Microsoft.Office.Interop.Excel.Workbook
Dim saveFichierExcel As New SaveFileDialog()
Dim tourmax As Integer

saveFichierExcel.Title = "Sauvegarder dans un fichier Excel"
saveFichierExcel.Filter = "Fichiers Excel (*.xls)|*.xls"
saveFichierExcel.FilterIndex = 1
saveFichierExcel.RestoreDirectory = True
saveFichierExcel.CheckPathExists = True
saveFichierExcel.AddExtension = True

If saveFichierExcel.ShowDialog() = Windows.Forms.DialogResult.OK Then
appxls = New Microsoft.Office.Interop.Excel.Application
Book = appxls.Workbooks.Add ' Ajout d'un classeur
chemin = saveFichierExcel.FileName

"ecriture dans le fichier


'Enregistrer sous le classeur
Try
appxls.ActiveWorkbook.SaveAs(chemin)
Catch ex As Exception
MessageBox.Show("Impossible d'enregistrer : vérifiez que le fichier Excel n'est pas déjà ouvert " & ex.Message)
End Try

Else
Exit Sub
End If

Book.Close(True, , )
appxls.Quit()
Book = Nothing
appxls = Nothing

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
Comme on le répète à longueur de temps : "enregistre une macro pendant que tu fais la manip à la main" et tu auras le code exact à utiliser :
Dans ton cas, tu demandes à l'utilisateur de choisir un fichier XLS.
Oui, mais l'extension d'un fichier ne présume pas de son contenu.
En faisant un simple SaveAs ne suffit pas puisque le format d'enregistrement par défaut est XLSX.
    ActiveWorkbook.SaveAs Filename:= "C:\Users\Jack\Desktop\Classeur1.xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False

C'est l'option FileFormat:=xlExcel8 qui définit réellement le type du fichier

Vala
Jack, =fr MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
15
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
23 mars 2015

C'est bon je pense avoir trouvé il faut que je mette FileFormat:=Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8 et pas seulement FileFormat:=xlExcel8

Encore merci beaucoup !!!!!!!!
Messages postés
15
Date d'inscription
lundi 9 février 2009
Statut
Membre
Dernière intervention
23 mars 2015

Merci, tu viens de me forcer à apprendre comment faire un macro sous excel !! Je n'avais jamais vraiment osé en utiliser mais en fait avec le "enregistre une macro pendant que tu fais la manip à la main" c'est plutôt ludique.

Moi aussi excel me donne bien le même code que toi pour le fileformat donc xlExcel8 mais quand je le mets dans mon projet sous VB 2008 il me met "Le nom 'xlExcel8'" n'est pas déclaré.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
En effet, cette macro créée sous Excel suppose que les constantes sont connues, ce qui n'est pas le cas dans un autre environnement.
Bien joué.