ExportToXML

Bonjour

J'ai un fichier excel 97 avec la macro ExportToXML qui fonctionne très bien sous excel97 pour créer un html à partir du fichier excel et du xsl. Mon problème : ce fichier, gardé au format 97 est ouvert désormais sous excel 2010 et la macro ne fonctionne plus, sans me faire de message d'erreur. Le pas à pas détaillé montre que la boucle sur Icols (d'abord pour récupérer les titres de mes colonnes) n'est pas exécutée. Icols vaut 256, IRows 65536 ; le fichier xml est ouvert par

Open FullPath For Output As #iFileNum.

Merci pour votre aide

Ci-dessous le code

Public Function ExportToXML(FullPath As String, RowName As String) As Boolean
On Error GoTo ErrorHandler

Dim colIndex As Integer
Dim rwIndex As Integer
Dim asCols() As String
Dim oWorkSheet As Worksheet
Dim sName As String
Dim lCols As Long, lRows As Long
Dim iFileNum As Integer
Dim i As Integer

Set oWorkSheet = ThisWorkbook.Worksheets(1)
sName = oWorkSheet.Name
lCols = oWorkSheet.Columns.Count
lRows = oWorkSheet.Rows.Count

ReDim asCols(lCols) As String

iFileNum = FreeFile
Open FullPath For Output As #iFileNum

For i = 0 To lCols - 1
    'Assumes no blank column names
    If Trim(Cells(1, i + 1).Value) = "" Then Exit For
    asCols(i) = Cells(1, i + 1).Value
Next i

If i = 0 Then GoTo ErrorHandler
lCols = i

Print #iFileNum, "<?xml version=""1.0"" encoding=""ISO-8859-1""?>"
Print #iFileNum, "<?xml:stylesheet type=""text/xsl"" href= ""mis_form_index.xsl""?>"
Print #iFileNum, "<" & sName & ">"
For i = 2 To lRows
If Trim(Cells(i, 1).Value) = "" Then Exit For
Print #iFileNum, "<" & RowName & ">"

    For j = 1 To lCols

        If Trim(Cells(i, j).Value) <> "" Then
           Print #iFileNum, "  <" & asCols(j - 1) & "><![CDATA[";
           Print #iFileNum, Trim(Cells(i, j).Value);
           Print #iFileNum, "]]></" & asCols(j - 1) & ">"
           DoEvents 'OPTIONAL
        End If
    Next j
    Print #iFileNum, " </" & RowName & ">"
Next i

Print #iFileNum, "</" & sName & ">"
ExportToXML = True
ErrorHandler:
If iFileNum > 0 Then Close #iFileNum
Exit Function
End Function

Bonjour zadig95,

Pas sûr de pouvoir t'aider mais peux-tu déjà essayer d'exécuter ton code en mettant en commentaire la ligne

On Error GoTo ErrorHandler

Ceci permettra de voir quelle erreur est retournée.

Peux-tu également dire ce que valent les variables FullPath et RowName lorsque tu exécutes la macro ?

Bonjour

FullPath et RowName contiennent respectivement le nom du fichier excel et le nom de l'onglet.

L'erreur retournée : ne trouve pas le fichier xml qui existe bien.

En fait, après essais sur différents PC, il s'avère que ça fonctionne en 2007 et 2010 sur XP mais pas sur Windows 7 (32 et 64 bits)

Pour info, j'ai finalement réalisé deux modifications et ça marche :

[*]le nom du fichier est passé en dur : D:/Documents/SHIPS/index au lieu de ..\SHIPS\index

[*]j'ai déclaré un pointeur i en long suite à un message d'erreur à l'exécution de la macro (là aussi, sans doute lié au passage sous W7 64 bits)

zadig95 a écrit :

[*]j'ai déclaré un pointeur i en long suite à un message d'erreur à l'exécution de la macro (là aussi, sans doute lié au passage sous W7 64 bits)

Tu as probablement dû obtenir une erreur de dépassement de capacité, qui n'est pas dû à ta configuration.

En effet, un integer ne peut prendre que des valeurs allant de -32 768 à 32 767.

Bonjour

Peux-tu m'en dire plus sur cette " erreur de dépassement de capacité" ? A quoi est-ce du ? et comment l'éviter ?

Merci

Bonjour zadig95,

Voici ce que dit l'aide VBA :

Dépassement de capacité (erreur 6)

Particularités

Un dépassement de capacité se produit lorsque vous tentez d'effectuer une affectation dépassant les limites de la cible de l'affectation. Causes et solutions de cette erreur :

. Le résultat d'une affectation, d'un calcul ou d'une conversion de type de données est trop grand pour être représenté dans la plage de valeurs autorisée pour ce type de variable.

Affectez la valeur à un type de variable pouvant contenir une plage de valeurs plus grande.

. Une affectation à une propriété dépasse la valeur maximum de la propriété.

Vérifiez que votre affectation se situe à l'intérieur de la plage de la propriété cible.

. Vous tentez d'utiliser dans un calcul un nombre converti dans un entier, mais le résultat est plus grand qu'un entier. Exemple :

Dim x As Long

x = 2 000 * 365 ' Erreur : Dépassement de capacité

Afin de contourner le problème, saisissez le nombre comme suit :

Dim x As Long

x = CLng(2 000) * 365

Pour plus d'informations, sélectionnez l'élément en question et appuyez sur F1 (sous Windows) ou AIDE (sur Macintosh).

Exécute cette macro :

Sub test()
Dim i As Integer
i = 40000
End Sub

Tu obtiendras une erreur de dépassement de capacité car la valeur max d'un Integer est 32 767.

Tu peux corriger cela en déclarant ta variable i en Long (max : 2 147 483 647), ou en essayant de ne pas dépasser cette valeur max.

Rechercher des sujets similaires à "exporttoxml"