Moulinnette - Importation de variables

Forum traitant des automates industriels de marque Schneider - Telemecanique
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: Moulinnette - Importation de variables

Message par Cyril93 »

Et alors ouvrir c juste pour savoir comment ranger les colonnes apres tu modifies et tu sauves en txt. Pas besoin d'un script pour faire cette manip :D
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7162
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Moulinnette - Importation de variables

Message par itasoft »

slts,
on est pas censé savoir comment est présenté la feuille Excel, la moulinette à adapter c'est pour extraire des données se trouvant n'importe ou sur la feuille Excel.
Évidement si c'est déjà rangés dans le bon ordre ya rien à faire juste à exporter.
discussion close.
Automaticien privé (de tout)
itasoft@free.fr
MikeKol
Forcené des structures
Forcené des structures
Messages : 156
Enregistré le : 22 oct. 2015, 20:20

Re: Moulinnette - Importation de variables

Message par MikeKol »

Je reviens vers vous, j'ai trouver la méthode que cyril93 à évoquer, j'ai mit des variable bidon que j'ai exporter en .TXT après avec excel j'ai modifier les variables et les adresses et commentaires sans modifier le format.
Mais je vais tout de même bosser sur ce sujet. Car sa peut servir.

Merci pour votre aide.
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: Moulinnette - Importation de variables

Message par Cyril93 »

Le problème avec le script c'est que si les colonnes ne sont pas rangées dans l'ordre que itasoft a choisi arbitrairement, il faut soit faire du copier coller dans excel ou alors modifier le script donc, quand c'est du code que l'on ta balancé sur un forum et que t'y connait rien en VB c'est surement plus long que d'enregistrer en fichier txt avec les colonnes rangées comme il faut.

Et si je veux pas de guillemet sur mes commentaires est-ce que je vais encore devoir modifier le script pour enlever les chr(34) ?? ou alors me taper toutes les lignes à la mano. :mrgreen:
MikeKol
Forcené des structures
Forcené des structures
Messages : 156
Enregistré le : 22 oct. 2015, 20:20

Re: Moulinnette - Importation de variables

Message par MikeKol »

Je pense que faire un peu de VBA peut permettre de faire une application vraiment utile. La moulinnette que j'avais eut générer des variables pour Unity, PL7 Pro et aussi pouvez générer des grafcets.

J'en entend beaucoup parler au boulot.
Avatar du membre
Cyril93
Maître du binaire
Maître du binaire
Messages : 484
Enregistré le : 29 oct. 2015, 14:22
Localisation : IDF

Re: Moulinnette - Importation de variables

Message par Cyril93 »

J'ai jamais dis que faire des macros ne servait à rien. C'est très utile même et le code d' itasoft fonctionne tres bien d'ailleurs.
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7162
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Moulinnette - Importation de variables

Message par itasoft »

Slts,
Après avoir relu la question plusieurs fois j’ai compris que je ne l’avais pas comprise.
En fait, La demande était de comment saisir des variables_élémentaires sur Excel et les importer sur Unity.
Effectivement la solution à Cyril93 est la plus simple, pas besoin de macro.
Moi j’avais compris que on recevait un fichier Excel quelconque par Email et qu’il fallait extraire des éléments de la feuille
pour avec ça, générer des variables à importer dans Unity.
Dans ce cas la macro génère un fichier compatible Unity qui commence par les codes h’EF h’BB h’BF
Wtxt.write(chr(239) & chr(187) & chr(191))
Sinon si ya pas ces codes c’est pas accepté par Unity.
Morale de cette histoire : bien relire la question pour bien la comprendre avant de répondre.
LOL
Automaticien privé (de tout)
itasoft@free.fr
steph68
Codeur fou
Codeur fou
Messages : 269
Enregistré le : 21 oct. 2015, 08:23

Re: Moulinnette - Importation de variables

Message par steph68 »

Dans ce cas la macro génère un fichier compatible Unity qui commence par les codes h’EF h’BB h’BF
Wtxt.write(chr(239) & chr(187) & chr(191))
ces codes (ça s'appelle un BOM = Byte Order Marker) indiquent que le document est encodé en UTF-8
voir ici pour plus d'infos : https://fr.wikipedia.org/wiki/Indicateu ... des_octets

le hic c'est que Excel ne te sert pas de l'UTF-8 (c'est pas natif sur Windows contrairement à Linux)
tu auras de l'UCS-2 (voir de l'UTF-16) ou au pire de l'ANSI.

donc ne pas s'amuser à utiliser des accents (les autres caractères que l'ASCII de base), il faut d'abord convertir l'encodage (et mettre le BOM) --> un éditeur de texte type Notepad++ fait ça très bien

aucune des 2 solutions ne fait le boulot proprement :mrgreen:

@+
Avatar du membre
itasoft
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 7162
Enregistré le : 20 oct. 2015, 10:15
Localisation : Lyon
Contact :

Re: Moulinnette - Importation de variables

Message par itasoft »

@steph68,
Disons que tu n'as pas complètement tort, effectivement il faut pas mettre le BOM sinon ça fait BOUM,
Si on ne le met pas, par défaut les caractères accentués venant de Excel sont reconduits correctement sur Unity.
ya pas de conversion UTF-8 à faire c'est ce que je remarque après essai, sinon doit mettre la librairie "kernel32" pour faire ça.
bb
Automaticien privé (de tout)
itasoft@free.fr
MiGaNuTs
Mi homme - Mi automate
Mi homme - Mi automate
Messages : 1089
Enregistré le : 12 nov. 2015, 21:02
Localisation : 45 - Loiret
Contact :

Re: Moulinnette - Importation de variables

Message par MiGaNuTs »

Salut.

J'ai un classeur magique pour faire ce genre de choses. Je préfère pas le publier en entier, mais je peut vous donner un bout de macro excel qui une fois adaptée fait super bien le taff.
Elle permet de créer un fichier .xsy (ou qqch du genre) a importer directement dans unity.

L'onglet "E-S" contient la liste des entrées sorties.
L'onglet général contient les variables "crées a la main".

les mnémoniques des variables sont dans la colonne F, l'adresse (pour les variables qui en on une) en J, en K il y'a la valeur de présélection, en L le flag de sauvegarde, en C le type de données et en D le commentaire. Dans les autres colonnes y'a des formules maisons, voire des macros, pour aller remplir les autres colonnes "automagiquement".

Vu que j'ai viré une partie du code, il se peut que ça foire un peu, mais je pense que vous arriverez a en faire quelque chose. Y'a plus qu'a l’adapter a votre sauce.

(En relisant le bouzin je me dit qu'on aurais pu faire plus "recyclable", mais bon, tant que ça marche on touche pas ^^)

Code : Tout sélectionner

Dim i 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) + " 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 = 2 To 5000
	If (Worksheets("E-S").Range("A" + CStr(i)).Value <> "") Then

		If (Worksheets("E-S").Range("AG" + CStr(i)).Value = "" Or Worksheets("E-S").Range("AG" + CStr(i)).Value = discriminant) Then
			EcritureVariableXML Worksheets("E-S").Range("F" + CStr(i)).Value, Worksheets("E-S").Range("J" + CStr(i)).Value, Worksheets("E-S").Range("C" + CStr(i)).Value, Chr(34) + Worksheets("E-S").Range("B" + CStr(i)).Value + " - " + Worksheets("E-S").Range("D" + CStr(i)).Value + Chr(34)
		End If
	Else
		Exit For
	End If
Next i

For i = 2 To 5000
	If (Worksheets("Général").Range("A" + CStr(i)).Value <> "") Then
		If Trim(Worksheets("Général").Range("K" + CStr(i)).Value) = "" Then
			EcritureVariableXML Worksheets("Général").Range("F" + CStr(i)).Value, Worksheets("Général").Range("J" + CStr(i)).Value, Worksheets("Général").Range("C" + CStr(i)).Value, Chr(34) + Worksheets("Général").Range("B" + CStr(i)).Value + " - " + Worksheets("Général").Range("D" + CStr(i)).Value + Chr(34)
		Else
			EcritureVariableXML Worksheets("Général").Range("F" + CStr(i)).Value, Worksheets("Général").Range("J" + CStr(i)).Value, Worksheets("Général").Range("C" + CStr(i)).Value, Chr(34) + Worksheets("Général").Range("B" + CStr(i)).Value + " - " + Worksheets("Général").Range("D" + CStr(i)).Value + Chr(34), CStr(Worksheets("Général").Range("K" + CStr(i)).Value)
		End If
	Else
		Exit For
	End If
Next i

Print #1, "</dataBlock>"
Print #1, "</VariablesExchangeFile>"
Close 1
Répondre