Erreur sur un code VBA (variable "ENTIER")

Bonjour à tous,

Je souhaite créer un fichier XML à partir de 2 fichiers Excel.

Pour cela j'ai un fichier de "configuration" Excel, qui contient un bouton, par lequel j'envoie dans un ordre précis mes deux fichiers Excel.

Le premier fichier passe sans problème, le second fichier bloque sur deux lignes d'instructions.

N'y connaissant rien en VBA, je serai ravi d'avoir votre avis sur la question.

Voici le bout de code que je peux vous donner et l'endroit où ça bloque. C'est sur les deux lignes qui sont dans le bloc IF - END IF, juste avant le END IF pour la variable "ENTIER". Juste après la ligne "decalage = ajuster(decalage, 2)

Je ne sais pas si je suis d'être très clair, en tout cas MERCI par avance :

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
' ---------------------------------------------------------------------------------------------------------
'           GoTo contrainte
' ---------------------------------------------------------------------------------------------------------
' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

' Attribut + Components
'------------------------------------------------
'
'Doit présenter dans l'ordre :
'- Nom Attribut     (pas de + , ; * ' " - \ / Ø)
'- Nom Solver       (pas de - * / \ , ;)
'- Type             (Détail / Numérique entier)
'- Type Attribut    (pas de - * / \ , ;)
'- Visible          (Oui / Non)
'- Calcul
'- en-US            (pas de + , ; * ' " - \ / Ø)
'- fr               (pas de + , ; * ' " - \ / Ø)

wbSource.Activate
'wsSource03.Select
'wsSource03.Range("A2:BR20000").Clear
'wsSource03.Cells(1, 1).Select

intCheck = 2

ListeFait = "§"

For i = 2 To UBound(DataDest02, 1)

        If (InStr(1, ListeFait, "§" & DataDest02(i, 4) & "§") = 0) Then
            ListeFait = ListeFait & "§" & DataDest02(i, 4) & "§"

            ' Attributs
            ' ----------------------------------------------------

            XMLAttributTypeTextStart = decalage & "<EcoResAttributeType"
            XMLAttributTypeTextEnd = decalage & "</EcoResAttributeType>" & vbCrLf
            XMLAttributTypeTextStart = XMLAttributTypeTextStart & " Name=""" & HTMLEntititesEncode(DataDest02(i, 4)) & """"

            If (Left(UCase(DataDest02(i, 3)), 6) = "ENTIER") Then

                Valeurs = Split(DataDest02(i, 3), ",")

                ' EcoResAttributeType
                XMLAttributTypeTextStart = XMLAttributTypeTextStart & _
                    " DataType=""" & 4 & _
                    """ IsEnumeration=""0"" HasBounds=""1"">" & vbCrLf

                ' EcoResBoundedAttributeTypeValue
                decalage = ajuster(decalage, 2)
                XMLAttributTypeTextStart = XMLAttributTypeTextStart & decalage & _
                    "<EcoResBoundedAttributeTypeValue Lower=""" & Valeurs(1) & """ Upper=""" & Valeurs(2) & """ />" & vbCrLf

            End If

            If (UCase(DataDest02(i, 3)) = "TEXTE") Then

                    ' EcoResAttributeType
                    XMLAttributTypeTextStart = XMLAttributTypeTextStart & _
                        " DataType=""" & 5 & _
                        """ IsEnumeration=""0"" HasBounds=""0"" />" & vbCrLf

                    decalage = ajuster(decalage, 2)
                    XMLAttributTypeTextEnd = ""

            End If

Merci d'avance

Jean-Luc

bonjour,

quel message d'erreur reçois-tu ? selon moi le problème est lié à tes données. Sans ton fichier ça va être difficile de dire où est l'erreur.

Bonjour,

Merci de te soucier de mon problème.

Voici une copie d'écran du message d'erreur que j'ai :

image

et le problème porte sur ces deux lignes apparemment :

XMLAttributTypeTextStart = XMLAttributTypeTextStart & decalage & _
"<EcoResBoundedAttributeTypeValue Lower=""" & Valeurs(1) & """ Upper=""" & Valeurs(2) & """ />" & vbCrLf

Si ça vient des données, mets moi sur la piste de ce qu'il faut que je t'envoie ?

Merci beaucoup !

bonjour,

remplace ton code ENTIER par celui-ci

cela devrait afficher la ligne de la table datadest02 qui contient des données incorrectes. mais comme tu n'as pas mis tout ton code, je ne peux pas déterminer à quelle feuille ni à quelle cellule cela correspond,

If (Left(UCase(DataDest02(i, 3)), 6) = "ENTIER") Then
                Valeurs = Split(DataDest02(i, 3), ",")
if ubound(valeurs)<2 then msgbox "erreur de données trouvées en ligne " & i & " valeurs trouvées " & datadest02(i,3) '<-------- à ajouter
                ' EcoResAttributeType
                XMLAttributTypeTextStart = XMLAttributTypeTextStart & _
                    " DataType=""" & 4 & _
                    """ IsEnumeration=""0"" HasBounds=""1"">" & vbCrLf

                ' EcoResBoundedAttributeTypeValue
                decalage = ajuster(decalage, 2)
                XMLAttributTypeTextStart = XMLAttributTypeTextStart & decalage & _
                    "<EcoResBoundedAttributeTypeValue Lower=""" & Valeurs(1) & """ Upper=""" & Valeurs(2) & """ />" & vbCrLf

            End If

Re,

J'ai mis en place ton code et j'ai relancé, voici le message d'erreur affiché :

image

et je joins l'onglet du fichier de données qui merde, je pense, mais je ne vois pas ce qui cloche...?

Pour info j'ai fait les tests suivants :

1 - Mettre Entier en majuscule,

2 - Supprimer les ,x,x

3 - Si je mets partout Détail ça plante pas

Merci

bonsoir,

comme l'indique le message d'erreur, le problème est en ligne 4 où Entier doit être suivi de 2 nombres séparés par des virgules (en tout cas c'est ce que ton code attend et ne gère pas le cas s'ils sont absents). Si tu sais ce qu'il faut faire dans ce cas (cad quelle syntaxe XML faut-il prévoir dans ce cas ? *), je veux bien essayer d'adapter ta macro.

* j'aurais bien une idée, mais pas de certitude, car tout dépend du programme qui exploitera ce fichier XML par la suite.

    If (Left(UCase(datadest02(i, 3)), 6) = "ENTIER") Then
        Valeurs = Split(datadest02(i, 3), ",")
        If UBound(Valeurs) < 2 Then 'entier sans les 2 nombres qui suivent
            ' EcoResAttributeType
            XMLAttributTypeTextStart = XMLAttributTypeTextStart & _
            " DataType=""" & 4 & _
            """ IsEnumeration=""0"" HasBounds=""0"" />" & vbCrLf
        Else 'entier avec les 2 nombres qui suivent
            ' EcoResAttributeType
            XMLAttributTypeTextStart = XMLAttributTypeTextStart & _
            " DataType=""" & 4 & _
            """ IsEnumeration=""0"" HasBounds=""1"">" & vbCrLf
             ' EcoResBoundedAttributeTypeValue
            decalage = ajuster(decalage, 2)
            XMLAttributTypeTextStart = XMLAttributTypeTextStart & decalage & _
            "<EcoResBoundedAttributeTypeValue Lower=""" & Valeurs(1) & """ Upper=""" & Valeurs(2) & """ />" & vbCrLf
        End If
    End If

edit correction du code proposé

Bonjour H2SO4,

Merci beaucoup pour ta réponse.

Effectivement je n'ai plus de message d'erreur si je mets Entier,0,10 (par exemple) pour tous les Entiers.

Ca passe nickel dans ce cas.

Le programme qui exploite ce fichier XML est D365 F&O pour info. Je n'arrive pas à intégrer mon fichier comme je devrais, mais là on est plus dans un problème VBA.

Merci encore pour ton aide.

Bien cordialement

Rechercher des sujets similaires à "erreur code vba variable entier"