none
Excel 95 vers 2010 RRS feed

  • Discussion générale

  • Bonjour,

    Je viens poster sur le forum de la communauté de Microsoft après avoir eu de longues recherches infructueuses sur internet.

    Alors avant d'exposer mon problème, je vais décrire le contexte :)

    Pour un projet, on m'a demandé de faire une migration de fichiers au format Excel 95 vers un format qui puisse être lu par Excel 2010 ( en évitant la destruction ou l'altération des données ). Cette migration doit pouvoir être automatisé si possible et sinon, doit pouvoir être utilisé sans que l'utilisateur ait à faire une installation supplémentaire ( que Microsoft Office 2010 avec Excel ) et n'ait besoin d'une longue formation.

    Mon raisonnement a donc été de chercher comment faire en VBA pour ouvrir un fichier Excel 95 afin de le convertir depuis Visual Basic.

    J'ai trouvé un code souvent c/c sur différents forums/sites et le proposant comme polyvalent pour Office 2007 et 2010.

    Voici le code :

    module "ThisWorkbook"
    Private Sub Workbook_Open()
    Dim CmdRaw As Long, CmdLine As String, Idx As Integer
    Dim MyFile As Workbook
    
    
        CmdRaw = GetCommandLine
        CmdLine = CmdToSTr(CmdRaw)
        ' Msgbox CmdLine
        Idx = InStr(1, CmdLine, "/e/")
        Set MyFile = Workbooks.Open(Mid(CmdLine, Idx + 3, 99))
        MyFile.SaveAs "Test2003.xls", xlExcel7
        Application.Quit
    End Sub
    
    module "Module1"
    Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long
    Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
    Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long)
    
    Function CmdToSTr(Cmd As Long) As String
    Dim Buffer() As Byte
    Dim StrLen As Long
    
       If Cmd Then
          StrLen = lstrlenW(Cmd) * 2
          If StrLen Then
             ReDim Buffer(0 To (StrLen - 1)) As Byte
             CopyMemory Buffer(0), ByVal Cmd, StrLen
             CmdToSTr = Buffer
          End If
       End If
    End Function

    Malheureusement cette fonction ne marche pas pour ouvrir des fichiers Excel 95 depuis 2010.

    Je récupère le message d'erreur suivant à chaque fois sur la fonction workbooks.open() :

    Erreur d'exécution '1004': La méthode 'Open' de l'objet 'Workbooks' a échoué

    Pour le coté automatisé, j'ai déjà finit de créer un fichier en batch me permettant de lancer le fichier Excel contenant la macro et d'ouvrir les fichiers en 95. Mais la macro après bloque tout dès que c'est une version d'Excel 95.

    Auriez-vous une idée de comment résoudre cela?

    Merci d'avance.

    Cordialement,

    Clément BRUN.

    • Type modifié Aurel Bera vendredi 15 février 2013 08:30 Discussion
    mardi 29 janvier 2013 15:58

Toutes les réponses

  • Bonjour,

    Cela va faire 2 semaines que je reste sans réponse.

    Dois-je prendre cela comme une action impossible depuis la sortie de Microsoft Office 2010?

    Cordialement,

    Clément BRUN.

    lundi 11 février 2013 09:34
  • Bonjour Clemchan,

    Cela a peut être un rapport : Convertisseur VBA

    Il n'y a pas de lien direct de téléchargement, cela passe par e-mail. une fois réceptionné le package, voici ce qui est indiqué :

    The VBE converters in this package are used to convert previous versions of VBA from and to the Excel 5 and Excel 95 file formats.

    The converters are supported for usage with Excel 2007, and the 32-bit versions of Excel 2010 or later releases. 64-bit operating systems are supported only with a 32-bit version of Excel installed (known as a "WoW" configuration).

    To install the VBE Converters:
    ==============================
    Please follow the instructions below. Notice that with Excel 2007, the installation is simple - just copying two files into one location. With later Excel versions, there are several more files to copy, and a batch file to run (it registers type libraries).

    For all Excel versions
    ----------------------

    1. Extract the converter files from the self-extracting EXE file. (You have likely already done so if you are reading this file.)

    For Excel 2007
    --------------

    On a 32-bit operating system:
    2. Copy the following files into the following folder on your system drive:
        vbacv10.dll, vbacv10d.dll:    \Program Files\Common Files\Microsoft Shared\vba\vba6\

    -OR-

    On a 64-bit operating system with 32-bit Excel (WoW):
    2. Copy the following files into the following folder on your system drive:
        vbacv10.dll, vbacv10d.dll:    \Program Files (x86)\Common Files\Microsoft Shared\vba\vba6\

    For Excel 2010 or later
    -----------------------

    On a 32-bit operating system:
    2. Copy the following files into the following folders on your system drive:
      a. vbacv10.dll, vbacv10d.dll:    \Program Files\Common Files\Microsoft Shared\vba\vba7\
      b. xl5en32.olb, gren50.olb:    the folder where Excel.exe resides, which by default is:    \Program Files\Microsoft Office\Office14\
      c. vbaen32.olb, vbaend32.olb:    the Windows system folder:    \Windows\System32\

    -OR-

    On a 64-bit operating system with 32-bit Excel (WoW):
    2. Copy the following files into the following folders on your system drive:
      a. vbacv10.dll, vbacv10d.dll:    \Program Files (x86)\Common Files\Microsoft Shared\vba\vba7\
      b. xl5en32.olb, gren50.olb:    the folder where Excel.exe resides, which by default is:    \Program Files (x86)\Microsoft Office\Office14\
      c. vbaen32.olb, vbaend32.olb:    the Windows system folder:    \Windows\SysWOW64\

    and for both 32- and 64-bit operating systems:

    3. Run the batch file vbaconv.bat with elevated (administrator) permissions.

    (End of installation instructions)
    (================================)

    Once installed, the converters allow for opening Excel 5 / Excel 95 files with VBA module sheets. In order to migrate this kind of file to a file format that Excel 2007 or later supports, you now need to manually convert the VBA module sheets into regular VBA modules. You do this as follows:

    1. Once you have opened the workbook, press Alt+F11 to enter the Visual Basic Editor.
    2. For each module you will need to export it out and import it back in.  This will create recreate the modules for the latest version of Visual Basic Editor.   
       For each module in the Visual Basic Editor, perform the following steps:
      a. Select the Module from the Project Tree on the left pane (if modules don’t display expand the tree to see the individual modules).
      b. From the File menu select "Remove the Module".
      c. Select Yes to the prompt “Do you want to export <name of module> before removing it?"
      d. Save it with a name and location
      e. From the File menu select "Import File", browse to the module and choose "Open".
    3. Once you have exported and imported all the module sheets, save your workbook.
    Note:  If the Project is password protected you will not be able to do the above steps until you get the password to open the modules.

    HTH


    Cordialement, Jacques

    lundi 11 février 2013 11:20
  • Bonjour,

    Je viens juste de voir votre réponse.

    Tout d'abord, merci d'avoir répondu :)

    Ensuite, je suis actuellement sur une autre mission, je vous fait un retour sur votre conseil dès que possible ;)

    Bonne journée :)

    jeudi 14 février 2013 10:12
  • Bonjour,

    Nous changeons le type de votre question à « Discussion générale ». Si vous avez plus de temps pour réexaminer la question et fournir plus d'informations, n'hésitez pas à modifier le type du thread à « Question ». Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires.

    Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    vendredi 15 février 2013 08:30