Décomposer un score de Golf 18 trous

Bonjour à tous,

A la fin d'une compétition de Golf, il est important de pouvoir encoder les scores de manière très rapide. Les programmes de golf officiels, utilisent une chaine de chiffres accolés les uns aux autres et sont séparés par la suite dans les cases correspondantes aux trous joués. Cela se complique un peu quand le score de certains trous sont à 2 digits. Dans ce cas, il faut faire précéder ce score à 2 digits du signe "+".

Je voudrais pouvoir réaliser cela dans un fichier Excel également afin d'automatiser une série d'autres formules de jeu de golf moins conventionnels et qui ne sont pas réalisables dans ces logiciels officiels. Il faut également que le programme vérifie bien que les 18 scores ont été encodés ( pas 17 ni 19, du à une faute de frappe)

Pouvez vous m'aider ?? je n'y arrive vraiment pas, surtout pour les scores unitaires à 2 digits.

Exemple:

"345+1169455+104786+13548" dans une seule cellule sera décomposé en 18 cellules jointives comme suit:

3 4 5 11 6 9 4 5 5 10 4 7 8 6 13 5 4 8

Si quelqu'un peut trouver solution à ce problème, je lui en serais réellement grandement reconnaissant.

Bonjour,

si le texte en en cellule A1,

mettre la formule suivante en cellule B1 et recopier à droite,

=STXT(SUBSTITUE($A$1;"+";"");COLONNE()-1;1)

Bonjour,

si le texte en en cellule A1,

mettre la formule suivante en cellule B1 et recopier à droite,

=STXT(SUBSTITUE($A$1;"+";"");COLONNE()-1;1)

La formule décompose bien la suite de chiffre mais ne tient pas compte des "+" qui devraient assembler les 2 digits qui suivent.

Dans l'exemple j'ai donc 21 cases qui se remplissent à la place des 18.

Bonjour,

ok, je n'avais pas bien compris,

à tester,

Sub Décompose(()
Set cellule = Range("A1")
For i = 1 To Len(cellule)
 If Mid(cellule, i, 1) <> "+" Then
   Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column + 1) = Mid(cellule, i, 1)
 Else
   Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column + 1) = Mid(cellule, i + 1, 2)
   i = i + 2
 End If
Next
End Sub

il y a aussi la possibilité d'exécuter la macro pour plusieurs données

Bonjour dumiche,

je te retourne ton fichier modifié :

30exo-dumiche.xlsm (15.27 Ko)

Ctrl e ➯ travail effectué !


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.


Bonjour Isabelle,

t'as pris des vacances prolongées, on dirait, hein ?

tu t'es bien amusée, au moins ?

dhany

coucou dhany, oui je me suis bien reposé

j'suis bien content qu'tu sois revenue !

dhany

Bonjour dumiche,

je te retourne ton fichier modifié :

Exo dumiche.xlsm

Ctrl e ➯ travail effectué !


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.


Bonjour Isabelle,

t'as pris des vacances prolongées, on dirait, hein ?

tu t'es bien amusée, au moins ?

dhany

Bonjour dhany,

Merci déjà car cela fonctionne bien, mais je n'arrive pas à transposer

Je dois te dire que je ne suis pas très à l'aise avec les macros mais surtout leur utilisation dans le type de fichier que j'essaie de mettre en œuvre. Je te livre un des fichiers de calcul (en annexe) que j'ai réalisé pour un type de compétition. Tous les autres fichiers doivent utiliser cette même décomposition d'encodage.

Tu peux trouver mon encodage dans le sheet "score cards" dans les cellules H4 et I4. Ces cellules changent de couleur quand le nombre de digit est correct (9).

Je voudrais donc:

+ encoder 18 scores à la fois et non 2 x 9 et avoir un indicateur de remplissage correct (18 entrées)

+ pouvoir utiliser des scores à 2 digits (quand ils sont précédés du signe +)

+ tout comme dans mon fichier, que les scores individuels soient directement distribués dès que le nombre complet a été introduit sans devoir activer manuellement une macro

+ utiliser le signe "/" pour que la cellule correspondante reste vide

exemple complet repris:

"345+116/455+104786+135/8" dans une seule cellule sera décomposé en 18 cellules jointives comme suit:

3 4 5 11 6 _ 4 5 5 10 4 7 8 6 13 5 _ 8

Certains fichiers peuvent devoir encoder jusqu'à 200 résultats à distribuer de la sorte. Cela doit donc être assez facilement transposable.

Et là, je suis vraiment bloqué !

(pour moi, les macros se limitent au recording d'action simples) !

Si tu peux donc m'aider pour cela.... ce serait extraordinaire car toutes les compet de golf FUN, ont besoin de ce type d'encodage.

Est ce que toute cette procédure est réellement réalisable dans Excel ???

Merci en tous cas de ton aide déjà précieuse.

Ac

Bonjour dumiche,

j'ai regardé la feuille "Score Cards" de ton nouveau fichier ; je pense que ta demande est possible, mais pour moi, c'est à la fois compliqué, long à faire, et fastidieux ! j'espère donc qu'un autre intervenant pourra t'aider, et te souhaite bonne chance !

dhany

Bonjour dumiche,

j'ai regardé la feuille "Score Cards" de ton nouveau fichier ; je pense que ta demande est possible, mais pour moi, c'est à la fois compliqué, long à faire, et fastidieux ! j'espère donc qu'un autre intervenant pourra t'aider, et te souhaite bonne chance !

dhany

L'ensemble du fichier est effectivement assez compliqué mais la quasi totalité des calculs est résolue. Il n'y a vraiment que la partie distribution du score à répartir sur les 18 cases, qui reste à résoudre pour faciliter l'encodage de la même manière que le font les applications nationales.

Mais je te remercie déjà pour ta formule. Je vais essayer de l'exploiter en étudiant un peu mieux les différentes possibilités des macros pour pouvoir l'intégrer dans mon sheet.

Grand merci à toi déjà pour ce travail et la rapidité de tes réponses.

Si quelqu'un d'autre à une idée .... il est le bienvenu

Bonjour,

un essai.

Le contrôle se fait à la validation de la saisie.

Il faut avoir "Hits" 1 ou 2 cellules à gauche pour que le contrôle plus affiné se fasse.

Si 9 scores corrects (uniquement chiffres et + acceptés) détectés ils s'inscrivent, sinon on vide les 9 cellules et : MsgBox "Hits non conformes"

Là j'ai fait pour ta feuille (2x9 trous). On peut envisager qu'il puisse également valider une chaine de 18 trous.

eric

Bonjour,

un essai.

Le contrôle se fait à la validation de la saisie.

Il faut avoir "Hits" 1 ou 2 cellules à gauche pour que le contrôle plus affiné se fasse.

Si 9 scores corrects (uniquement chiffres et + acceptés) détectés ils s'inscrivent, sinon on vide les 9 cellules et : MsgBox "Hits non conformes"

Là j'ai fait pour ta feuille (2x9 trous). On peut envisager qu'il puisse également valider une chaine de 18 trous.

eric

Merci déjà éric

L'objectif est effectivement de valider la saisie du résultat (18 entrées dans la chaine) mais surtout dans un premier temps de décomposer la chaine des 18 scores unitaires (à 1 ou 2 digits) rentrés dans une seule cellule, vers 18 cellules distinctes et juxtaposée à droite de la saisie. Cette chaine est composée de caractères numériques avec possibilité d'un "+" afin de signaler un score à 2 digits qui suit le signe, et un "/" qui lui laissera la cellule correspondante vide. Vraiment pas facile je pense dans excel

ok. Mais tout ça ne me dit pas ce que tu penses de ma proposition.

Et si tu voulais pour une chaine de 18 trous, pourquoi mettre un fichier avec 2x9 trous ?

Et met plutôt un fichier avec les différents cas rencontrés. Un avec 36 fois le même cas ne sert pas à grand chose.

Le "0" est-il un chiffre à refuser pour valider la saisie ou peut-il arriver ?

Quant au "/" ce n'était pas dans la question initiale, donc pas vu.

ok. Mais tout ça ne me dit pas ce que tu penses de ma proposition.

Et si tu voulais pour une chaine de 18 trous, pourquoi mettre un fichier avec 2x9 trous ?

Et met plutôt un fichier avec les différents cas rencontrés. Un avec 36 fois le même cas ne sert pas à grand chose.

Le "0" est-il un chiffre à refuser pour valider la saisie ou peut-il arriver ?

Quant au "/" ce n'était pas dans la question initiale, donc pas vu.

Pour être très franc, je n'ai pas su faire fonctionner ton essai mais je suis persuadé que c'est parce que j'ai mal expliqué ma demande.

Voici donc un fichier nettement plus simplifié pour la saisie-décomposition, complètement nettoyé de l'ensemble des autres calculs de la compétition

Le but est donc de remplir la chaine de caractère de la colonne "saisie". Dès que cette chaine est suivie de "enter", l'ensemble de la chaine doit se décomposer automatiquement dans les 18 cases à droite de la saisie de la manière indiquée.

Un contrôle de validité de la saisie doit comme dans l'exemple colorer la saisie en vert si OK ou autre couleur si il y a eu une erreur tel que dans l'exemple.

Voilà, j'espère que mon explication est plus claire. Ces saisies peuvent atteindre pour certaines compétitions plus de 200, raison de la demande d'automatisation.

Merci pour ton aide.

Bonjour,

Pour être très franc, je n'ai pas su faire fonctionner ton essai

Il suffisait de faire une saisie, mais encore faut-il que tu aies accepté les macros.

Comme dans ton nouveau fichier il n'y a plus de cellule repère "Hits" pour savoir s'il faut traiter ou non la saisie, il faut indiquer dans la macro la colonne à superviser

Ici la 2 (B) :

If Target.Column <> 2 Then Exit Sub

Mettre le code dans le module de la (les) feuille(s) à traiter.

Sans précision de ta part les saisies sont considérées faites une par une (pas de collé d'une série de résultats)

En cas de détection d'anomalie il t'est proposé de vider la plage réception. Tu peux supprimer ce message et, au choix, ne rien faire ou vider.

On pourrait faire une proc unique pour toutes les feuilles mais il faudrait que ce soit toujours la même colonne, ou bien que l'on puisse détecter la colonne ou les cellules à traiter.

eric

10exemple-saisie.xlsm (17.99 Ko)

Bonjour,

Pour être très franc, je n'ai pas su faire fonctionner ton essai

Il suffisait de faire une saisie, mais encore faut-il que tu aies accepté les macros.

Comme dans ton nouveau fichier il n'y a plus de cellule repère "Hits" pour savoir s'il faut traiter ou non la saisie, il faut indiquer dans la macro la colonne à superviser

Ici la 2 (B) :

If Target.Column <> 2 Then Exit Sub

Mettre le code dans le module de la (les) feuille(s) à traiter.

Sans précision de ta part les saisies sont considérées faites une par une (pas de collé d'une série de résultats)

En cas de détection d'anomalie il t'est proposé de vider la plage réception. Tu peux supprimer ce message et, au choix, ne rien faire ou vider.

On pourrait faire une proc unique pour toutes les feuilles mais il faudrait que ce soit toujours la même colonne, ou bien que l'on puisse détecter la colonne ou les cellules à traiter.

eric

Magnifique, cela fonctionne super bien. EXTRA

Pour l'autre fichier j'avais vu que "Macro" était vide et donc pour moi pas d'obligation de Macro. Raison pour laquelle ca ne fonctionnait pas.

Sur le fichier exemple, tu as en + intégré le "/" c'est impecc.

Il faut vraiment que j’apprenne ce Visual Basic, ou au moins que j'essaie de comprendre ton programme car le but pour moi, sera de l'intégrer facilement dans plusieurs programmes différents.

Je ne connais les macro que par les enregistrement d'actions, et le Visual Basic absolument rien. Et donc ta phrase:

Mettre le code dans le module de la (les) feuille(s) à traiter.

Sans précision de ta part les saisies sont considérées faites une par une (pas de collé d'une série de résultats) je ne comprend pas vraiment.

Si je peux te demander un pti truc en plus...

Les compétitions peuvent se jouer en 9 ou 18 trous (parfois même 15). Si tu pouvais intégrer une case ou l'on inscrit le nombre de trous joués pour la compet et y faire référence pour activer le pop up, ca serait vraiment complet.

NB: J'ai fait du Basic dans mon très jeune temps, et cela me tente vraiment d'étudier ce Visual Basic.

Un tout grand Merci à toi

Bonjour,

Pour être très franc, je n'ai pas su faire fonctionner ton essai

Il suffisait de faire une saisie, mais encore faut-il que tu aies accepté les macros.

Comme dans ton nouveau fichier il n'y a plus de cellule repère "Hits" pour savoir s'il faut traiter ou non la saisie, il faut indiquer dans la macro la colonne à superviser

Ici la 2 (B) :

If Target.Column <> 2 Then Exit Sub

Mettre le code dans le module de la (les) feuille(s) à traiter.

Sans précision de ta part les saisies sont considérées faites une par une (pas de collé d'une série de résultats)

En cas de détection d'anomalie il t'est proposé de vider la plage réception. Tu peux supprimer ce message et, au choix, ne rien faire ou vider.

On pourrait faire une proc unique pour toutes les feuilles mais il faudrait que ce soit toujours la même colonne, ou bien que l'on puisse détecter la colonne ou les cellules à traiter.

eric

Magnifique, cela fonctionne super bien. EXTRA

Pour l'autre fichier j'avais vu que "Macro" était vide et donc pour moi pas d'obligation de Macro. Raison pour laquelle ca ne fonctionnait pas.

Sur le fichier exemple, tu as en + intégré le "/" c'est impecc.

Il faut vraiment que j’apprenne ce Visual Basic, ou au moins que j'essaie de comprendre ton programme car le but pour moi, sera de l'intégrer facilement dans plusieurs programmes différents.

Je ne connais les macro que par les enregistrement d'actions, et le Visual Basic absolument rien. Et donc ta phrase:

Mettre le code dans le module de la (les) feuille(s) à traiter.

Sans précision de ta part les saisies sont considérées faites une par une (pas de collé d'une série de résultats) je ne comprend pas vraiment.

Si je peux te demander un pti truc en plus...

Les compétitions peuvent se jouer en 9 ou 18 trous (parfois même 15). Si tu pouvais intégrer une case ou l'on inscrit le nombre de trous joués pour la compet et y faire référence pour activer le pop up, ca serait vraiment complet.

NB: J'ai fait du Basic dans mon très jeune temps, et cela me tente vraiment d'étudier ce Visual Basic.

Un tout grand Merci à toi

J'abuse peut-être mais il subsiste pour moi un problème. Quand j'entre une chaine de 18 digits simples, Excel transforme mon nombre en nombre exponentiel et donc le MSG Box le refuse !!!!

Il faut vraiment que j’apprenne ce Visual Basic

tu as bien raison. C'est un excellent exercice pour entretenir les neurones

Tu as beaucoup de tutos sur le net pour les débutants, à commencer par le menu COURS VBA ici en haut.

Et surtout l''aide qui est très bien faite : F1 sur toutes fonctions, propriétés ou méthodes que tu ne connais pas doit être le premier réflexe.

Et bien la lire jusqu'en bas. C'est souvent ici, dans les Remarques, que tu trouves la petite particularité qui te bloquait.

Sans précision de ta part les saisies sont considérées faites une par une (pas de collé d'une série de résultats) je ne comprend pas vraiment.

Si tu peux être amené à coller plusieurs résultats d'un coup ça ne fonctionnera pas. Il faut le dire si ça peut arriver car il faut modifier le programme.

Si tu pouvais intégrer une case ou l'on inscrit le nombre de trous joués

nommer cette cellule nbTrous, comme ça tu peux la mettre où tu veux sur la feuille.

Si non trouvée (ou si >18), par défaut c'est 18 trous

Quand j'entre une chaine de 18 digits simples, Excel transforme mon nombre en nombre exponentiel et donc le MSG Box le refuse !!!!

C'est surtout parce que tu perds les 3 derniers chiffres, excel n'a que 15 chiffres significatifs.

Il faut mettre la colonne en format Texte.

eric

Un tout tout Grand Merci à toi.

Je profiterai des prochaines longues soirées d'hiver pour exciter mes neurones avec ce cours VBA repris sur le site.

Merci Eriiiic

Bonjour,

autre version, rendue un peu plus 'intelligente'.

Le principe est de détecter une saisie valide de type 9, 15 ou 18 trous.

Si ok, une boite de dialogue propose de coller le résultat à droite.

Moins : plus d'alerte sur une saisie de +/- x hits. C'est l'absence de la boite qui doit alerter (et rien de mis à droite, tu ne peux pas passer à coté...)

Plus : valable sur toutes les cellules de n'importe quelle feuille et plus besoin de spécifier le nombre de trous.

Tu peux donc saisir n'importe où sans préparation ni modification du code, juste penser à mettre les cellules en format texte.

Si tu es sûr qu'aucune saisie ne risque de générer un faux positif, on peut supprimer la boite de dialogue pour éviter la double validation.

On peut aussi sécuriser un peu plus en mettant un caractère comme * en début de saisie

Le code est maintenant dans le module ThisWorkbook

Voit la version qui te va le mieux.

eric

Rechercher des sujets similaires à "decomposer score golf trous"