Listing sélectif
Bonjour
Il y a un an, je n'avais aucune notion de VBA. J'avais donc développé une gestion interne de cross rien qu'avec des formules. Je dois retravailler dessus et le modifier, et je me dis qu'un peu de VBA me simplifierais la tache.
En pièce joint un début de projet.
Feuille Liste d'élèves : Il y a la liste des élèves
En feuille CRSE1, il y aura les résultats de la première course. Comme vous le voyez, il me suffit de rentrer le numéro de dossard, et le reste s'affiche. Pas de soucis majeure sur cette feuille.
PAr contre, lors d'une même courses, des élèves de niveaux différents vont courir. Par exemple les Filles de 6eme avec les Garçons de 6eme, puisque c'est le même parcours.
J'ai donc besoin de séparer les résultats ....
J'ai donc deux feuille 6F et 6M. Il me faudrait une "macro" "générale" qui extrait les données .. En effet, je vais avoir 6 ou 7 courses à extraire.
Par exemple sur la feuille 6G. La macro irait chercher sur la feuille dont le nom est en H1 (CRS1 ici) tous les élèves selon le critère H2 (6M ici) et mettre les dossards en B4 B5 B6 ect ... Tout le reste va s'afficher, rang, nom, etc ...
Quand au colonnes "recherches du rang" ne pas en tenir compte. C'est un reste de l'ancienne feuille
Qu ipeut me fournir un peu d'aide ?
Merci
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonsoir,
Ci-joint une proposition, à tester.
Quelques remarques :
Création onglet
- si l'onglet correspondant à la catégorie n'existe pas, on le crée (pour info, l'onglet 6M n'existait pas)
- la création de l'onglet se base sur un onglet "Modele" (à conserver)
- le nom de la catégorie devra être complété à la main ("6eme Filles")
Version Excel
Problème de perte lors de l'enregistrement au format xls ou xlsm. A voir ce qui disparaît ...
Rang par classe
Les classes ne comprennent pas d'espace dans les onglets "6M", "6F"
=> suppression des espaces dans la liste des élèves (sinon faire l'inverse)
Bonne soirée
Bouben
et avec la version xls
bonjour
Merci pour ces idées. Je sais que j'ai des incohérences dans mes noms de classes, car dans mon ancien fichiers j'avais besoin d'un format séparé pour faire des tests. En fait, je dois pouvoir comparer les classes, les classer, mettre des pénalités aux abandons... Etc plein de chose que j'avais paramétré.
Je m'aperçoit en ouvrant ton fichier, que je n'avais pas pensé à deux paramètres. Je vais devoir aussi faire deux macro "remise à zéro" car les colonnes dossards ne sont pas dans la même colonnes .... ou alors je vais insérer un colonne vide .. mais ce n'est pas important.
Au lieu d'avoir un bouton "ventiler" dans la couse, je prefèrerais un bouton récupérer dans les feuille 6M, 6F etc ... d'une part cela permettrais, je pense, de se passer d'un modele , et je peux ainsi récupérer les infos que je veux, dans la course que je veux ... En effet, lors d'une course, je peux faire courir les 6eme G et F .. mais dans une autre occasion, les 6G et 5F etc ... je peux aussi avoir des CM2 en meme temps .. Donc je pense qu'il est plus facile de récupérer les infos, en cliquant sur un bouton dans les feuilles 6M 6F 5M 5F etc ... que de ventiler. Si tu as le temps d'y réfléchir, ce serais cool. De mon coté, je vais creuser ce que tu as fais ...
Merci
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonjour,
Ci-joint une nouvelle version.
Principe inverse :
Bouton "Récupérer" : les résultats sont récupérés depuis chaque feuille (6M, 6F)
Le critère utilisé est la cellule H2 de la feuille (6M, 6F)
En complément, j'ai revu l'effacement (efface la colonne B)
Question subsidiaire : utilises-tu le xls ou le xlsm ?
A tester
Bouben
Bonjour
C'est cool ... je vais travailler dans ce sens. En fait, je n'utilise que la version XLS ...
Petites questions :
1) Dans :
Private Sub Recuperer(poSh As Worksheet)
Il y a la ligne : Set oShCourse = Worksheets("CRS1")
Puis je a remplacer par la ligne : Set oShCourse = Worksheets("H2")
Cela me permettrait de remplacer CRS1 par CRS2 etc selon la feuille de la course qui m'interesse ?
2) Est ce que la macro
Private Function OngletExist(psNom As String) As Boolean
Est toujours utile ? Je n'ai pas l'impression ...
3) Peux tu me donner le codage que tu utilises pour que je comprenne mieux tes macros
Par exemple, je pense que Sh est le "raccourci" de Sheet.
Mais que représente les lettres/Mots po, o, i, course
Merci
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonjour,
Mes réponses point par point
C'est cool ... je vais travailler dans ce sens. En fait, je n'utilise que la version XLS ...
OK, je fais une seule version
1) Dans :
Private Sub Recuperer(poSh As Worksheet)
Il y a la ligne : Set oShCourse = Worksheets("CRS1")
Puis je a remplacer par la ligne : Set oShCourse = Worksheets("H2")
Cela me permettrait de remplacer CRS1 par CRS2 etc selon la feuille de la course qui m'interesse ?
sCourse = poSh.Range("H1").Value
Set oShCourse = Worksheets(sCourse)
2) Est ce que la macro
Private Function OngletExist(psNom As String) As Boolean
Est toujours utile ? Je n'ai pas l'impression ...
N'était plus utilisée, mais de nouveau dans la nouvelle version ! Pour vérifier que la feuille correspondant à la course existe.
3) Peux tu me donner le codage que tu utilises pour que je comprenne mieux tes macros
Par exemple, je pense que Sh est le "raccourci" de Sheet.
Mais que représente les lettres/Mots po, o, i, course
Bien sûr ! L'utilisation de normes de développements facilite beaucoup la vie
En pièce jointe :
- une nouvelle version
- un début de doc sur le codage utilisé habituellement dans mes macros
A bientôt ...
Bouben
Merci
Je regarde tout cela demain
Bonjour
Merci beaucoup pour ton aide ... J'ai pu bien avancer dans mon fichier et l'actualiser en intégrant tes formules ...
Je suis en train de vouloir "développer" une nouvelle fonctionnalité qui permettrait de calculer le temps de course et surtout sa gestion sur une tablette tactile, donc avec un "affichage resserré).
Voila sur quoi je travaille :
Dans une feuille course, j'ai inséré une colonne devant la colonne A (bien sûr j'ai adapté la fonction de récupération dans les autres feuilles)
En A2 par exemple je clique (ou double clique) et il s'affiche l'heure (qui serait l'heure/minute/seconde de départ).
En A3 par exemple je clique (ou double clique) et il s'affiche l'heure (qui serait l'heure/minute/seconde d'arrivée).
En A4 par exemple je clique (ou double clique) et il s'affiche l'heure (qui serait l'heure/minute/seconde d'arrivée).
En A5 par exemple je clique (ou double clique) et il s'affiche l'heure (qui serait l'heure/minute/seconde d'arrivée).
Etc ...
Par contre, sur une tablette, avec des gros doigts, cela risque d’être "chaud".
Donc l'idée, c'est qu'il y aurait un bouton en A1 qui s’appellerait "Gestion temps".
En cliquant dessus, il y aurait une boite de dialogue avec 3 boutons :
*le premier permettrait de rentrer l'heure de départ (en A2)
*le deuxième permettrait de rentrer à chaque fois le temps des élèves, il passerait en A2 puis A3 , puis A4 et afficherait le temps au moment du clic
*le troisième permettrait d’arrêter.
Penses tu pouvoir m'aider pour cela ?
Merci
Merci encore pour tout.
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonsoir,
Je t'invite à mettre ton fichier, pour voir ce qu'on peut faire.
Bonne soirée
Bouben
Hello
J'ai préféré modifier ton fichier. En effet, le mien commence à prendre du volume (20 onglets) et plus de 8Mo. Mais je te l'enverrais si besoin, après avoir anonymé les listes...
Donc j'ai "simulé" un peu ce que je cherche à faire.
Dans la feuille Courses, en A1, il y aurait un bouton qui lance la macro "gestion du temps"
En cliquant dessus, il y aurait une boite de dialogue avec 3 boutons :
*le premier bouton permettrait de rentrer l'heure de départ (en C1) [Actuellement j'ai mis une heure fictive]
*le deuxième bouton permettrait de rentrer à chaque fois le temps de chaque élève, un premier clic remplis A3, un deuxième clic remplis A4, un troisième clic remplis A5 et ainsi de suite, jusqu'à ce que je clique sur le 3eme bouton qui arrêterait la saisie.
Actuellement en A3, A4, A5 j'ai mis des heures fictives.
Comme tu le vois, je rentre en H1 la longueur de la course et il calcule les vitesses en colonne D.
Quand je récupère les infos dans les feuilles 6F et 6M, il récupère dossard et vitesse ...
Merci
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonsoir,
Il y eu un post tout récent sur le même sujet, avec gestion bien faite d'un chrono
https://forum.excel-pratique.com/excel/faire-appel-a-un-objet-dans-un-module-de-classe-t69658.html.
J'ai repris la quasi-totalité du code pour un fonctionnement similaire (mais sans la gestion des dossards).
Je t'invite à jeter un oeil sur l'autre post, si ça t'intéresse, on peut éventuellement ajouter la gestion des dossards de la même façon.
Le bouton "Mise à zéro" efface aussi la colonne "A" (code générique pour effacer une colonne : à regarder et reprendre éventuellement pour les autres colonnes).
Ci-joint la nouvelle version, à tester
Bonne soirée
Bouben
Bonjour
Merci pour la transformation de la macro d'effacement, j'étais en train d'y penser.
Pour le chrono, l'idée est là. La gestion des dossards ne m’intéresse pas car les élèves perdent leur dossards, et on doit leur demander nom et prénom etc ... c'est des petits.
Par contre, j'ai remarqué que les vitesses ne se calculent pas ... Avant d'adopter le code du chrono, je vais devoir savoir pourquoi ...
Petite question. A quoi sert la ligne
Public Declare PtrSafe Function GetTickCount& Lib "kernel32" ()
Merci
Ce qui est dingue, c'est le volume de code (que je ne comprends pas), alors que je veux simplement dans une cellule l'heure/minute/seconde de la machine au moment ou je clique (en effet, je n'ai pas besoin d'une précision au 100eme ou 1000eme ..)
Bonjour
J'aime bien utiliser un code que je comprends ... J'ai donc cherché un peu à gauche et à droite, j'ai réfléchi à ce dont j'ai vraiement besoin et je suis parti sur une nouvelle piste, beaucoup moins ambitieuse. J'ai donc fait deux boutons :
*Un bouton qui affiche l'heure de départ
*Un bouton qui affiche les arrivées au fur et à mesure.
J'ai essayé d'inclure des tests mais il ne marchent pas bien (exemple, si le départ n'a pas été donné, on ne devrait pas pouvoir saisir de d'arrivée)..
J'ai un soucis. La fonction effaçage ne remets pas à zéro la variable compteur ... Je sais que c'est normal car le bouton effaçage est dans une feuille module ...
En fait, l'idéal est de pouvoir basculer tout le contenu du code de la feuille CRS1 (et CRS2 ...) dans la feuille module. Mais je m'y perds dans les variables (compteur, Départ Donné) à faire passer, à définir pour pouvoir gérer indépendamment toutes les feuilles CRS1, CRS2 .. etc ..
Merci de ton aide