XL 2016 Modification fichier Excel pour chrono kart avec cellule IR

mada16

XLDnaute Nouveau
Bonjour à tous,

je reviens sur le forum après quelques années pour essayer de modifier le fichier que j'avais obtenu grâce à l'aide de plusieurs membres, dont notamment "dranreb" qui m'avait été d'un très grand secours (et les mots sont faibles...).
Je tiens à noter que je n'ai absolument pas progressé depuis...
Pour résumer, j'ai un fichier Excel avec du VBA qui me sert à chronométrer des karts lors d'une course de côte. Il y a un fichier sur le départ qui enregistre les horaires de passages de chaque kart par appui sur touche clavier, un autre à l'arrivée pour la même chose, et à la fin de la course, on fait un copier/coller de l'un vers l'autre pour obtenir les temps de montée. Système simple, mais qui nécessite deux ordis, dont la synchronisation des horloges n'est pas toujours précise donc les temps sont légèrement faussés.
Depuis l'an passé on a changé de système, et on a opté pour un chrono électronique à base de cellule IR, le pupitre de contrôle est à l'arrivée, il y a un câble entre départ et arrivée pour transmettre le contact de la cellule départ. On note manuellement chaque chrono, à la fin on fait un tri pour le classement. C'est plus précis (top passage sur cellule IR), plus juste (pas de possibilité de retarder ou avancer un top par un juge corrompu...)mais plus fastidieux (recopie des temps).
Cette année, nous aimerions "lier" les deux systèmes, c'est à dire faire entrer le signal des cellules dans le fichier Excel. Cela est possible grâce à une interface Arduino qui est capable de transformer le contact "tout ou rien" des cellules en appui sur touche clavier.
Il me reste juste à changer un peu le fichier et le code, et c'est là où je deviens nul. J'ai bien compris quelques bases du VBA, mais loin de moi l'idée de réussir à comprendre ou améliorer un code.
J'en appelle donc aux vrais pros, pour qui le VBA n'a plus de secret, et qui sauront certainement résoudre ce problème en moins de temps qu'il ne m'a fallu pour écrire ce post.
A partir du fichier existant, je souhaiterais donc n'utiliser qu'une seule feuille de calcul. La préparation du fichier (remplissage des cellules N° kart, Nom, Club, Cat) se ferait en amont.
A l'ouverture du fichier, il n'y a plus qu'à sélectionner le N° de kart présent sur la ligne de départ par un click sur sa cellule : à ce moment là, le userform (horaire qui défile) apparaît juste à coté de la cellule où sera inscrit l'horaire. C'est comme ça actuellement.
Au moment ou le kart franchit la ligne de départ (passage devant cellule IR) il y aura transmission par l'arduino d'un appui sur une touche prédéfini du clavier (barre espace par exemple)
C'est cet appui qu'il faut "préciser" dans le code, car actuellement c'est un appui sur n'importe quelle touche ou un click sur le bouton vert du userform.
Au moment de cet appui, l'horaire dans le userform se fige et s'inscrit dans la cellule de la colonne départ du kart concerné. Le bouton passe rouge. C'est comme ça actuellement.
Le bouton rouge du userform ne repasse au vert que quand on aura sélectionné un autre kart...C'est comme ça actuellement...et c'est là que ça se complique!!!
Si on sélectionne un autre kart qui n'est pas encore parti, donc sans horaire dans sa cellule départ, pas de soucis, on retrouve le userform à coté de la cellule. C'est le cas où le kart précédent n'est pas encore arrivé, mais que le suivant est en train de partir.
Par contre, si on sélectionne un kart déjà parti, avec un horaire dans la cellule départ, il faudrait que le userform aille se placer à coté de la cellule arrivée, car c'est là qu'on veut que l'horaire s'inscrive. C'est le cas où le kart va passer devant la cellule arrivée, et on a besoin d'inscrire son horaire de passage. Il faudrait d'ailleurs que ça se fasse par un appui sur une autre touche clavier (enter par exemple). Actuellement, si on sélectionne un kart déjà parti et qu'on appui sur une touche clavier, il y a un nouvel horaire qui s'inscrit dans sa cellule départ...et ça annule donc son chronométrage!!!
Voila, je pense avoir décrit le système clairement, mais ce qui est clair pour moi, ne l'est pas forcément pour les autres. Donc n'hésitez pas à me demander des précisions s'il y a quelque chose qui vous semble confus.
Ci-joint le fichier actuel
Merci d'avance de votre aide
Mada16
 

Fichiers joints

mada16

XLDnaute Nouveau
Whaouhhh!!!!!
Ca c'est de l’efficacité doublée de rapidité!!!
Il y a juste une chose qui me chagrine, je ne peux plus sélectionner le kart par un click sur son N° mais uniquement par le userform selection kart. C'est quelque chose dont on ne se servait jamais avant. C'était plus simple de sélectionner une cellule.
Car maintenant que seul un chronométreur va devoir gérer les départs et arrivées, il se peut qu'il y ait un kart qui soit en train d'arrivée et un autre sur la ligne de départ. A ce moment, il faut que le chronométreur soit capable de jongler rapidement entre les deux, et la sélection par la cellule me semble plus facile et plus rapide.
D'autant qu'il y a dans le fonctionnement avec le userform selection des choses bizarre :
si je prends l'horaire départ d'un kart puis juste après son horaire arrivée : pas de soucis ça passe du vert au rouge comme il faut.
Par contre si je prends deux (ou plus) horaires de départ à la suite (exemple du deuxième kart qui monte alors que le premier est pas arrivée) et qu'ensuite je prends l'horaire d'arrivée, le bouton ne passe pas au rouge et l'horaire continue de défiler, donc possibilité d'ecraser l'horaire par un autre appui.
En plus le userform selection apparaît et disparaît selon une logique que je n'arrive pas à saisir...
 

Dranreb

XLDnaute Barbatruc
Mais je croyais que vous ne vouliez plus du tout sélectionner le kart dans la feuille, à cause de votre histoire de commande à distance ou je ne sais quoi …
On peut cependant faire pareil dans une Worksheet_Change.
Mais il y a des anomalies dans l'UFmChrono. Il faut que je le repense un peu.
En tout cas vous voyez qu'il faut le piloter de l'extérieur.
 

Dranreb

XLDnaute Barbatruc
Je n'arrive pas à situer pourquoi le chrono ne s'arrête pas.
En déroulant en pas à pas il s'arrête mais sinon pas.
Est-ce que je pourrais ajouter deux modules de service dont un de classe pour rafraîchir différemment l'affichage du temps ?
En fait ça ressemblerait plus à ce qui est fait pour l'UFmHorloge de ce classeur.
Voir démo dans la feuille "Autre solution chrono"
Attention pour moi le bouton est vert pour démarrer le chrono et rouge pour l'arrêter.
Ça me semble plus logique par rapport aux commandes de machines …
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Voila récrit comme ça je trouve qu'on le maitrise un peu mieux. Si toutefois il tourne chez vous.
Après, effectivement si vous voulez pouvoir sélectionner des lignes dans le tableau, il vaudrait mieux mettre toute la programmation dans le module de la feuille.
Vraiment pas beau votre tableau… vous ne voudriez pas que je vous en définisse un plus joli ?
 

Fichiers joints

mada16

XLDnaute Nouveau
Mais je croyais que vous ne vouliez plus du tout sélectionner le kart dans la feuille, à cause de votre histoire de commande à distance ou je ne sais quoi …
J'ai beau chercher, je ne retrouve pas où j'ai pu dire cela. Le seul moment où j'ai évoqué un problème avec la sélection dans la feuille, c'est en MP quand je cherchais un moyen d'introduire dans le code une condition IF pour dire au UFM chrono d'aller se positionner à coté de la cellule arrivée si la cellule départ était déjà remplie...

Est-ce que je pourrais ajouter deux modules de service dont un de classe pour rafraîchir différemment l'affichage du temps ?
Pas de souci...

Attention pour moi le bouton est vert pour démarrer le chrono et rouge pour l'arrêter.
Ça me semble plus logique par rapport aux commandes de machines …
On en avait déjà discuté lors de l'ellaboration initiale du fichier, j'ai une logique inverse, mais après utilisation, peu importe car ce que l'on voit le plus c'est l'horaire qui défile ou qui est figé...

Voila récrit comme ça je trouve qu'on le maitrise un peu mieux. Si toutefois il tourne chez vous.
En effet, ça tourne mieux!!!

Après, effectivement si vous voulez pouvoir sélectionner des lignes dans le tableau, il vaudrait mieux mettre toute la programmation dans le module de la feuille.
Si je peux avoir les deux versions, je pourrais ensuite dire celle qui nous convient le mieux.
Par contre si c'est trop de boulot, on laisse comme ça avec juste une petite modif sur le userform sélection : Quand je clique sur OK après avoir sélectionné un N° de kart au départ, le userform disparaît. Il faut que je clique sur le bouton "choix N° kart" pour le faire re-apparaître. Alors que quand je fais inscrire un horaire arrivée, il re-apparaît automatiquement avec le champ N° prêt à être rempli.
Il faudrait qu'il re-apparaisse automatiquement avec le champ N° prêt à être rempli à chaque fois qu'on fait un appui clavier pour inscrire un horaire, que ce soit en départ ou en arrivée.

Vraiment pas beau votre tableau… vous ne voudriez pas que je vous en définisse un plus joli ?
Je crois que c'est votre modèle d'origine ;);), je n'y ai changé qu'un tout petit peu de mise en forme...Mais je suis ouvert à toute proposition....décente bien sûr:):)
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je parlais de la couleur des bouton marche/arrêt dans le Progression.xlsm, pour que vous ne soyez pas surpris si jamais vous l'examiniez.
Alors pour l'instant l'UFmSélection disparaît quand l'UFmChrono est affiché, mais il réapparaît une fois le temps saisi, s'il s'était lui même masqué pour assurer que la fenêtre active devienne celle de l'UFmChrono. Et c'est d'ailleurs exprès pour qu'il redevienne assurément la fenêtre active qu'il est réaffiché, par une Sub UFmChr_Done du module de la feuille en fait.
Alors le voici dans son dernier état.
 

Fichiers joints

mada16

XLDnaute Nouveau
C'est parfait :):) et en plus j'aime bien les nouvelles couleurs!!! Que du bonheur.

Une dernière chose, est ce qu'on faire décaler automatiquement l'ufm chrono vers la cellule arrivée dés qu'on a fait inscrire un horaire dans la cellule départ.
Actuellement on est obligé, soit de sélectionner un autre kart puis revenir sur la kart initial(ou cliquer en dehors du tableau histoire de désélectionner la cellule) , soit de passer par le userform sélection pour amener le ufm chrono au niveau de la cellule arrivée du kart en cours de montée.
Cela nous laisserait le choix, soit d'inscrire directement un horaire sur la cellule arrivée du kart qui vient de partir (cas d'un seul kart en montée) soit de sélectionner un autre kart pour le départ (cas de deux kart en montée).
 

Dranreb

XLDnaute Barbatruc
Oui c'est possible, il doit y avoir deux instructions qui le faisaient mais que j'ai mis en commentaires dans la Sub UFmChr_Done de la feuille parce qu'il mavait semblé que ça compliquait inutilement parce que vous saisissier les départ indépendamment des arrivées. En les remettant fonctionnelle je ne garantit toutefois plus que l'histoire du réaffichage ou non de l'UFmSélection soit satisfaisant, ou pire, que l'UFmChrono soit actif, de sorte que le télétpilotage d'une touche Entrée lui fasse inscrire l'heure. Là au moins comme c'est, c'est simple, c'est pareil pour les deux colonnes … On pourrait à la rigueur aussi sélectionner systématiquement la A1 après avoir sélectionné un numéro de kart dans la feuille. Actuellement seul l'UFnSélection le fait à son activation pour garantir que le choix va entainer l'exécution de la Worksheet_SelectionChange. On ne peut jamais avoir simultanément tous les avantages sans aucun inconvénient, c'est planifié comme ça par un hasard suprême sans doute. Mais si vous par contre, vous vous sentez aimé d'un dieu, vous pouvez toujours essayer des trucs …
 
Dernière édition:

mada16

XLDnaute Nouveau
Oui c'est possible, il doit y avoir deux instructions qui le faisaient mais que j'ai mis en commentaires dans la Sub UFmChr_Done de la feuille parce qu'il mavait semblé que ça compliquait inutilement parce que vous saisissier les départ indépendamment des arrivées.
Ok ça j'ai trouvé facilement, j'ai fait la modif et ça marche

En les remettant fonctionnelle je ne garantit toutefois plus que l'histoire du réaffichage ou non de l'UFmSélection soit satisfaisant
en effet, ça fonctionne pas pareil, mais je vais voir à l'utilisation...

On pourrait à la rigueur aussi sélectionner systématiquement la A1 après avoir sélectionné un numéro de kart dans la feuille. Actuellement seul l'UFnSélection le fait à son activation pour garantir que le choix va entainer l'exécution de la Worksheet_SelectionChange.
Ca , j'ai eu un peu plus de mal à trouver, mais je crois j'y suis parvenu. J'ai mis la commande ActiveSheet.Cells(1, "A").Select dans l'ufm chrono au niveau de la commande keydown, et ça a l'air de fonctionner.

Je vais voir à l'utilisation, mais il me semble que la version sans le déplacement automatique, mais avec un retour systématique sur la cellule A1 après l'enregistrement de l'horaire soit la meilleure solution.

Mais si vous par contre, vous vous sentez aimé d'un dieu, vous pouvez toujours essayer des trucs …
Et ça fait bien longtemps que je ne pratique plus la religion, par contre j'essaie des trucs....

En tous cas, encore une fois, un immense merci pour toute cette contribution, et une immense reconnaissance pour toute cette patience...
 

Dranreb

XLDnaute Barbatruc
Ne mettez pas la sélection de la A1 dans l'UFmChrono, ce n'est pas de sa faute quand même !
Mettez la avant de lui désigner sa cible, puisqu'à ce moment on a cette CelHDép ou CelHArr déduite de Target. Ou même après l'avoir lancé d'ailleurs. Pour la bonne forme mettez Application.EnableEvents = False devant et = True derrière. D'ailleurs je vois que sans cela ça reclasse la liste sur les N° kart ! Dangereux de classer la liste pendant que l'UFmChrono travaille: ça peut aboutir à ce que la cellule cible ne soit plus là où on le lui a indiqué !
 
Dernière édition:

mada16

XLDnaute Nouveau
Donc pour éviter un classement de la liste de kart, le mieux ne serait il pas de désigner une cellule en dehors du tableau, du style h10 ou j25...
Ca permet de désélectionner la cellule initiale et donc de pouvoir la re-sélectionner pour faire déplacer l'ufmchrono vers la cellule arrivée.
 

Dranreb

XLDnaute Barbatruc
Si vous mettez Application.EnableEvents = False devant et Application.EnableEvents = True derrière, il n'y a pas de problème: la Sub Worksheet_SelectionChange ne provoquera plus sa propre réinvocation par Excel. Par contre il faut aussi, et là c'est moi qui l'ai oublié, le faire dans la Sub UserForm_Activate de l'UFmSélection pour qu'Excel n'exécute pas non plus cette même Worksheet_SelectionChange de la feuille.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
À moins de supprimer purement et simplement l'instruction ActiveSheet.Cells(1, "A").Select de la UserForm_Activate de l'UFmSélection. Après tout, elle devient inutile puisque une cellule de la colonne "N° kart" ne pourra plus jamais rester sélectionnée, vu que la Worksheet_SelectionChange réagira toujours en sélectionnant aussitôt la A1.
 

mada16

XLDnaute Nouveau
OK, super!!!
Je vais essayer chaque solution pour voir celle qui a le plus d'avantage et le moins d'inconvénient,
Comme ça, je n'aurai pas besoin de faire appel aux divinités de l'informatique... ;) ;)
 

Dranreb

XLDnaute Barbatruc
Bonjour.
J'ai distingué jusqu’à présent le cas où la sélection était manuelle de celle où elle était effectuée depuis l'UFmSélection en ce qui concerne le réaffichage de ce dernier. Mais si vous préfériez qu'il soit toujours réaffiché ce serait possible.
J'ai une version où il a 2 boutons, le second, réagissant aussi à la touche Echap, efface la TextBox et y met le focus. l'UFmChrono aussi réagit spécifiquement à la touche Echap en omettant d'inscrire quoi que ce soit. Dans cette version la saisie du départ ne débouche pas d'office sur celle de l'arrivée, on passe par l'UFmSélection. La nouveauté c'est que le numéro de kart reste affiché. Alors soit on fait simplement Entrée pour la démarrer, soit Echap pour en saisir un autre.
 

Dranreb

XLDnaute Barbatruc
J'ai finalement coupé la poire en deux: le réaffichage de l'UFmSélection ne dépend plus de la manière dont la ligne a été sélectionnée, mais elle n'est pas non plus systématique. Elle est activée lors de l'affichage par le bouton "Choix N° kart", elle est désactivée par sa croix de fermeture. Rappel: la touche Echap est maintenant supportée par les 2 UserForm. Mais pour une raison que j'ignore elle peut ne pas marcher du 1er coup. Plusieur pressions doivent aboutir à une TBxN°kart vide ayant le focus.
 

Fichiers joints

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas