Auteur Sujet: Décoduino : une "centrale DCC" dédiée à la voie de programmation  (Lu 35688 fois)

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #60 le: octobre 29, 2020, 12:11:32 pm »
On est dans Excel , fichier "Materiel.xlsx"
Il faut sauver dans enregistrer sous :



Puis bouton "Enregistrer".
Là, Excel met une information :



On clique sur "Oui".
On peut sortir d'Excel. Là, il redemande si on veut sauver et on dit "Non".

On a alors un fichier "Materiel.txt", en plus des deux fichiers existants "Materiel.xslx" et "Materiel.tsv" (l'ancien)
On peut effacer l'ancien .tsv et renommer le .txt en .tsv.

Dit comme ça, on dirait une usine à gaz.
Mais c'est seulement à chaque fois qu'on ajoute une (ou plusieurs) loco(s).
Après, on n'a plus besoin d'aller dans ce fichier.

Denis :P
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

jfs59

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #61 le: octobre 29, 2020, 12:21:52 pm »
Ah oui évidemment ! pourquoi j'y ai pas pensé ....  ;D

jfs59

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #62 le: octobre 29, 2020, 04:58:08 pm »
comme cela me gavait un peu

Option Explicit
Dim sauvegarde As Boolean 'variable sauvegarde fichier

Private Sub CommandButton1_Click()
Dim Feuille As Worksheet

sauvegarde = False
If MsgBox("Voulez vous sauvegarder le fichier tsv ?", vbYesNo, "Demande de confirmation") = vbYes Then
       
        'sauvegarde demandée
        sauvegarde = True
        End If
 If sauvegarde = True Then
Application.DisplayAlerts = False
For Each Feuille In ActiveWorkbook.Sheets

If Feuille.Name = "Materiel" Then

Feuille.Copy

With ActiveWorkbook
.Title = Feuille.Name
.Subject = Feuille.Name
 .SaveAs Filename:=ThisWorkbook.Path & "\" & Feuille.Name & ".tsv", _
        FileFormat:=xlText, CreateBackup:=False
 .SaveAs Filename:=ThisWorkbook.Path & "\" & Feuille.Name & ".xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
         .Close
End With
End If
Next
MsgBox "Nouveau fichier créé et sauvegardé !"
Application.DisplayAlerts = True
End If
End Sub

une tite macro excel qui fait le taf enregistre une copie tsv et une en xls (donc sans la macro)

pour ma part j'ai rajouté au fichier excel un onglet gestion avec un gros bouton enregistrer qui appelle la macro

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #63 le: octobre 29, 2020, 07:15:38 pm »
C'est une excellente idée, mais il faut que je teste.
On ne crée pas seulement un fichier .txt, mais un fichier .txt avec séparateur tabulation (c'est l'essence même du format .tsv)
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

jfs59

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #64 le: octobre 30, 2020, 01:15:38 pm »
J'avoue je me suis défoulé  ;)

copie la dernière ligne du fichier demande un nom unique et une image (format png oblige) puis insère la ligne a la fin sans risque de merdouille  ;D


Option Explicit
Dim Ajout As Boolean
Function ValExiste(Wks As String, sCol As String, vSearch As String) As Boolean
  ValExiste = False
  ValExiste = Not IsError(Application.Match(vSearch, Sheets(Wks).Range(sCol & ":" & sCol), 0))
End Function
Sub ajouterligne()
Dim Feuille As Worksheet
Dim derLig As Long
Dim NouveauNom As String
Dim NomImage As String
Dim NRange As String
Dim NomUnique As Boolean
Ajout = False
NomUnique = False

If MsgBox("Voulez vous ajouter une machine ?", vbYesNo, "Demande de confirmation") = vbYes Then
       
        'ajout demandé
       
        Ajout = True
        End If
 If Ajout = True Then
Application.DisplayAlerts = False
   'derniere ligne
    derLig = Sheets("Materiel").Cells(Rows.Count, 1).End(xlUp).Row
    While NomUnique = False
    NomUnique = True
NouveauNom = InputBox("Entrez le nom de la machine !", "Nouvelle machine", "Le nom doit etre unique")
If ValExiste("Materiel", "A", NouveauNom) Then
MsgBox "Le nom existe déja !", vbExclamation
NomUnique = False
End If
 Wend
 'Affiche la boîte de dialogue "Ouvrir"
 ChDir ThisWorkbook.Path & "\"
  Application.FileDialog(msoFileDialogFilePicker).AllowMultiSelect = False
    NomImage = Application.GetOpenFilename("Images (*.png),*.png")
     NomImage = Split(NomImage, "\")(UBound(Split(NomImage, "\")))
NRange = derLig & ":" & derLig
Sheets("Materiel").Rows(NRange).Copy
Sheets("Materiel").Range(NRange).Insert Shift:=xlDown
Sheets("Materiel").Range("A" & derLig + 1) = NouveauNom
Sheets("Materiel").Range("B" & derLig + 1) = NomImage
MsgBox "Nouvelle machine ajoutée !"
Application.DisplayAlerts = True
End If
End Sub

Oui je sais mais bon ca fait travailler mon cerveau ...  ::)

évidemment les deux macros ne sauvent pas par défaut le fichier original (dés fois que) mais ça a été testé ... j'ai essayé de choisir un décodeur mais j'ai pas trop compris comment marche la base jmri

EDIT si on choisi pas d'image ca plante le programme processing (il aime pas l'absence ou la non existence d'une image) peut être du a un manque au niveau de la protection de ce cas dans le code
« Modifié: octobre 30, 2020, 01:24:26 pm par jfs59 »

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #65 le: octobre 30, 2020, 02:20:03 pm »
Cela me parait sympa.
On ne sait toujours pas si le .tsv généré est bien utilisable ?
Tu peux m'envoyer le fichier Excel avec la macro ? (J'ai la flemme... et du boulot)

OK, il manque des tests sur les images.
C'est anormal que ça plante. Je vais ajouter ces test pour que ça ne plante plus.

Mais je tiens à ce que ça ne marche pas si on n'a pas mis de photo.
La photo est un élément indispensable à l'esthétique de l'appli.

Denis  :P



"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

jfs59

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #66 le: octobre 30, 2020, 02:37:58 pm »
Citer
On ne sait toujours pas si le .tsv généré est bien utilisable ?
Tu peux m'envoyer le fichier Excel avec la macro ? (J'ai la flemme... et du boulot)

AH ben si le tsv je l'utilise enfin autant que je puisse y comprendre qq chose (les lignes ajoutées apparaissent bien dans le programme)


Je vous envoies ça dès que je repasse sur pc

Citer
Mais je tiens à ce que ça ne marche pas si on n'a pas mis de photo.
La photo est un élément indispensable à l'esthétique de l'appli.

Suffit de mettre par défaut une photo avec un gros point d exclamation...

apres je peux facilement obliger de choisir dans l'ajout de ligne ...
« Modifié: octobre 30, 2020, 03:49:16 pm par jfs59 »

jfs59

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #67 le: octobre 30, 2020, 04:22:52 pm »
lien supprimé
nécessité d'activer les macros évidemment pour que ca fonctionne.
« Modifié: octobre 31, 2020, 01:48:38 pm par jfs59 »

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #68 le: octobre 30, 2020, 05:35:01 pm »
Moi ancien Excel. Moi Excel 2007.

Et on ne peut pas ajouter de bouton dans le ruban dans 2007. Il faut attendre 2010 (celui que j'avais au bureau)
Donc, malheureusement pas de bouton.
Bon.
J'avais fait appel à mes souvenirs et j'ai ajouté l'onglet développeurs.
Ta première macro (lancée à la main) ne semblait pas fonctionner.

Par contre, ta nouvelle, à 2 boutons, fonctionne et, mieux, le fichier .tsv ajouté est parfaitement fonctionnel ;D ;D

Il me reste à trouver quelque chose de simple pour la lancer. On ne peut pas demander à n'importe qui de faire ce que j'ai fait.
Par ailleurs, il faudra chaîner les deux macros, sinon, certains vont croire avoir fait la modif (puisqu'elle apparaît à l'écran) et pas la sauvegarde.
Un seul bouton.

Bravo, on est sur une bonne piste

Denis :P

"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

jfs59

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #69 le: octobre 30, 2020, 05:42:05 pm »
Citer
Par contre, ta nouvelle, à 2 boutons, fonctionne et, mieux, le fichier .tsv ajouté est parfaitement fonctionnel

Bah la nouvelle est la même que l'ancienne sauf que j'ai changé le bouton de lancement pour faire "beau" (ça a toujours fonctionné chez moi)

on peut évidemment chainer les deux et faire la sauvegarde en fait il suffit de coller le code ou de lancer la sauvegarde après insertion mais bon celui qui s'amuse a ajouter des trucs sait a priori ce qu'il fait.

les actions sont bien différentes on peut vouloir l'un et pas l'autre ... enfin je sais pas on peut vouloir insérer plusieurs machine et a la fin seulement sauvegarder

On peut aussi mettre un mode d'emploi sur le panneau !
« Modifié: octobre 30, 2020, 05:50:25 pm par jfs59 »

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #70 le: octobre 31, 2020, 08:59:21 am »
Bonjour jfs59,

La nuit porte conseil  ;)

Tu as parfaitement raison, il faut 2 boutons.
Pour la raison que tu donnais (ajouter plusieurs lignes puis enregistrer le tout), mais aussi pour une autre raison : pour pouvoir supprimer des lignes. :)

Mais il reste un problème : Excel est un logiciel payant ! Et, j'ajouterai, cher.
En plus, il faut avoir au moins la version 2010 pour avoir des boutons qui lancent des macros (en 2007, je ne retrouve pas ces boutons)
Et, sur Locoduino, on n'utilise que des logiciels gratuits.

J'ai essayé LibreOffice, qui accepte les fichiers .xlsm, mais, malheureusement, ça bugue...
Je pense pourtant qu'on est à deux doigts du but.
Peux-tu regarder STP ?

Denis  :P

"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

jfs59

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #71 le: octobre 31, 2020, 09:48:34 am »
Bonjour

j'ai chargé libre office
j'ai chargé le jre java
j'ai réussi a démarrer les macros

évidemment ca marche pas il y a des erreurs d’exécution pratiquement partout
indépendamment des erreurs (qui pourraient peut être se régler ) le fichier tsv n'a rien a voir avec ce qu il devrait être ! incompatibilité totale.

je vais regarder plus loin mais ca me semble irréalisable sauf a trouver un expert du tableur libre office .

désolé

cordialement jfs

Edit en plus quand je sauve le fichier original sous libre office il bousille tout ! :o

Utiliser ajouter une machine bloque complétement le programme qu'il faut ensuite tuer dans le gestionnaire de tache .... :-X

je sais maintenant pourquoi j'ai plus installé libre office sur mon nouveau pc.
« Modifié: octobre 31, 2020, 10:18:09 am par jfs59 »

jfs59

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #72 le: octobre 31, 2020, 10:28:08 am »
Je viens de voir que dans le programme processing il y avait déjà de quoi lire et écrire le fichier matériel

pourquoi ne pas avoir tout centralisé ?


void sauve_table_Materiel() {
    Materiel.clearRows();   
    TableRow newRow;   
    int compte_vehicules = -1;
    for (Vehicule veh0 : tous_vehicules_complet) {
        newRow = Materiel.addRow();
        compte_vehicules++;
        Materiel.setString(compte_vehicules, "nom",        veh0.nom);
        Materiel.setString(compte_vehicules, "image",      veh0.image_t);
        Materiel.setString(compte_vehicules, "marque",     veh0.marque);
        Materiel.setString(compte_vehicules, "ref",        veh0.ref);
        Materiel.setInt(   compte_vehicules, "htamp",      veh0.htamp);
        Materiel.setString(compte_vehicules, "couleur",    "#"+hex(color(veh0.couleur)).substring(2));                              //  hex(color) -> String. String doit démarrer par #. Il faut donc remplacer les deux 1er caractères (FF)
        Materiel.setString(compte_vehicules, "echelle",    veh0.echelle);
        Materiel.setInt(   compte_vehicules, "moteur",     int(veh0.moteur));
        Materiel.setInt(   compte_vehicules, "dcc",        int(veh0.dcc));
        Materiel.setString(compte_vehicules, "date",       veh0.date);
        Materiel.setString(compte_vehicules, "fabricant",  veh0.fabricant);
        Materiel.setString(compte_vehicules, "famille",    veh0.famille);
        Materiel.setString(compte_vehicules, "modele",     veh0.modele);
        for (int i = 1; i < 201; i++) {
            Materiel.setInt(compte_vehicules, "CV"+str(i), veh0.CV[i]);
        }
        for (int i = 0; i < 5; i++) {
            Materiel.setInt(compte_vehicules, "P"+str(i), veh0.p[i]);
        }
        Materiel.setInt(   compte_vehicules, "ident",      veh0.ID);
    }       
    saveTable(Materiel, Repertoire_Communs+"Materiel/Materiel.tsv");
}

DDEFF

  • Hero Member
  • *****
  • Messages: 739
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #73 le: octobre 31, 2020, 11:03:10 am »
Effectivement, LibreOffice marche quand on se limite à des choses simples.
Mais quand on commence à toucher aux macros...
Pour info, j'avais essayé de faire marcher un programme Access et je n'y suis jamais arrivé.

On oublie.

Effectivement, Processing sait lire et écrire les fichiers .tsv (heureusement)

Je pensais que c'était plus simple avec Excel en manuel :
On remplit quelques cases à la main dans le .xlsx (et là, je pensais pouvoir utiliser LibreOffice), on transforme en fichier .tsv et c'est fini.
On a un fichier dans un format que tout le monde connait.

Donc, je vais ajouter un bouton "ajouter un véhicule" dans Processing. C'est tout à fait possible. Tu as raison.
Et comme on travaille directement avec .tsv, il n'y a pas de problème.
Après, comme un fichier texte est immangeable (essaie d'ouvrir Materiel.tsv avec le BlocNote ou, pire, avec Word), on ouvre le fichier avec LibreOffice via Classeur_Calc pour regarder ce qui est dedans.

Mais voilà : on ne peut pas sauver depuis LibreOffice dans un format qui pourrait devenir un .tsv (il ne connait que le .csv, ce qui ne nous sert pas).

Donc, on garderait LibreOffice juste pour la consultation gratuite.

Après, et c'est ça qui me freinait vraiment, c'est qu'il faut définir dans Processing une fenêtre pour pouvoir modifier les champs du début, etc...
En fait : refaire un éditeur alors qu'on en a déjà un avec Excel.

Par contre, ce à quoi je n'avais pas pensé, c'est que LibreOffice ne savait pas sortir un format avec la tabulation comme séparateur.
Il faut un vrai Excel payant.

Donc, je n'ai plus le choix.
Soit on a un Excel > 2010 et tes macros fonctionnent, soit je suis obligé de tout faire dans Processing...

On aura au moins appris ça  8)

Denis  :P
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

jfs59

  • Newbie
  • *
  • Messages: 22
    • Voir le profil
Re : Décoduino : une "centrale DCC" dédiée à la voie de programmation
« Réponse #74 le: octobre 31, 2020, 12:41:04 pm »
sinon j'ai ca
lien supprimé

écris en lazarus ce matin il permet de charger le tsv d'ajouter une ligne de supprimer et de sauver

et bien d'autre chose si je m'amuse encore un peu

comme ouvrir une fenetre en cas d'ajout choisir l'image etc ...
« Modifié: octobre 31, 2020, 01:48:03 pm par jfs59 »