Compatibilité Macro 2010 > 2003

Résolu
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,

4 réponses

  1. Bonjour,

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

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

    A+
    0
    1. 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
      1. 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
    2. @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
      1. 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
      2. 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
      3. 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
    3. 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