| Des incomprèhension avec Timer | |
|
|
Auteur | Message |
---|
maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Des incomprèhension avec Timer Mer 30 Oct 2024 - 13:30 | |
| Bonjour Je tente de me faire un programme permettant de charger dans un fichier excel, case pas case, les noms que je dois indexer pour un bouquin. J'utilise le presse papier pour les récupérer, et un timer pour déclencher l'éventuelle CTRL C que je fais dans le texte du dit bouquin. 3 cas se présentent : - C'est du texte (nom d'une personne ou d'une ville par exemple) je l'écris dans excel et je passe à la colonne suivante - C'est un nombre, c'est donc un numèro de page et je change alors de ligne dans excel - C'est le mot Fin et je ferme alors le fichier et j'arrête. Mais j'ai des problèmes avec la sortie de mes routines... Dues au Timer ? A tout hasard je vous colle le code si vous avez deux minutes pour y regarder... En tout Elip fonctionne pile poil ! Merci et bonne journée. - Code:
-
' generation d'un fichier excel contenant les mots à indexer ' François Vanderesse ' genere_index V1.0 29/10/2024 ' il faut créer le fichier excel et modifier la ligne 36 en conséquence ' A1 contient le numéro de ligne courant B1 le dernier numèro de colonne utilisé ' Le premier no de colonne est @ 64 en ascii ' exemple A1=2 ligne 2 B1=D colonne D ' si le contenu du prese papier est un nombre, c'est qu'on change de page. ' En selectionnant le mot Fin le programme s'arrête. Mais le fichier doit être ' fermé manuellement. Pourquoi ?
init() cparti() end ' -----Variables, labels etc.------- hide 0 sub init() dim derlig$,dercol$,posex$,x$ dim lastcopy$ dim nopage$ dim x dim lu$ label surveille label lecturea1b1 label ecriturea1b1 label incnocolonne label ecrituredata end_sub ' ------------------------------------- sub cparti() clipboard_string_copy "": ' vider le presse papier avant de démarrer excel_start : ' ouverture d'excel excel_file_open 1,"D:\essai_index\essai_index_241026.xlsx" timer 99 on_timer 99,surveille end_sub ' ---------------------------------------------------------------------------- ' cette partie permet de surveiller si un "ctrl C" a eu lieu Surveille: timer_off 99 : ' désactiver le TIMER lu$ = clipboard_string_paste$ : ' Récupere le contenu du presse-papier ' est-ce un changement de page ? if numeric(lu$)=1 message "on change de page dans le livre" gosub lecturea1b1 derlig$=str$(val(derlig$)+1) dercol$="A" message derlig$+" "+dercol$ gosub ecrituredata dercol$="B" gosub ecriturea1b1 LastCopy$ = lu$ : ' Sauvegarder ce texte pour la prochaine comparaison end_if ' ------------------------------------- ' est-ce la fin de la saisie ? if lu$="Fin" message "C'est fini pour l'instant !" excel_write "A1",derlig$ : ' écriture du dernier no de ligne excel_write "B1",dercol$ : ' écriture du dernier no de colonne excel_file_close 1 excel_stop terminate end_if ' ------------------------------------- ' C'est un nom à indexer if (lu$ <> LastCopy$) and (lu$ <> "") : ' Y a-t-il du nouveau ? gosub lecturea1b1 : ' récup deniere ligne et derniere colonne gosub incnocolonne : ' increment no colonne gosub ecrituredata gosub ecriturea1b1 : ' Misa à jour deniere ligne et derniere colonne LastCopy$ = lu$ : ' Sauvegarder ce texte pour la prochaine comparaison end_if ' ------------------------------------ clipboard_string_copy "" : ' vider le presse papier timer_on 99 : ' Réactiver le TIMER return
' ------------------------------------- 'lecture A1B1 lecturea1b1: derlig$=excel_read$ ("A1") :' récupération no derniere ligne dercol$=excel_read$ ("B1") :' récupération no derniere colonne return
' ------------------------------------- 'increment no colonne incnocolonne: x=asc(dercol$)
x=x+1 dercol$=chr$(x)
return
' ------------------------------------- 'ecriture A1B1 ecriturea1b1: posex$="A1" excel_write posex$,derlig$ : ' écriture du dernier no de ligne posex$="B1" excel_write posex$,dercol$ : ' écriture du dernier no de colonne return
' ------------------------------------- 'ecriture d'une donnée ecrituredata: x$=dercol$+derlig$
posex$=x$ excel_write posex$,lu$ return | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des incomprèhension avec Timer Mer 30 Oct 2024 - 14:35 | |
| Deux petites remarques, pour le principe: 1. la ligne 17 n(est jamais exécutée 2. un texte placé dans le presse-papier pendant le traitement d'un autre texte (plus précisément entre timer_off (ligne 46) et timer_on (ligne 92) est perdu
Ce ne sont pas des erreurs, c'est juste un constat du fonctionnement de ton code.
Pour ma part, à la lecture du code je ne vois pas d'anomalie flagrante. Le code est structuré correctement.
Maintenant tu dis avoir ds problèmes avec "la sortie de tes routines". Là, il faudrait en dire un peu plus. | |
|
| |
maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Re: Des incomprèhension avec Timer Mer 30 Oct 2024 - 15:21 | |
| Merci Klaus pour ton regard d'expert.
Le problème que je rencontre c'est quand je veux changer de page. (le presse paier a alors un nombre correspondant à la future page à traiter)
Le changement de ligne se fait bien, mais le prog continue alors que j'aimerais qu'il se remette en attente du copié suivant. C'est comme si le return ne se faisait pas...
Je ne sais pas si je me fais bien comprendre... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des incomprèhension avec Timer Mer 30 Oct 2024 - 16:50 | |
| Alors, je comprends mieux. Et si tu fsisais comme ceci: - Code:
-
' est-ce un changement de page ? if numeric(lu$)=1 message "on change de page dans le livre" gosub lecturea1b1 derlig$=str$(val(derlig$)+1) dercol$="A" message derlig$+" "+dercol$ gosub ecrituredata dercol$="B" gosub ecriturea1b1 LastCopy$ = lu$ : ' Sauvegarder ce texte pour la prochaine comparaison timer_on 99 : ' <=============== return : ' <=============== end_if
| |
|
| |
maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Re: Des incomprèhension avec Timer Mer 30 Oct 2024 - 17:16 | |
| Merci.
Là ça marche comme il faut.
Effectivement le hide 0 en ligne 17 était mal placé...
Par contre je ne comprends pas pourquoi après un "excel_file_close" la sauvegarde du fichier n'est pas faite d'office... Mais c'est peut-être un problème à voir avec Jack ou un choix laissé à l'utilisateur ? | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des incomprèhension avec Timer Mer 30 Oct 2024 - 17:27 | |
| Il vaut mieur laisser Excel ouvert e ne le fermer qu'à la fin réelle du programme. Même s'il est fermé par la croix rouge. Comme ceci: - Code:
-
' generation d'un fichier excel contenant les mots à indexer ' François Vanderesse ' genere_index V1.0 29/10/2024 ' il faut créer le fichier excel et modifier la ligne 36 en conséquence ' A1 contient le numéro de ligne courant B1 le dernier numèro de colonne utilisé ' Le premier no de colonne est @ 64 en ascii ' exemple A1=2 ligne 2 B1=D colonne D ' si le contenu du prese papier est un nombre, c'est qu'on change de page. ' En selectionnant le mot Fin le programme s'arrête. Mais le fichier doit être ' fermé manuellement. Pourquoi ?
init() cparti() end ' -----Variables, labels etc.------- hide 0 label close0 : ' <=========== on_close 0,close0 : ' <=========== sub init() dim derlig$,dercol$,posex$,x$ dim lastcopy$ dim nopage$ dim x dim lu$, ExcelOpen% label surveille label lecturea1b1 label ecriturea1b1 label incnocolonne label ecrituredata end_sub ' ------------------------------------- close0: : ' <============ exécuter ceci lors de la fermeture de la form 0 if ExcelOpen%=1 excel_file_close 1 excel_stop end_if retuen ' ------------------------------------- sub cparti() clipboard_string_copy "": ' vider le presse papier avant de démarrer excel_start : ' ouverture d'excel excel_file_open 1,"D:\essai_index\essai_index_241026.xlsx" ExcelOpen% = 1 : ' <============== timer 99 on_timer 99,surveille end_sub ' ---------------------------------------------------------------------------- ' cette partie permet de surveiller si un "ctrl C" a eu lieu Surveille: timer_off 99 : ' désactiver le TIMER lu$ = clipboard_string_paste$ : ' Récupere le contenu du presse-papier ' est-ce un changement de page ? if numeric(lu$)=1 message "on change de page dans le livre" gosub lecturea1b1 derlig$=str$(val(derlig$)+1) dercol$="A" message derlig$+" "+dercol$ gosub ecrituredata dercol$="B" gosub ecriturea1b1 LastCopy$ = lu$ : ' Sauvegarder ce texte pour la prochaine comparaison timer_on 99 : ' <=============== return : ' <=============== end_if ' ------------------------------------- ' est-ce la fin de la saisie ? if lu$="Fin" message "C'est fini pour l'instant !" excel_write "A1",derlig$ : ' écriture du dernier no de ligne excel_write "B1",dercol$ : ' écriture du dernier no de colonne ' ********** excel_file_close 1 <== par ici ! terminate end_if ' ------------------------------------- ' C'est un nom à indexer if (lu$ <> LastCopy$) and (lu$ <> "") : ' Y a-t-il du nouveau ? gosub lecturea1b1 : ' récup deniere ligne et derniere colonne gosub incnocolonne : ' increment no colonne gosub ecrituredata gosub ecriturea1b1 : ' Misa à jour deniere ligne et derniere colonne LastCopy$ = lu$ : ' Sauvegarder ce texte pour la prochaine comparaison end_if ' ------------------------------------ clipboard_string_copy "" : ' vider le presse papier timer_on 99 : ' Réactiver le TIMER return
' ------------------------------------- 'lecture A1B1 lecturea1b1: derlig$=excel_read$ ("A1") :' récupération no derniere ligne dercol$=excel_read$ ("B1") :' récupération no derniere colonne return
' ------------------------------------- 'increment no colonne incnocolonne: x=asc(dercol$)
x=x+1 dercol$=chr$(x)
return
' ------------------------------------- 'ecriture A1B1 ecriturea1b1: posex$="A1" excel_write posex$,derlig$ : ' écriture du dernier no de ligne posex$="B1" excel_write posex$,dercol$ : ' écriture du dernier no de colonne return
' ------------------------------------- 'ecriture d'une donnée ecrituredata: x$=dercol$+derlig$
posex$=x$ excel_write posex$,lu$ return | |
|
| |
maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Re: Des incomprèhension avec Timer Mer 30 Oct 2024 - 17:29 | |
| 2. un texte placé dans le presse-papier pendant le traitement d'un autre texte (plus précisément entre timer_off (ligne 46) et timer_on (ligne 92) est perdu
Là je n'ai pas compris ce que tu voulais me dire... Question de béotien. sans doute. .. Mais voilà bien longtemps que je n'avais sorti une ligne de programme. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des incomprèhension avec Timer Mer 30 Oct 2024 - 17:36 | |
| - Citation :
- Là je n'ai pas compris ce que tu voulais me dire...
Eh bien, regarde ton code: - Code:
-
LastCopy$ = lu$ : ' Sauvegarder ce texte pour la prochaine comparaison end_if ' ------------------------------------ clipboard_string_copy "" : ' vider le presse papier timer_on 99 : ' Réactiver le TIMER return
Avant de réactiver le timer, tu vides explicitement le presse-papier ! Et donc, tout ce qui est arrivé entretemps, est perdu. Pour éviter cela, tu pourrais vider le presse-papier immédiatement après avoir récupéré son contenu. Ainsi, tu auras plus de chances de récupérer un contenu arrivé entretemps. Bien spur, su deux ou plusieurs termes sont arrivées entretemps... enfin, tu sois le principe ! | |
|
| |
maelilou
Nombre de messages : 180 Age : 76 Localisation : Ardennes françaises Date d'inscription : 02/05/2012
| Sujet: Re: Des incomprèhension avec Timer Mer 30 Oct 2024 - 17:45 | |
| Merci Klaus Je vais regarder cela demain et pour ce soir prendre une aspirine C'est dur de se remettre à la tâche... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Des incomprèhension avec Timer Mer 30 Oct 2024 - 18:26 | |
| Rassure-oit - ton retour augure de bonnes choses !
Tu as bien compris: - le principe de la progfammation par évènements -l'utilisation du timer - et surtout la désactivation du timer pendant le traitement d'un évènement - la structuration du prgramme à l'aide des SUB
Tu as clairement des bases solides et je m'attends à des choses intéressantes de ta part ! | |
|
| |
Contenu sponsorisé
| Sujet: Re: Des incomprèhension avec Timer | |
| |
|
| |
| Des incomprèhension avec Timer | |
|