Création de macro pour traitement de données

Bonjour

Je vous explique,

Je participe à des courses d'endurance de karting, et j'utilise pour ça un tableau Excel afin d'analyser mes tours et ceux de mon équipes, ou les autres équipes.

Pour celà je pars du pdf qu'on nous fournit en fin de course :

Pour en arriver à mon tableau fini :

2analyse-course.xlsm (102.69 Ko)

Moi pour l'utiliser ça va, je m'en sors car je maîtrise Excel suffisamment.
Sauf qu'il me manque la compétence "Macro et VBA" à mon inventaire pour faire des trucs de fou...
Et aujourd'hui j'aimerai en intégrer afin de le mettre à dispo facilement de novices d'Excel (Faire du Clic et ça marche)

J'ai commenté l'Excel afin d'expliquer au mieux possible les étapes, et les problèmes que je rencontre.

Onglet Traitement des données

Je dois partir du pdf, donc des tours sous forme d'un tableau.
Donc dans le classeur :

De B2 à K2 : tour de 1 à 10

De B3 à K3 : tour de 11 à 20

De B4 à K4 : tour de 21 à 30

Ici le format doit être reconnu par Excel, j'ai donc choisis un format "m:ss,000" (sauf si vous avez une meilleur idée, sachant que certains tours sont sous la minute, d'autres au dessus) pour que ce soit parlant pour l'utilisateur et aussi pour Excel

Ce qui pose aussi son lot de problèmes:

Depuis le pdf ce sont des données brut pas connues par Excel=> Pour Excel c'est au format "Standard" et écrit de la forme 1:21.215 ou 47,548

Au lieu de : 1:21,215 ou 0:47,548

Ce qui explique les différentes manip dans l'onglet de traitement ....

Pour en arriver à tous les tours en une colonne, au format qui va bien pour l'intégrer dans l'onglet 2 "Chronos"

Onglet Chronos

Ici l'utilisateur copie par lui même les données depuis le traitement afin de les répartir par pilote si il le souhaite.

Et tout est tracé dans l'onglet Graph

Onglet Graph

Rien de compliqué, sauf un bug d'affichage des tours sous la minute qui apparaissent à "0:00,000" sauf si on fait des "copié-collé", ca semble faire un reset et ça lui plait ...

Onglet Graph

Rien de compliqué, sauf un bug d'affichage des tours sous la minute qui apparaissent à "0:00,000" sauf si on fait des "copié-collé", ca semble faire un reset et ça lui plait ...

Bon ça c'est réglé.
Il n'aime pas le m:ss,000
Il préfère le mm:ss,000 qui ne lui pose aucun problème

Bonjour,

Un petit test via POWER QUERY sur la base d'une table structurée nommée BDD. Rentrez les temps dans la table > Données > Actualiser tout > La table se met à jour.

Si vous souhaitez explorer : Cliquez sur une des cellules de la table en colonne M:N > Requête sur le ruban d'en haut > Modifier. Les étapes de transformations réaliser sur la table structurée BDD initiale sont indiquées dans le menu de droite.

Cdlt,

4analyse-course.xlsm (107.30 Ko)

Merci :)

Je connais pas du tout POWER QUERY, ca mérite de creuser !

J'ai un peu modifié le traitement qu'il en fait,

Mais une fois le format OK, je n'arrive pas à le copier coller dans "chronos" de façon à ce qu'il le reconnaisse comme un temps à prendre en compte ..
En l'écrivant à la main c'est bon

En le copiant collant non

En faisant "= renvoi" non

Tu sais pourquoi ?
Est-ce une valeur pour lui ? du texte ?

Merci !

Bonjour,

Alors oui il me semble que c'est du texte car le typage de donnée est assez fort et restreint sous POWER QUERY.

Ce qu'il faut faire c'est pré formater toute la colonne N une première fois (le typage n'est pas altérée par une actualisation de la requête) selon votre format, donc ici mm:ss,000.
Puis par contre à chaque actualisation sélectionner la colonne N > Données > Convertir > Terminer ce qui à pour effet de "valider" la conversion des données. Ensuite vous pouvez faire votre copier/coller comme d'habitude.

Le tout est également paramétrable par VBA (méthode Query.Refresh pour actualiser et Range.TextToCulmns pour convertir).

Cdlt,

Ok,

Je regarde ça.

j'essaie de comprendre ce que tu me propose étant donné que le VBA je comprend l'esprit mais je ne sais pas réellement le coder.

J'essaie et je te redis

Bonjour,

Après m'être trituré l'esprit sur une query qui écrasait mes format de nombre pour du texte malgré ma dernière ligne de conversion (oublie de l'argument background query:=false) un code qui me semble fonctionner :

Sub MAJ()
With Worksheets("BDD")
    .ListObjects("RECAP").QueryTable.Refresh BackgroundQuery:=False 'Actualise la requête sans actualisation en arrière plan
    .Columns(14).TextToColumns Destination:=.Columns(14), FieldInfo:=Array(1, 1) 'Converti la colonne 14 de la feuille en nombre
End With
End Sub

Cdlt,

Bon,

J'ai pas réussi à l'intégrer directement sous POWER QUERY
Dans Transformer, sous "Type de données" si je lui dit nombre en derniere etape il me met error

Du coup j'ai fait un convertissage via "Données" ....

Tu pourrais me filer un coup de main ?

Bonjour,

Oui c'est normal le typage ainsi n'est pas possible car POWER QUERY ne reconnait pas ces valeurs comme des nombres. C'est le défaut lorsqu'on travaille avec des formats non standards ..

C'est pour ça qu'il faut mettre le format par défaut sur toute la colonne N en mm:ss,000 puis ensuite seulement faire Données > Convertir (cette dernière étape est à faire à chaque actualisation de la requête).

Cf fichier joint où toutes les opérations ont été réalisées. Si vous ajoutez des valeurs sur la table puis exécutez le code du module 2, alors les dernières données ajoutées dans la requête peuvent être copiée et collée sur votre feuille 2, les moyennes devraient changer.

En esperant que ce soit "clair". C'est la mise en place le plus complexe, mais je pense que ce sera plus simple comme ça pour les actualisations.

Cdlt,

Hum....

Au risque de décevoir, non je n'ai pas compris...

Depuis votre fichier, impossible de copier coller les valeurs dans le tableau.. Ca affiche que des zéros...

Le code du module 2 ? Pas compris.

La mise en forme de la colonne N ?
N'est-il pas plus facile de reporter cette colonne et ensuite mettre en forme ?

L'idée finale une fois que tout marche c'est de verrouiller tout ce traitement de la BDD à la mise à dispo des valeurs dans l'onglet "Chronos" pour ne pas que les utilisateurs y touchent

*EDIT*
En copiant collant special en valeur a coté, puis mise en forme mm:ss,000 on peut ensuite utiliser les valeurs

Je m'approche ...

Bonjour,

Une V3 qui je l'espère sera plus simple à comprendre.

Tout se déroule sur la feuille Chronos : vous cliquez sur le bouton MaJ > La requête se met à jour et la macro formalise correctement les données en "nombre". Il n'y a plus qu'à les copier/coller dans votre tableau de la feuille Chronos dans les colonne B à G selon votre répartition. Il est possible de s'occuper de ça dans le code VBA mais malheureusement je ne connais pas la logique de répartition des temps en fonctions des pilotes.

Pour la mise en forme : Il n'est pas nécessaire de la refaire à chaque actualisation. C'est pour ça que je ne la fait qu'une fois (ici c'est déjà fait) et après je n'y touche plus elle est figée, même en cas d'actualisation.

J'espère que c'est plus clair, sinon merci de donner un maximum de détail sur ce que vous en comprenez pas (référence, manipulation réalisée, résultat attendu, etc ..)

Cdlt,

Merci je vais regarder ça

La logique de répartition c'est l'utilisateur du fichier qui la connais,
Pour faire simple, ce sont des courses en relai, donc le pilote A peut faire 15 tours, puis le B 28 puis le C 7 puis le A1 puisle D78 etc
On ne peut pas "coder" quoi que ce soit pour cette partie.

J'essaierai d'être plus clair et précis si j'ai des questions sur la V3, je regarde ça tout de suite merci de votre patience

C'est sympa :)

Alors, j'ai essayé en augmentant la quantité de données dans BDD

Et dans Chronos, j'ai voulu étoffer la macro de telle sorte à rendre le moins facile possible à l'utilisateur quelconque l'accès au fonctionnement du traitement des données

PowerQuery, Macro etc.
Malheureusement si j'essaie de verouiller l'onglet (Colonne Tours et Temps, J et K) rien ne fonctionne.

Donc, j'aimerai faire un copier coller en colonne M, et ensuite masquer les colonne I , J , K.
J'ai fait un bout de macro en plus (surement de facon trèèès brouillon), mais les colonnes J et K se masque, et réapparaissent ...
Je ne comprend pas pourquoi...

Avez-vous une solution ? Quand je le fait à la main pas de problèmes

Ensuite, j'ai voulu insérer pour que ce soit fluide et que les étapes ne soient pas visibles :

Application.ScreenUpDating=false

Bonjour,

Ci-joint une V3.3 avec la protection de la feuille et le mot de passe "MDP" pour protéger les data et masquage des colonnes J et K :

Sub MAJ()
Application.ScreenUpdating = False
With Worksheets("Chronos")
    .Unprotect "MDP"
    .ListObjects("RECAP").QueryTable.Refresh BackgroundQuery:=False
    .Columns(11).TextToColumns Destination:=.Columns(13), FieldInfo:=Array(1, 1)
    .Range("J:K").EntireColumn.Hidden = True
    .Protect "MDP"
End With
Application.ScreenUpdating = True
End Sub

Les cellules du tableau où les données vont être collées (colonnes A à G) on été déverrouillées afin de pouvoir y coller les valeurs. J'ai également modifié la requête pour supprimer les TOURS étant donné que vous ne semblez pas vous en servir, ça permet d’accélérer la requête.

Ca devrait être mieux comme ça.

Cdlt,

Super :)

Merci !

Rechercher des sujets similaires à "creation macro traitement donnees"