PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Case à cocher dans un fichier plat
Case à cocher dans un fichier plat
Iniciado por Yann LE BOULC'H, jan., 24 2025 5:45 PM - 43 respostas
Membro registado
192 mensagems
Publicado em janeiro, 24 2025 - 5:45 PM
Petit changement de mon manager sur mon projet.

Plutôt que d'avoir un bouton "Effacer" qui va supprimer la ligne concernée, j'aimerai mettre une case à cocher qu'un collègue cochera pour indiquer que c'est fait.



Sauf que j'aimerai que cela soit mémoriser à la prochaine ouverture de l'application ou reboot du PC.

Quand j'ouvre l'application, cela détecte le jour et filtre automatiquement ce qu'il y a dans ce fichier plat.



Je sais que c'est complexe mais comment pourrais-je faire pour laisser un indicateur dans le fichier qui dit si la case est déjà coché ou non et si oui, faire apparaitre la case cocher dans le tableau ?

En effet, je ne vois pas comment récupérer la ligne dans mon fichier INI et lui dire d'ajouter un caractère qui permettra la détection de la coche active ou non...

J'aurais du passer pour un fichier de données HFSQL mais tout le monde dans mon service ne sait pas l'alimenter alors qu'un fichier plat est bien plus facile à modifier...

Merci d'avance pour votre aide.
Membro registado
792 mensagems
Publicado em janeiro, 24 2025 - 7:01 PM
Pour la case à cocher, vous pouvez remplacer le bouton Effacer par un interrupteur (dans la description de la table, sur la rubrique, choisissez interrupteur.
Ceci va nécessiter d'ajouter le paramètre dans le fichier .ini, 1 pour coché, 0 pour non coché.
Il va falloir ouvrir le fichier en écriture et par exemple faire un remplace puis sauver le fichier.
Vous pouvez aussi réécrire complètement le fichier en écrasant le précédent.

Cdlt
Membro registado
192 mensagems
Publicado em janeiro, 24 2025 - 10:29 PM
Cedric_34,

On ne se quitte plus et merci de répondre présent :merci:

La mise en place de la case à cocher, je pense que je peux y arriver sans pb. L'écriture dans le fichier source en ajoutant 0 ou 1 à la fin de la ligne concernée, c'est bien à cela que je pensais.

Maintenant, quand j'effectue un tri par "jour" dans mon tableau, la 1ere ligne de celui quj est affichée peut correspondre à la ligne 50 de mon fichier plat. Comme puis le savoir svp ?
Membro registado
792 mensagems
Publicado em janeiro, 24 2025 - 11:29 PM
En recherchant le texte complet de la ligne (si évidemment la chaine est unique, vérifiez bien ceci).
vous recherchez la chaine avant la modification (donc en théorie coché était à 0) puis vous remplacez par la chaine où coché est à 1

Vous récupérez la chaine de la ligne (éventuellement en la reconstruisant pour quelle soit parfaitement identique à la ligne dans le fichier. La fonction Remplace fera le travail (regardez la doc), Nouvelle chaine sera la même chaine mais avec la modification sur coché.

Attention, vous avez des caractères problématiques dans les chaines, dites-nous si vous n'y arrivez pas.
Eventuellement, déposez ici (en texte, pas en image) un contenu du fichier .ini pour faire des tests.
Mensagem modificada, janeiro, 24 2025 - 11:48 PM
Membro registado
192 mensagems
Publicado em janeiro, 25 2025 - 12:01 AM
Wouah Cédric, effectivement, cela sort complètement de mes compétences ;(

J'ai hélas rien compris comment codage votre explication. Habituellement, j'essaye de fournir un bout de code histoire de montrer que j'ai cherché mais là...

Voici le contenu du fichier ini (rien de confidentielle dedans) :

1-Lundi,Information,Consultation Teams de l'équipe,06:30,06:35,00:05,Une fois
1-Lundi,Information,Consultations des mails Outlook,06:30,06:45,00:15,Une fois
1-Lundi,$U,Contrôle et gestion des plantages $U de la nuit,06:30,07:30,01:00,Une fois
1-Lundi,Information,"Gestion et envoi de la ""Synthèse de prod"" ",06:30,08:00,01:30,Une fois
1-Lundi,$U,Contrôle et gestion des plantages $U au fil de l'eau,06:30,14:15,07:45,Fil de l'eau
1-Lundi,Check,Contrôle des mails USRBATCH.,06:30,14:15,07:45,Fil de l'eau
1-Lundi,Check,Check du matin pour Eazle,06:45,07:00,00:15,Une fois
1-Lundi,Check,Contrôle et gestion des batchs B1,06:45,07:00,00:15,Une fois
1-Lundi,Supervision,Suivi des pages NAGVIS,06:45,07:00,00:15,Une fois
1-Lundi,Supervision,Suivi des alertes CENTREON au fil de l'eau,06:45,14:15,07:30,Fil de l'eau
1-Lundi,Snow,"Opérations diverses planifiées ""chg de mot de passe""",07:00,08:00,01:00,Occasionnel
1-Lundi,Snow,Suivi et prise en charge des tickets Snow au fil de l'eau,07:00,14:15,07:15,Fil de l'eau
1-Lundi,Supervision,Contrôle affichage des écrans supervision TV SC et STC,07:15,07:30,00:15,Une fois
1-Lundi,Supervision,Contrôle des 2 écrans de supervisions RDC ,07:30,07:45,00:15,Une fois
1-Lundi,Check,Vérfifier l'état de la sauvegarde,07:45,08:00,00:15,Une fois
1-Lundi,Supervision,Contrôle de l'écran Workplace du 3ème étage,08:00,08:05,00:05,Une fois
1-Lundi,Check,"Gestion des sessions ""mode PRIV"" éventuelles ",08:00,14:15,06:15,Fil de l'eau
1-Lundi,Information,Call journalier Hosting ,09:00,09:45,00:45,Une fois
1-Lundi,Check,"Fichier excel ""Check de Prod"" tous les jours",10:00,10:30,00:30,Une fois
1-Lundi,Data,"Opération ""Chiffres SAP""' le lundi matin.",10:00,10:30,00:30,Jour dédié
1-Lundi,Snow,"Opérations diverses planifiées ""Package KSIOP""",12:00,14:00,02:00,Occasionnel
1-Lundi,Check,Vérfifier la bone fin de la sauvegarde,14:00,14:15,00:15,Une fois
2-Mardi,Information,Consultation Teams de l'équipe,06:30,06:35,00:05,Une fois
2-Mardi,Information,Consultations des mails Outlook,06:30,06:45,00:15,Une fois
2-Mardi,$U,Contrôle et gestion des plantages $U de la nuit,06:30,07:30,01:00,Une fois
2-Mardi,Information,"Gestion et envoi de la ""Synthèse de prod"" ",06:30,08:00,01:30,Une fois
2-Mardi,$U,Contrôle et gestion des plantages $U au fil de l'eau,06:30,14:15,07:45,Fil de l'eau
2-Mardi,Check,Contrôle des mails USRBATCH.,06:30,14:15,07:45,Fil de l'eau
2-Mardi,Check,Check du matin pour Eazle,06:45,07:00,00:15,Une fois
2-Mardi,Check,Contrôle et gestion des batchs B1,06:45,07:00,00:15,Une fois
2-Mardi,Supervision,Suivi des pages NAGVIS,06:45,07:00,00:15,Une fois
2-Mardi,Supervision,Suivi des alertes CENTREON au fil de l'eau,06:45,14:15,07:30,Fil de l'eau
2-Mardi,Snow,"Opérations diverses planifiées ""chg de mot de passe""",07:00,08:00,01:00,Occasionnel
2-Mardi,Snow,Suivi et prise en charge des tickets Snow au fil de l'eau,07:00,14:15,07:15,Fil de l'eau
2-Mardi,Supervision,Contrôle affichage des écrans supervision TV SC et STC,07:15,07:30,00:15,Une fois
2-Mardi,Supervision,Contrôle des 2 écrans de supervisions RDC ,07:30,07:45,00:15,Une fois
2-Mardi,Check,Vérfifier l'état de la sauvegarde,07:45,08:00,00:15,Une fois
2-Mardi,Supervision,Contrôle de l'écran Workplace du 3ème étage,08:00,08:05,00:05,Une fois
2-Mardi,Check,"Gestion des sessions ""mode PRIV"" éventuelles ",08:00,14:15,06:15,Fil de l'eau
2-Mardi,Information,Call journalier Hosting ,09:00,09:45,00:45,Une fois
2-Mardi,Check,"Fichier excel ""Check de Prod"" tous les jours",10:00,10:30,00:30,Une fois
2-Mardi,Snow,"Opérations diverses planifiées ""Package KSIOP""",12:00,14:00,02:00,Occasionnel
2-Mardi,Check,Vérfifier la bone fin de la sauvegarde,14:00,14:15,00:15,Une fois
3-Mercredi,Information,Consultation Teams de l'équipe,06:30,06:35,00:05,Une fois
3-Mercredi,Information,Consultations des mails Outlook,06:30,06:45,00:15,Une fois
3-Mercredi,$U,Contrôle et gestion des plantages $U de la nuit,06:30,07:30,01:00,Une fois
3-Mercredi,Information,"Gestion et envoi de la ""Synthèse de prod"" ",06:30,08:00,01:30,Une fois
3-Mercredi,$U,Contrôle et gestion des plantages $U au fil de l'eau,06:30,14:15,07:45,Fil de l'eau
3-Mercredi,Check,Contrôle des mails USRBATCH.,06:30,14:15,07:45,Fil de l'eau
3-Mercredi,Check,Check du matin pour Eazle,06:45,07:00,00:15,Une fois
3-Mercredi,Check,Contrôle et gestion des batchs B1,06:45,07:00,00:15,Une fois
3-Mercredi,Supervision,Suivi des pages NAGVIS,06:45,07:00,00:15,Une fois
3-Mercredi,Supervision,Suivi des alertes CENTREON au fil de l'eau,06:45,14:15,07:30,Fil de l'eau
3-Mercredi,Snow,"Opérations diverses planifiées ""chg de mot de passe""",07:00,08:00,01:00,Occasionnel
3-Mercredi,Snow,Suivi et prise en charge des tickets Snow au fil de l'eau,07:00,14:15,07:15,Fil de l'eau
3-Mercredi,Supervision,Contrôle affichage des écrans supervision TV, SC et STC,07:15,07:30,00:15,Une fois
3-Mercredi,Supervision,Contrôle des 2 écrans de supervisions RDC ,07:30,07:45,00:15,Une fois
3-Mercredi,Check,Vérfifier l'état de la sauvegarde,07:45,08:00,00:15,Une fois
3-Mercredi,Supervision,Contrôle de l'écran Workplace du 3ème étage,08:00,08:05,00:05,Une fois
3-Mercredi,Check,"Gestion des sessions ""mode PRIV"" éventuelles ",08:00,14:15,06:15,Fil de l'eau
3-Mercredi,Information,Call journalier Hosting ,09:00,09:45,00:45,Une fois
3-Mercredi,Check,"Fichier excel ""Check de Prod"" tous les jours",10:00,10:30,00:30,Une fois
3-Mercredi,Data,"Opération ""Page Antivirus"" le mercredi matin",10:00,10:30,00:30,Jour dédié
3-Mercredi,Snow,"Opérations diverses planifiées ""Package KSIOP""",12:00,14:00,02:00,Occasionnel
3-Mercredi,Check,Vérfifier la bone fin de la sauvegarde,14:00,14:15,00:15,Une fois
4-Jeudi,Information,Consultation Teams de l'équipe,06:30,06:35,00:05,Une fois
4-Jeudi,Information,Consultations des mails Outlook,06:30,06:45,00:15,Une fois
4-Jeudi,$U,Contrôle et gestion des plantages $U de la nuit,06:30,07:30,01:00,Une fois
4-Jeudi,Information,"Gestion et envoi de la ""Synthèse de prod"" ",06:30,08:00,01:30,Une fois
4-Jeudi,$U,Contrôle et gestion des plantages $U au fil de l'eau,06:30,14:15,07:45,Fil de l'eau
4-Jeudi,Check,Contrôle des mails USRBATCH.,06:30,14:15,07:45,Fil de l'eau
4-Jeudi,Check,Check du matin pour Eazle,06:45,07:00,00:15,Une fois
4-Jeudi,Check,Contrôle et gestion des batchs B1,06:45,07:00,00:15,Une fois
4-Jeudi,Supervision,Suivi des pages NAGVIS,06:45,07:00,00:15,Une fois
4-Jeudi,Supervision,Suivi des alertes CENTREON au fil de l'eau,06:45,14:15,07:30,Fil de l'eau
4-Jeudi,Snow,"Opérations diverses planifiées ""chg de mot de passe""",07:00,08:00,01:00,Occasionnel
4-Jeudi,Snow,Suivi et prise en charge des tickets Snow au fil de l'eau,07:00,14:15,07:15,Fil de l'eau
4-Jeudi,Supervision,Contrôle affichage des écrans supervision TV, SC et STC,07:15,07:30,00:15,Une fois
4-Jeudi,Supervision,Contrôle des 2 écrans de supervisions RDC ,07:30,07:45,00:15,Une fois
4-Jeudi,Check,Vérfifier l'état de la sauvegarde,07:45,08:00,00:15,Une fois
4-Jeudi,Supervision,Contrôle de l'écran Workplace du 3ème étage,08:00,08:05,00:05,Une fois
4-Jeudi,Check,"Gestion des sessions ""mode PRIV"" éventuelles ",08:00,14:15,06:15,Fil de l'eau
4-Jeudi,Information,Call journalier Hosting ,09:00,09:45,00:45,Une fois
4-Jeudi,Check,"Fichier excel ""Check de Prod"" tous les jours",10:00,10:30,00:30,Une fois
4-Jeudi,Snow,"Opérations diverses planifiées ""Package KSIOP""",12:00,14:00,02:00,Occasionnel
4-Jeudi,Check,Vérfifier la bone fin de la sauvegarde,14:00,14:15,00:15,Une fois
5-Vendredi,Information,Consultation Teams de l'équipe,06:30,06:35,00:05,Une fois
5-Vendredi,Information,Consultations des mails Outlook,06:30,06:45,00:15,Une fois
5-Vendredi,$U,Contrôle et gestion des plantages $U de la nuit,06:30,07:30,01:00,Une fois
5-Vendredi,Information,"Gestion et envoi de la ""Synthèse de prod"" ",06:30,08:00,01:30,Une fois
5-Vendredi,$U,Contrôle et gestion des plantages $U au fil de l'eau,06:30,14:15,07:45,Fil de l'eau
5-Vendredi,Check,Contrôle des mails USRBATCH.,06:30,14:15,07:45,Fil de l'eau
5-Vendredi,Check,Check du matin pour Eazle,06:45,07:00,00:15,Une fois
5-Vendredi,Check,Contrôle et gestion des batchs B1,06:45,07:00,00:15,Une fois
5-Vendredi,Supervision,Suivi des pages NAGVIS,06:45,07:00,00:15,Une fois
5-Vendredi,Supervision,Suivi des alertes CENTREON au fil de l'eau,06:45,14:15,07:30,Fil de l'eau
5-Vendredi,Snow,"Opérations diverses planifiées ""chg de mot de passe""",07:00,08:00,01:00,Occasionnel
5-Vendredi,Snow,Suivi et prise en charge des tickets Snow au fil de l'eau,07:00,14:15,07:15,Fil de l'eau
5-Vendredi,Supervision,Contrôle affichage des écrans supervision TV, SC et STC,07:15,07:30,00:15,Une fois
5-Vendredi,Supervision,Contrôle des 2 écrans de supervisions RDC ,07:30,07:45,00:15,Une fois
5-Vendredi,Check,Vérfifier l'état de la sauvegarde,07:45,08:00,00:15,Une fois
5-Vendredi,Supervision,Contrôle de l'écran Workplace du 3ème étage,08:00,08:05,00:05,Une fois
5-Vendredi,Check,"Gestion des sessions ""mode PRIV"" éventuelles ",08:00,14:15,06:15,Fil de l'eau
5-Vendredi,Information,Call journalier Hosting ,09:00,09:45,00:45,Une fois
5-Vendredi,Information,MAJ planning Calendrier Outlook pour l'équipe,09:30,09:45,00:15,Jour dédié
5-Vendredi,Data,"Remplissage ""Alerte"" le vendredi pour la semaine suivante",09:45,10:00,00:15,Jour dédié
5-Vendredi,Check,"Fichier excel ""Check de Prod"" tous les jours",10:00,10:30,00:30,Une fois
5-Vendredi,$U,Ménage sur $U maquette,10:30,11:00,00:30,Jour dédié
5-Vendredi,Snow,"Opérations diverses planifiées ""Package KSIOP""",12:00,14:00,02:00,Occasionnel
5-Vendredi,Check,Vérfifier la bone fin de la sauvegarde,14:00,14:15,00:15,Une fois
5-Vendredi,Data,Vérifier les 5 check de prod dasn ArchiveHDP,14:00,14:15,00:15,Jour dédié
6-Samedi,Data,Changement numéro d'astreinte sur téléphone WMS,09:55,10:00,00:05,Jour dédié

Certains caractères qui posent soucis peuvent être modifiés au besoin.
Mensagem modificada, janeiro, 25 2025 - 12:02 AM
Membro registado
792 mensagems
Publicado em janeiro, 25 2025 - 12:11 AM
par exemple, cette ligne :
3-Mercredi,Information,Consultation Teams de l'équipe,06:30,06:35,00:05,Une fois

si elle est bien unique, avec la fonction Remplace, la chaine à remplacer sera :
3-Mercredi,Information,Consultation Teams de l'équipe,06:30,06:35,00:05,Une fois,0
(le 0 à la fin est pour non coché)

Nouvelle chaine sera :
3-Mercredi,Information,Consultation Teams de l'équipe,06:30,06:35,00:05,Une fois,1
(on change juste 1 pour coché)

Remplace pourra trouvé la chaine voulue et la remplacer.
Membro registado
192 mensagems
Publicado em janeiro, 25 2025 - 12:31 AM
Ok je vais plancher sur la fonction REMPLACE.

Faut que je récupère la ligne concernée dans la table, la mettre en mémoire pour pouvoir la travailler...
Mensagem modificada, janeiro, 25 2025 - 12:42 AM
Membro registado
792 mensagems
Publicado em janeiro, 25 2025 - 2:26 AM
Le fichier .ini m'inquiète, il contient des caractères accentués, des caractères spéciaux ...
ça risque de coincer avec la fonction Remplace, il faudra peut être jongler avec UT8versUnicode, AnsiVersUnicode, etc..., ce qui va compliquer l'opération

Je testerai demain mais je me demande si la réécriture complète du fichier à chaque modification ne serait pas préférable, mais est-ce possible dans votre contexte ?
Membro registado
192 mensagems
Publicado em janeiro, 25 2025 - 8:45 AM
Aucun pb de supprimer tous les caractères spéciaux dans le fichier source.
Concernant la réécriture, aucun souci non plus, j'ai carte blanche.

Hâte de voir vos tests et mille mercis d'avance
Membro registado
792 mensagems
Publicado em janeiro, 25 2025 - 12:24 PM
Bonjour
Finalement, je n'ai pas rencontré de problème particulier.
Dans le fichier ini, j'ai ajouté ,0 (virgule zéro) sur toutes les lignes, j'ai donc la colonne 8 de ma table non cochée.

j'ai déclaré 2 variables dans le code de la fenêtre
MaChaineARemplacer est une chaîne
MaNouvelleChaine est un chaîne


dans l'évènement "Sélection d'une ligne de TABLE_TacheHDP"
MaChaineARemplacer = TABLE_TacheHDP[TABLE_TacheHDP]


et enfin, dans le code "A chaque modification de colonne8 (TABLE_TacheHDP)"
MaNouvelleChaine = TABLE_TacheHDP[TABLE_TacheHDP]

MaChaineARemplacer = Remplace(MaChaineARemplacer,TAB,",")
MaNouvelleChaine = Remplace(MaNouvelleChaine,TAB,",")

ContenuFichier est une chaîne
ContenuFichier = fChargeTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini")
ContenuFichier = Remplace(ContenuFichier, MaChaineARemplacer, MaNouvelleChaine)
fSauveTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini", ContenuFichier)


A chaque clic sur une case à cocher, la ligne est remplacée dans le fichier "homme_de_prod.ini".

EDIT : il serait possible, en enregistrant les TAB dans le fichier (à la place des virgules) de supprimer ces 2 lignes :
MaChaineARemplacer = Remplace(MaChaineARemplacer,TAB,",")
MaNouvelleChaine = Remplace(MaNouvelleChaine,TAB,",")

Cdlt
Mensagem modificada, janeiro, 25 2025 - 12:58 PM
Membro registado
192 mensagems
Publicado em janeiro, 25 2025 - 5:53 PM
Hello Cedric_34,

Wouah super boulot et un grand grand d'avoir bosser sur mon problème, c'est méga sympa :merci:

Non ne te tire pas une balle tout de suite stp, c'est moi le boulet et je m'explique :)

J'ai créé ma case à cocher :



J'ai ajouté ton code dans la fenêtre principal :



Ca dans le code de ma Table_TacheHDP :



ET ton code dans la colonne_effacer (8eme colonne chez moi) :



J'ai également ajouté un 0 à la fin de toute les lignes.

Hélas, je n'ai aucune erreur quand je teste mais cela ne modifie aucunement en 1 la ligne du samedi...

Mais le bouton en lui-même n'a besoin d'aucun codage ? Je pense que si...

La logique veut que la ligne concernée se modifié avec un 1 à la fin si je la coche mais la case doit restée cochée si je relance l'application.

Désolé si je n'ai pas encore tout compris à Windev mais je me soigne :D
Membro registado
792 mensagems
Publicado em janeiro, 25 2025 - 6:05 PM
Bonjour,
je réponds vite fait car je dois m'absenter, retour dans 2h je pense.

Avez-vous pensé à rectifier le code de chargement, dans votre code il y a ceci :
POUR TOUTE CHAÎNE sMot DE sfichier SÉPARÉE PAR RC
nIndice = TABLE_TacheHDP.AjouteLigne(ExtraitChaîne(sMot,1,","),ExtraitChaîne(sMot,2,","),ExtraitChaîne(sMot,3,","),ExtraitChaîne(sMot,4,","),ExtraitChaîne(sMot,5,","),ExtraitChaîne(sMot,6,","),ExtraitChaîne(sMot,7,","))


mais il manque la 8eme colonne, donc ça devient :
POUR TOUTE CHAÎNE sMot DE sfichier SÉPARÉE PAR RC
nIndice = TABLE_TacheHDP.AjouteLigne(ExtraitChaîne(sMot,1,","),ExtraitChaîne(sMot,2,","),ExtraitChaîne(sMot,3,","),ExtraitChaîne(sMot,4,","),ExtraitChaîne(sMot,5,","),ExtraitChaîne(sMot,6,","),ExtraitChaîne(sMot,7,","),ExtraitChaîne(sMot,8,","))


Cdlt
Mensagem modificada, janeiro, 25 2025 - 6:07 PM
Membro registado
192 mensagems
Publicado em janeiro, 25 2025 - 6:24 PM
Effectivement, j'avais oublié d'ajouter la colonne 8 : ExtraitChaîne(sMot,8,","))

Maintenant j'ai ceci :




Les 2 résultats semblent bon :

MaChaineARemplacer : 6-Samedi,Data,Changement numéro d'astreinte sur téléphone WMS,09:55,10:00,00:05,Jour dédié,0,0
MaNouvelleChaine : 6-Samedi,Data,Changement numéro d'astreinte sur téléphone WMS,09:55,10:00,00:05,Jour dédié,0,1

Le fichier Homme_de_prod.ini est bien regénéré puisqu'il change l'heure dès que je coché la case mais au final, la ligne reste à 0 :




Si je relance l'application, la case restera coché si la ligne est à 1 ? Ca serait top pour se rappeler ce qui a déjà été fait si cette même appli crash ou le pc reboot...
Membro registado
192 mensagems
Publicado em janeiro, 25 2025 - 6:41 PM
La valeur de la case à cocher est sauvegardée à l'état 0 et non 1 :



Pourtant la valeur de MaNouvelleChaine est bonne :




Bizarre, bizarre :o
Mensagem modificada, janeiro, 25 2025 - 6:41 PM
Membro registado
792 mensagems
Publicado em janeiro, 25 2025 - 10:59 PM
Bonsoir,
Oui, quand vous relancerez l'application, vous retrouverez les cases cochées ou non cochées.

Quelque chose m'échappe, pourquoi avez-vous 0,0 et 0,1 à la fin de ces 2 lignes tirées du Post #13, normalement il ne devrait y avoir qu'un seul chiffre ?

MaChaineARemplacer : 6-Samedi,Data,Changement numéro d'astreinte sur téléphone WMS,09:55,10:00,00:05,Jour dédié,0,0
MaNouvelleChaine : 6-Samedi,Data,Changement numéro d'astreinte sur téléphone WMS,09:55,10:00,00:05,Jour dédié,0,1

Je soupçonne votre cases à cocher, ce n'est pas normal mais essayez d'ajouter encore une colonne (Post #13) pour voir si ça fonctionne :
ExtraitChaine(sMot,9,",")
Mensagem modificada, janeiro, 25 2025 - 11:24 PM
Membro registado
192 mensagems
Publicado em janeiro, 25 2025 - 11:30 PM
Je pense avoir compris mon erreur. J'ai moi même ajouté manuellement les ,0 à la fin de chaque ligne pour fixer l'état par défaut de la case à cocher.

Je vais les retirer et je verrais si le fichier se sauvegarde correctement demain matin.

Bonne nuit
Membro registado
792 mensagems
Publicado em janeiro, 25 2025 - 11:47 PM
Non, je ne pense pas que l'erreur vienne de là, j'ai moi aussi ajouter les 0 à la main.
Pour moi, la différence vient du fait que vous avez créé une colonne conteneur dans laquelle vous avez placé une case à cocher.
Ce n'est pas ce que j'ai fait, dans la description de la table, j'ai sélectionné la colonne 8 et j'ai directement défini comme Interrupteur alors que vous, vous avez sélectionnez conteneur.
Est-ce bien cela ?
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 12:16 AM
Maintenant que vous le dites, c'est bien cela oui suite aux conseils d'un autre membre car l'idée d'avant était de juste supprimer la ligne active.

Je vais modifier cela demain et je vous dirai

Merci encore pour votre patience
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 12:32 AM
Dernière information pour ce soir :
J'ai 3 anomalies :
ligne 56
3-Mercredi,Supervision,Contrôle affichage des écrans supervision TV, SC et STC,07:15,07:30,00:15,Une fois,0
Ligne 78
4-Jeudi,Supervision,Contrôle affichage des écrans supervision TV, SC et STC,07:15,07:30,00:15,Une fois,0
Ligne 99
5-Vendredi,Supervision,Contrôle affichage des écrans supervision TV, SC et STC,07:15,07:30,00:15,Une fois,0

Les 3 lignes contiennent une virgule après TV, c'est un problème qui va planter l'application.
Il faut mettre en place le moyen d'interdire la virgule dans les chaines, ou passer à la Tabulation (TAB)

Cdlt
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 9:26 AM
Bonjour Cedric,

C'est nickel, tout fonctionne comme je le voulais.

Je vais surement me répéter mais un énorme merci pour le temps passer, votre patience et persévérance, c'est hyper sympa, chapeau bas :merci:

Bon dimanche.
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 9:33 AM
Maintenant, je vais juste plancher sur un bouton qui va remettre à 0 toutes les lignes présentes dans le tableau (cases décochée) et sans toucher aux lignes des autres jours.

Dans votre code, faut que je comprenne juste à quelle moment la colonne 8 prend 1 si c'est coché et 0 si décoché.
Mensagem modificada, janeiro, 26 2025 - 9:47 AM
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 10:13 AM
Bonjour Yann

Petite rectification à réaliser.
Si la ligne est sélectionnée alors l'évènement n'est pas déclenché et la récupération de la valeur de la ligne ne se fait pas (c'est le cas quand vous lancez l'appli, la première ligne est sélectionnée et donc la case à cocher n'est pas enregistrée si vous cliquez).

Il faut déplacer le code qui est dans dans l'évènement "Sélection d'une ligne de TABLE_TacheHDP"
MaChaineARemplacer = TABLE_TacheHDP[TABLE_TacheHDP]
:

Pour le mettre dans l'évènement Bouton Gauche (WM_LBUTTONDOWN) de TABLE_TacheHDP".

Question : Que se passe t-il en fin de semaine, vous créez un nouveau fichier ou vous poursuivez dans ce même fichier, ne risque t-il pas d'y avoir des doublons de ligne qui serait problématique pour la fonction Remplace?
Dans ce cas, il faudrait ajouter par exemple une date pour que le doublon ne soit pas possible.

Bonne continuation
Cdlt
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 10:24 AM
Modification faite :



Voilà pourquoi il me reste à faire un bouton qui va juste décocher toutes les cases du tableau (filtrées du jour).
Comme ça mon collègue quand il arrivera sur la page filtrée, il cliquera sur ce bouton et toutes les cases passeront en décochées.
Faut juste que je trouve comment maintenant.

J'ai historisé le fichier du jour aussi histoire de voir le lendemain si rien n'a été oublié :

sfichierDuJour est une chaîne = fRepExe + "\Archives\homme_de_prod_" + DateSys() + ".ini"
Trace("Nom du fichier :", sfichierDuJour)
fCopieFichier(sNomFichierINI,sfichierDuJour)

A chaque case cochée, ça copie le fichier.
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 10:37 AM
Une piste pour décocher toutes les cases :
les lignes cochées se terminent par : ,1CRLF
Vous ouvrez le fichier (comme dans le code des cases), vous remplacez ,1CRLF (virgule 1 CRLF) par ,0CRLF (virgule 0 CRLF).
ça va tout remplacer en 1 coup.

Cdlt
Mensagem modificada, janeiro, 26 2025 - 10:54 AM
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 1:12 PM
Pour le bouton RAZ, je me suis inspiré du code des cases et ça remplace tous les 1 activés par 0 :
MaNouvelleChaine = TABLE_TacheHDP[TABLE_TacheHDP]

MaChaineARemplacer = Remplace(MaChaineARemplacer,TAB,",")
MaNouvelleChaine = Remplace(MaNouvelleChaine,TAB,",")

ContenuFichier est une chaîne
ContenuFichier = fChargeTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini")
ContenuFichier = Remplace(ContenuFichier, ",1", ",0")
fSauveTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini", ContenuFichier)


Ca semble bien fonctionner pour le moment.

Cependant, j'aimerai rafraichir le tableau pour voir la case décochée après le RAZ et je ne trouve pas comment. Une dernière idée svp ?
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 1:34 PM
Pour le rafraichissement, c'est simple, vous relancez le code de remplissage de la table.

Mais attention, ce que vous avez fait va poser problème, imaginez que vous ayez en colonne 4, 5 ou 6 un horaire qui commence par ,1 (virgule 1) genre ,10:15,10:30,12:00
Vous vous retrouvez avec ,00:15,00:30,02:00 donc vos données sont faussées.

Il faut donc analyser votre fichier pour vérifier si le caractère de saut de ligne est bien CRLF, et comme dit plus haut, vous remplacez ,1CRLF (virgule 1 CRLF) par ,0CRLF (virgule zéro CRLF).
C'est le seul moyen pour assurer le résultat, (virgule 1 CRLF) ne peut être qu'en fin de ligne.
Remplace est bien mais il faut être prudent.

Edit : vous avez le cas dans votre fichier, il doit donc être faussé.

Cdlt
Mensagem modificada, janeiro, 26 2025 - 1:40 PM
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 2:55 PM
Merci Cédric

Je vais regarder ça ce soir ou demain matin concernant le CRLF car c'est des caractères cachés et je ne vois pas comment REMPLACE va le voir...;(
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 2:57 PM
pour le CRLF, c'est :
ContenuFichier = Remplace(ContenuFichier, ",1" + CRLF, ",0" + CRLF)
si ça ne fonctionne pas, c'est que les lignes ne se terminent pas par CRLF (ça peut être par exemple LF) mais je ne pense pas pour votre cas.
Ce sont des caractères cachés mais ils sont bien présents et Remplace les trouve (vous pouvez les voir avec Notepad++ en activant les caractères cachés). Certaines fonctions posent problème si on ne tient pas compte des caractères cachés.

J'ai oublié de vous signaler que le remplace ne va pas suffire (pour le bouton RAZ) car effectivement il n'y a pas de CRLF en fin de fichier.
Il faut donc supprimer le dernier caractère du fichier (que ce soit un 0 ou 1 n'a pas d'importance) puis ajouter un 0 en fin de fichier pour passer la dernière case à Non cochée.

Je dois m'absenter, si vous n'y parvenez pas, je verrai ça plus tard dans l'après-midi.
Mensagem modificada, janeiro, 26 2025 - 3:09 PM
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 3:37 PM
Cédric_34 a écrit :
pour le CRLF, c'est :
ContenuFichier = Remplace(ContenuFichier, ",1" + CRLF, ",0" + CRLF)
si ça ne fonctionne pas, c'est que les lignes ne se terminent pas par CRLF (ça peut être par exemple LF) mais je ne pense pas pour votre cas.
Ce sont des caractères cachés mais ils sont bien présents et Remplace les trouve (vous pouvez les voir avec Notepad++ en activant les caractères cachés). Certaines fonctions posent problème si on ne tient pas compte des caractères cachés.

J'ai oublié de vous signaler que le remplace ne va pas suffire (pour le bouton RAZ) car effectivement il n'y a pas de CRLF en fin de fichier.
Il faut donc supprimer le dernier caractère du fichier (que ce soit un 0 ou 1 n'a pas d'importance) puis ajouter un 0 en fin de fichier pour passer la dernière case à Non cochée.

Je dois m'absenter, si vous n'y parvenez pas, je verrai ça plus tard dans l'après-midi.


Comme je le disais plus haut, le CRLF est présent mais comme caractères masqués visiblement sous Notepad++



Donc finalement, je suis de nouveau un peu perdu :(

J'ai fait un test sur la ligne "dimanche" en mettant ,1,1 et seul le dernier 1 s'est transformé et 0 :



Pour moi, ça fonctionne non ?
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 3:58 PM
Par contre, mon bouton "RAZ" ne rafraichie le table que si je reste dans l'application.

Si je coche la case, je clique sur le bouton "RAZ", la case se décoche bien et la ligne repasse à ",0" dans le fichier.

Maintenant si je quitte l'application et que je la relance, la case est toujours cochée (normal) et si je clique sur "RAZ" directement au lancement, le case reste cochée mais la ligne est bien modifiée à ",0". Pb avec la fonction "tablesupprimetout" ?

MaNouvelleChaine = TABLE_TacheHDP[TABLE_TacheHDP]

MaChaineARemplacer = Remplace(MaChaineARemplacer,TAB,",")
MaNouvelleChaine = Remplace(MaNouvelleChaine,TAB,",")

ContenuFichier est une chaîne
ContenuFichier = fChargeTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini")
ContenuFichier = Remplace(ContenuFichier, ",1" + CRLF, ",0" + CRLF)
fSauveTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini", ContenuFichier)

TableSupprimeTout(TABLE_TacheHDP)

POUR TOUTE CHAÎNE sMot DE sfichier SÉPARÉE PAR RC
nIndice = TABLE_TacheHDP.AjouteLigne(ExtraitChaîne(sMot,1,","),ExtraitChaîne(sMot,2,","),ExtraitChaîne(sMot,3,","),ExtraitChaîne(sMot,4,","),ExtraitChaîne(sMot,5,","),ExtraitChaîne(sMot,6,","),ExtraitChaîne(sMot,7,","),ExtraitChaîne(sMot,8,","))

SI hnow > ExtraitChaîne(sMot,5,",") ALORS
TABLE_TacheHDP[nIndice].COL_Fin_Planif..CouleurFond = RougePastel
FIN
TableActiveFiltre(TABLE_TacheHDP.COL_Jour, filtreCommencePar, MonRésultat)
Trace("Nous sommes :", MonRésultat,nIndice)
FIN
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 4:03 PM
Tiens, dans le post #29, j'ai des 0 qui sont apparus dans les heures du dimanche (ma ligne de test d'aujourd'hui) ;(
J'ai modifié le fichier à la main et je n'arrive plus à reproduire le souci. A surveiller !!
Mensagem modificada, janeiro, 26 2025 - 4:04 PM
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 4:37 PM
J'ai l'impression que vous êtes en train de vous perdre dans toutes ces modifications.
Laissez de coté le bouton RAZ pour le moment mais il me semble que la procédure de remplacement et le rafraichissement ne vont pas fonctionner sans recharger le fichier.

Pour votre fichier .ini, reprenez un fichier non corrompu car comme je vous le disais, votre remplace sans les CRLF a faussé le fichier.
Vous n'arrivez plus à reproduire car vous avez ajouté le CRLF dans le remplace, donc c'est normal.
Avez-vous bien recréer la colonne 8 en interrupteur direct (sans conteneur). Si oui, vos lignes ne doivent contenir qu'un seul ,0 (virgule zéro) et pas ,0,0.
A moins que vous ayez mis 1 dans la colonne Type (Post #29) ?????

Commencez par remettre tout ceci en place.
Mensagem modificada, janeiro, 26 2025 - 4:41 PM
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 5:01 PM
Oui j'ai recréé la colonne 8 avec interrupteur depuis votre post #8 :



J'ai repris une copie du fichier initiale homme_de_prod.ini où j'ai juste ajouté ",0" à la fin de chaque ligne.

Je viens de tester et tout semble bon comme tout à l'heure...
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 5:03 PM
Le fichier se modifie correctement sans ajouter de 0 ou 1 ailleurs qu'à la fin de la ligne :




Cette partie me semble validée.
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 5:12 PM
Cédric_34 a écrit :
> A moins que vous ayez mis 1 dans la colonne Type (Post #29) ?????

Oui j'avais bien mis un 1 dans la colonne Type pour faire un test et voir si ce 1 dans la colonne Typez allait être aussi impacté par mon REMPLACE.
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 5:32 PM
Ok ,
est-ce que ceci fonctionne pour le bouton RAZ :

ContenuFichier est une chaîne
ContenuFichier = fChargeTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini")
ContenuFichier = Remplace(ContenuFichier, ",1" + CRLF, ",0" + CRLF)
fSauveTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini", ContenuFichier)

TableSupprimeTout(TABLE_TacheHDP)

POUR TOUTE CHAÎNE sMot DE ContenuFichier SÉPARÉE PAR RC
nIndice est un entier = TABLE_TacheHDP.AjouteLigne(ExtraitChaîne(sMot,1,","), ExtraitChaîne(sMot,2,","), ...
ExtraitChaîne(sMot,3,","),ExtraitChaîne(sMot,4,","),ExtraitChaîne(sMot,5,","), ...
ExtraitChaîne(sMot,6,","),ExtraitChaîne(sMot,7,","),ExtraitChaîne(sMot,8,","))
FIN


Je n'ai pas de filtre, donc ça devrait tout charger dans la table avec les cases Non Cochées (sauf la dernière case pour laquelle il faut compléter le code).
Mensagem modificada, janeiro, 26 2025 - 5:34 PM
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 6:09 PM
Oui votre nouveau code fonctionne pour le bouton RAZ et comme vous le disiez, tout s'affiche après sans filtre et en effet, la dernière cas reste cochée
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 6:27 PM
Pour la dernière case, c'est normal car il n'y a pas de CRLF sur la dernière ligne donc remplace ne peut pas trouver ,1CRLF
Ceci devrait finaliser le code (traitement de la dernière case), il vous reste à remettre le code de filtrage :

ContenuFichier est une chaîne
ContenuFichier = fChargeTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini")
ContenuFichier = Remplace(ContenuFichier, ",1" + CRLF, ",0" + CRLF)
nTailleChaine est un entier = Taille(ContenuFichier) // On Récupère le nombre de caractère pour connaitre la position du dernier caractère
ContenuFichier = Remplace(ContenuFichier, nTailleChaine, 1, "0") // on remplace le dernier caractère par un zéro
fSauveTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini", ContenuFichier)

TableSupprimeTout(TABLE_TacheHDP)

POUR TOUTE CHAÎNE sMot DE ContenuFichier SÉPARÉE PAR RC
nIndice est un entier = TABLE_TacheHDP.AjouteLigne(ExtraitChaîne(sMot,1,","), ExtraitChaîne(sMot,2,","), ...
ExtraitChaîne(sMot,3,","),ExtraitChaîne(sMot,4,","),ExtraitChaîne(sMot,5,","), ...
ExtraitChaîne(sMot,6,","),ExtraitChaîne(sMot,7,","),ExtraitChaîne(sMot,8,","))
FIN


Si tout va bien, je préconise de tester pour vérifier que tout va bien (vous cochez, décochez dans tous les sens pour voir si le fichier ne comporte pas d'anomalie).

Pensez à gérer les erreurs, par exemple cliquer dans la colonne 8 alors que la table n'est pas remplie va déclencher une erreur.
Mensagem modificada, janeiro, 26 2025 - 6:33 PM
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 6:40 PM
Merci une nouvelle fois, je vais tester cela demain matin et je vous dirais.

Sacré boulot que vous avez fait et une aide si précieuse...:merci: Chapeau bas

Bonne soirée
Membro registado
192 mensagems
Publicado em janeiro, 26 2025 - 7:05 PM
Il y a un bug :

J'ai ajouté une 2eme ligne à dimanche.

Je lance l'application avec les 2 cases décochées. Je coche la 1ere. Je relance et là, tout reste OK :



Je relance l'application, je coche la 2eme (la 1ere est toujours cochée) et là, les 2 lignes prennent le même nom mais seule la 1ere reste cochée :



Je ne coche que la 1ere ligne, je relance et tout reste OK (Test_1 et case cochée)

Je ne coche QUE la ligne (ligne 1 décochée) cette fois-ci, les 2 lignes prennent le même nom et seule la 1ere ligne est cochée.

C'est le code de la colonne_8 :
MaNouvelleChaine = TABLE_TacheHDP[TABLE_TacheHDP]

MaChaineARemplacer = Remplace(MaChaineARemplacer,TAB,",")
MaNouvelleChaine = Remplace(MaNouvelleChaine,TAB,",")

ContenuFichier est une chaîne
ContenuFichier = fChargeTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini")
ContenuFichier = Remplace(ContenuFichier, MaChaineARemplacer, MaNouvelleChaine)
fSauveTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini", ContenuFichier)

sfichierDuJour est une chaîne = fRepExe + "\Archives\homme_de_prod_" + DateSys() + ".ini"
Trace("Nom du fichier :", sfichierDuJour)
fCopieFichier(sNomFichierINI,sfichierDuJour)
Mensagem modificada, janeiro, 26 2025 - 7:22 PM
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 7:46 PM
Effectivement, je soupçonne le fait que le clic récupère mal la ligne. j'analyse.
Mensagem modificada, janeiro, 26 2025 - 7:52 PM
Membro registado
792 mensagems
Publicado em janeiro, 26 2025 - 11:44 PM
J'ai réussi à reproduire le bug en cliquant rapidement sur les cases à cocher.
C'est bien ce que je pensais, la récupération de la ligne à remplacer est instable lorsqu'on clique sur la table.
Apparemment, j'ai pu stabiliser.

Changez le code dans l'évènement "Bouton Gauche (WM_LBUTTONDOWN) de TABLE_TacheHDP" par celui-ci :
MaChaineARemplacer = TABLE_TacheHDP[TableInfoXY(TABLE_TacheHDP, tiNumLigne, SourisPosX(), SourisPosY())]

Avec le code ci-dessus, le problème semble résolu.

J'ai quand même mis quelques vérifications dans le code ci-dessous.
Changez le code dans le code "A chaque modification de colonne8 (TABLE_TacheHDP)" par ceci :
MaNouvelleChaine = TABLE_TacheHDP[TABLE_TacheHDP]
Sablier(Vrai)
SI MaChaineARemplacer <> "" ET MaNouvelleChaine <> "" ALORS
MaChaineARemplacer = Remplace(MaChaineARemplacer,TAB,",")
MaNouvelleChaine = Remplace(MaNouvelleChaine,TAB,",")

ContenuFichier est une chaîne
ContenuFichier = fChargeTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini")
ContenuFichier = Remplace(ContenuFichier, MaChaineARemplacer, MaNouvelleChaine)
fSauveTexte(ComplèteRep(fRepExe) + "homme_de_prod.ini", ContenuFichier)
FIN

MaChaineARemplacer = ""
MaNouvelleChaine = ""
Sablier(Faux)


Surtout vérifiez bien que tout fonctionne correctement et tenez-moi au courant.

PS : Le bouton RAZ répond t-il bien à votre souhait car il remet à 0 tout le fichier .ini, je m'aperçois que ça ne correspond pas à votre demande du Post #21 ?

Cdlt
Mensagem modificada, janeiro, 26 2025 - 11:59 PM
Membro registado
192 mensagems
Publicado em janeiro, 27 2025 - 6:50 AM
Bonjour Cedric_34,

Je viens de tester et ça me parait top. Tous mes tests sont bons.

Le bouton "RAZ" est opérationnel aussi avec votre code et ma partie filtrage.

Que dire hormis un énorme merci car je pense qu'arrivé à 42 messages, c'est surement le post le plus énorme.

J'en connais plusieurs qui auraient lâché l'affaire et j'aurais pu comprendre. Vous avez été là jusqu'au bout et je ne sais pas comment vous remercier.

Un énorme merci le plus sincère et bonne continuation.
Mensagem modificada, janeiro, 27 2025 - 6:51 AM
Membro registado
192 mensagems
Publicado em janeiro, 27 2025 - 7:02 AM
Pourriez vous me donner votre mail perso : le mien est yann.leboulch et plus loin @ et gamil.com ? (c'est pour m'assurer que mon mail passe)
Mensagem modificada, janeiro, 27 2025 - 7:03 AM