Bonjour,
A mon avis c'est plus simple de passer par des fichiers .xsy. Il permettent de définir une valeur par défaut pour tes variables, et c'est du XML.
Ça se génère pas trop mal avec des macro excel.
Cadeau, quelques bouts de mes macros perso qui devraient faire une bonne partie du travail.
Il faudra les adapter un peu, mais y'a déjà 90% du boulot de fait.
Code : Tout sélectionner
Private Sub EcritureVariableXML(mnemo As String, adr As String, t As String, description As String, Optional valeur As String = "", Optional save As String)
' sous fonction nécéssaire pour <GenerationUnity>
' Prends comme parametres obligatoires le mnémonique, l'adresse, le type, le commentaire
' en parametres optionnels on a la valeur par défaut et sa rémanence
Print #1, "<variables name=" + Chr(34) + mnemo + Chr(34) + " typeName=" + Chr(34) + t + Chr(34) + " topologicalAddress=" + Chr(34) + adr + Chr(34) + ">"
Print #1, " <comment>" + Replace(description, Chr(34), "") + "</comment>"
If save = "1" Then
Print #1, " <attribute name=" + Chr(34) + "Save" + Chr(34) + " value=" + Chr(34) + "-1" + Chr(34) + "></attribute>"
End If
Print #1, " <attribute name=" + Chr(34) + "TimeStampSource" + Chr(34) + " value=" + Chr(34) + "3" + Chr(34) + "></attribute>"
If valeur <> "" Then
Print #1, " <variableInit value=" + Chr(34) + valeur + Chr(34) + "></variableInit>"
End If
Print #1, "</variables>"
End Sub
Sub GenerationUnity(NomOnglet As String, NomFichier As String)
' Génère un fichier .scy au format Unity Pro/Control Expert à partir d'une feuille Excel.
'
' Récupère les données des colonnes suivantes :
' A : Mnémonique de la variable.
' D : Type de la variable.
' K : Adresse topologique.
' M : Commentaire.
' N : Valeur par défaut (si renseignée).
' O : Rémanence (1 = sauvegardé, 0 = non sauvegardé).
'
' /!\ Parcourt les lignes de 10 à 5000 !
Dim i, sauvegarde As Integer
Open NomFichier For Output As 1
Print #1, "<?xml version=" + Chr(34) + "1.0" + Chr(34) + " encoding=" + Chr(34) + "ISO-8859-1" + Chr(34) + " standalone=" + Chr(34) + "yes" + Chr(34) + "?>"
Print #1, "<VariablesExchangeFile>"
Print #1, "<fileHeader company=" + Chr(34) + "Schneider Automation" + Chr(34) + " product=" + Chr(34) + "Unity Pro XL V8.1 - 141023H" + Chr(34)
Print #1, " dateTime=" + Chr(34) + "date_and_time#2015-9-24-16:26:5" + Chr(34) + " content=" + Chr(34) + "Fichier source variables" + Chr(34) + " DTDVersion=" + Chr(34) + "41" + Chr(34) + "></fileHeader>"
Print #1, "<contentHeader name=" + Chr(34) + "Projet" + Chr(34) + " version=" + Chr(34) + "0.0.560" + Chr(34) + " dateTime=" + Chr(34) + "date_and_time#2015-9-22-16:31:5" + Chr(34) + "></contentHeader>"
Print #1, "<dataBlock>"
For i = 10 To 5000
If (Worksheets(NomOnglet).Range("A" + CStr(i)).Value <> "") Then
sauvegarde = 0
If Trim(Worksheets(NomOnglet).Range("O" + CStr(i)).Value) = "1" Then
sauvegarde = 1
End If
If Trim(Worksheets(NomOnglet).Range("N" + CStr(i)).Value) <> "" Then
EcritureVariableXML Worksheets(NomOnglet).Range("A" + CStr(i)).Value, _
Worksheets(NomOnglet).Range("K" + CStr(i)).Value, _
Worksheets(NomOnglet).Range("D" + CStr(i)).Value, _
Chr(34) + Worksheets(NomOnglet).Range("M" + CStr(i)).Value + Chr(34), _
Worksheets(NomOnglet).Range("N" + CStr(i)).Value, _
CStr(sauvegarde)
Else
EcritureVariableXML Worksheets(NomOnglet).Range("A" + CStr(i)).Value, _
Worksheets(NomOnglet).Range("K" + CStr(i)).Value, _
Worksheets(NomOnglet).Range("D" + CStr(i)).Value, _
Chr(34) + Worksheets(NomOnglet).Range("M" + CStr(i)).Value + Chr(34), _
"", _
CStr(sauvegarde)
End If
Else
Exit For
End If
Next i
Print #1, "</dataBlock>"
Print #1, "</VariablesExchangeFile>"
Close 1
End Sub