Compatibilité Macro 2010 > 2003

Résolu
Brandysve Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   -  
Brandysve Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai crée un modèle .xlt sur Excel 2010 qui enregistre automatiquement le nouveau classeur à l'ouverture, en .xls, sous un numéro spécifié sur la feuille.

Lorsque j'ouvre ce document .xls sous Excel 2003, il me met un message d'erreur et m'affiche le document de manière "codée" avec des caractères incompréhensibles.

Je me doute qu'il s'agisse d'un problème de compatibilité mais y a-t'il une solution?

Voici les macro :
1. Workbook
Private Sub Workbook_Open()
Dim save_ener As String
UserForm1.Show
save_ener = Range("E1")
If save_ener < 10000 Then
save_ener = "\0" & save_ener
Else
save_ener = "\" & save_ener
End If
Range("A6").Select
fichier = "C:\Users\bsauveni\Desktop\En attente" & save_ener & ".xls"
ActiveWorkbook.SaveAs Filename:=fichier
End Sub

2. UserForm
Private Sub annuler_Click()
Unload UserForm1
End Sub

Private Sub CommandButton1_Click()
Range("E1") = Me.TextBox1.Value
Range("D2") = Me.TextBox2.Value
Range("B6") = Me.TextBox3.Value
Unload UserForm1
End Sub

Bien à vous,
A voir également:

4 réponses

Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Bonjour,

Si tu enregistres tes actions, tu as ça qui apparaît :
, FileFormat:=xlExcel8

Essaie donc :
ActiveWorkbook.SaveAs Filename:=fichier, FileFormat:=xlExcel8

A+
0
Brandysve Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   5
 
Bonjour,

En ajoutant ce que tu as inscrit, mes macro s'exécute sur le fichier .xls

En fait, le fichier .xlt ouvre une fenêtre ou j'inscris des données qui sont collées dans la feuille. En même temps, il enregistre sous ".xls" en fonction d'une des données.

En rajoutant ce que tu m'as donnés, il réouvre cette fenêtre dans le fichier .xls. Or, quand il enregistre, il doit seulement reprendre le contenu et non les macro.
0
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
En fait, le fichier .xlt ouvre une fenêtre ou j'inscris des données qui sont collées dans la feuille. En même temps, il enregistre sous ".xls" en fonction d'une des données.
ça, j'avais vu
En rajoutant ce que tu m'as donnés, il réouvre cette fenêtre dans le fichier .xls. Or, quand il enregistre, il doit seulement reprendre le contenu et non les macro.
ça, c'était pas dit

Je suis assez partisan de recopier les onglets dans un fichier vierge de macros : https://www.developpez.net/forums/d66537/logiciels/microsoft-office/excel/macros-vba-excel/enregistrer-fichier-xls-macro-code-vb/

A+
0
Brandysve Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   5
 
@Zoul67

En suivant le code de la page que tu m'as données, j'ai l'erreur 1004 à la ligne
For Each VbComp In ActiveWorkbook.VBProject.VBComponents ' 'suppression vba

Si je résume :

Dans le code de base, il enregistre bien comme il faut. Si je le réouvre avec 2010, j'ai mon fichier excel sans code vba. Si je l'ouvre en 2003, j'ai pas de code vba mais pas de contenu non plus.

En rajoutant FileFormat:=xlExcel8, il me l'enregistre comme il faut mais me le réouvre en réexécutant les macros.

Il me faudrait un mixte des deux : L'enregistrer en .xls sans réexécuter les macro.

Voilà le code rajouté en module
Sub SupprimeToutVBA()
Dim VbComp As Object
ThisWorkbook.SaveAs "C:\Users\bsauveni\Desktop\En attente" & save_ener & ".xls", FileFormat:=xlExcel8
For Each VbComp In ActiveWorkbook.VBProject.VBComponents ' 'suppression vba
Select Case VbComp.Type
Case 1 To 3
ActiveWorkbook.VBProject.VBComponents.Remove VbComp
Case Else
With VbComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next VbComp

ActiveWorkbook.Save ' enregistre les suppressions

End Sub

Et le code du Workbook actuel :
Private Sub Workbook_Open()
Dim save_ener As String
UserForm1.Show
save_ener = Range("E1")
If save_ener < 10000 Then
save_ener = "\0" & save_ener
Else
save_ener = "\" & save_ener
End If
Range("A6").Select
'fichier = "C:\Users\bsauveni\Desktop\En attente" & save_ener & ".xls"
'ActiveWorkbook.SaveAs Filename:=fichier, FileFormat:=xlExcel8
'ActiveWorkbook.Close

End Sub

Userform1:

(...)
SupprimeToutVBA
End Sub
0
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
C'est pour ça que je proposais de recopier les onglets dans un nouveau fichier vierge... donc vierge de macros, soit la première réponse du lien que je t'ai indiqué.
0
Brandysve Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   5
 
Mais dans ce cas, toute la mise en page du modèle sera copiée également sur la nouvelle page?

Pourrais-tu m'indiquer un exemple pour créer un nouveau fichier et y enregistrer des données directement dans des cellules spécifiques?
0
Zoul67 Messages postés 1959 Date d'inscription   Statut Membre Dernière intervention   149
 
Mise en page : oui, c'est de la duplication d'onglets.

Là, je copie un onglet de mon fichier Book1.xlsm vers Book2.xls (Excel 97-2003) :


Sub Macro1()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\bsauveni\Desktop\Book2.xls", FileFormat:=xlExcel8, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Windows("Book1.xlsm").Activate
Sheets("Sheet1").Select
Sheets("Sheet1").Copy Before:=Workbooks("Book2.xls").Sheets(1)
End Sub
0
Brandysve Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   5
 
Problème résolu

J'ai rajouté le code de ton lien :
 
Sub SupprimeTout()
'Enregistre le classeur et supprime la totalité des procédures
Dim VbComp As Object

For Each VbComp In ThisWorkbook.VBProject.VBComponents
Select Case VbComp.Type
Case 1 To 3
ThisWorkbook.VBProject.VBComponents.Remove VbComp
Case Else
With VbComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
Next VbComp

'Sauvegarde les modifications
ThisWorkbook.Save
End Sub

J'ai rajouté ça dans le code du Workbook tout à la fin

SupprimeTout
0