Compatibilité Macro 2010 > 2003

Résolu
Brandysve Messages postés 59 Statut Membre -  
Brandysve Messages postés 59 Statut Membre -
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. Zoul67 Messages postés 2001 Statut Membre 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
  2. Brandysve Messages postés 59 Statut Membre 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
    1. Zoul67 Messages postés 2001 Statut Membre 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
  3. Brandysve Messages postés 59 Statut Membre 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
    1. Zoul67 Messages postés 2001 Statut Membre 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
    2. Brandysve Messages postés 59 Statut Membre 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
    3. Zoul67 Messages postés 2001 Statut Membre 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
  4. Brandysve Messages postés 59 Statut Membre 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