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 IfMerci 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 :
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 IfRe,
J'ai mis en place ton code et j'ai relancé, voici le message d'erreur affiché :
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 Ifedit 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