XL 2010 VBA - macro avec 1 boucle qui alterne 1 action à conditions et 1 action sans conditions

Scorp0211

XLDnaute Nouveau
Bonjour à TOUS !

(Excusez ce roman, mais une lecture lente à partir du 4e paragraphe est suggérée).

Je m'appelle Greg. Je viens juste de m'inscrire sur ce site (aujourd'hui même).
J'ai pris mes nouvelles fonctions au sein de mon entreprise mi-février, et parmi les tâches que j'ai à accomplir, j'ai un tableau statistiques à créer sous Excel.
Les statistiques ne sont pas un problème pour moi, et la manipulation d'Excel est plutôt aisée pour moi.

Mais jusqu'ici, je n'ai jamais eu plus d'une centaine d'entrées à analyser. Là, pour l'année 2021, j'ai un fichier qui en compte 3091 (si, si, trois mille quatre-vingt-onze !).
Et histoire de rendre les choses bien drôles, ces 3091 entrées sont en (584) petits groupes avec un nombre d'entrées variant (j'irai même jusqu'à dire aléatoire).

C'est pourquoi je me suis tourné vers une macro, et donc le codage VBA... auquel je ne connaissais absolument rien au 1er mars 2022.
Et même si en 6 semaines, j'ai appris pas mal de trucs... là, j'en arrive à un point où je ne peux plus avancer tout seul.

Voici ma problématique :
Mon service gère des travaux (nommés ''OT'') effectués par 7 ateliers différents, ayant chacun un nombre différent d'agents.
Les OT sont sollicités par les différents "services" qui constituent l'entreprise, au nombre de 28. Ce nombre n'est pas appelé à changer.
Chaque OT est saisi une première fois dans un tableau Excel, qui conserve des informations spécifiques (lieu, adresse, type d'OT, type d'événement, atelier concerné, matériel concerné, etc...). Chaque OT se voit attribué un 1er n° d'identification à 5 caractères (2 lettres + 3 chiffres).
Puis une seconde saisie est réalisée dans un autre logiciel, spécifique à notre entreprise, qui reprends les mêmes informations, mais pour certaines formulées différemment, et à partir duquel on peut réaliser une requête dans un tableau Excel. Chaque OT se voit attribué un 2e n° d'identification (9 chiffres) qui est la RÉFÉRENCE de base pour mon tableau.

Cette requête constitue ma PREMIERE source de données à analyser, et le fichier Excel de la 1er saisie en sera ma seconde source.

J'ai créé un tableau Excel comportant 19 feuilles, nommées respectivement dans l'ordre de A01 à A19.

Définition des feuilles :
(je commence par la A02, pour une raison que j'explique tout de suite : c'est la feuille qui contient les colonnes qui m'intéressent de la REQUÊTE. La feuille A01 est une copie de la 1e colonne de la requête dont j'ai supprimé les doublons pour avoir ma base "mémoire" de travail pour "reconnaître" chaque OT).
A02 : REQUETE-source 1
A01 : Base "mémoire" des N°OT
A03 : Fichier Excel de 1er saisi - source 2 (qui sera utilisée BEAUCOUP plus tard,... une fois que j'aurais géré la 1er source)
A04 : tableau récapitulatif de la composition des 7 ateliers, avec des noms (tronqués, ici, pour des raisons de confidentialité professionnelle que vous comprendrez certainement), leur catégorie professionnelle. La version non-tronquée de ce tableau est classée par ordre alphabétique par le nom de famille AU SEIN de chaque atelier. il doit encore être retravaillé/modifié.
A05 : un tableau "temps" pour réaliser des conversions de données de temps sous un certains format en un autre format. (qui sera utilisée BEAUCOUP plus tard...)
A06 : un tableau qui reprends la liste de TOUS les "services" demandeur d'OT. (noms tronqués, là encore, pour des raisons de confidentialité professionnelle).
A07 : un tableau qui reprends la liste des types d'OT : 8 en tout.
A08 : un tableau qui reprends la liste des Ateliers.
Les tableaux des feuilles A04, A05, A06, A07 et A08 seront retravaillés un peu plus tard, pour la concordance des positions d'atelier et autres... c'est pas urgent pour le moment.

et ensuite, c'est là que ça devient intéressant mais aussi compliqué :

de A09 à A15 : STATISTIQUES 1 : les "BLOCS ATELIER" avec les tableaux qui vont "recevoir" les données à analyser à partir des 2 sources, et la feuille A16 "BLOC TOTAL", qui fait les calculs automatiques.
A17 : le "BLOC STATISTIQUES 2" par nombre d'atelier concerné. (certains OT ne concernent qu'une seul atelier, d'autres OT concernent "plus" que 1 atelier).
A18 : le "BLOC STATISTIQUES 3" par service demandeur.
A19 : qui ne sert pas à grand-chose pour le moment, mais qui pourrait être un support pour la 1er macro que j'ai à créer.

Définition de ma 1e action à faire, compte tenu de la quantité d'entrées à analyser, et surtout du fait que ces entrées soient en groupe à nbre aléatoire d'entrées. Chaque groupe représente UN OT. Vous trouverez le fichier Excel en p.j. AVEC la macro. Le 1er groupe se compose de 6 entrées, c'est à dire 6 lignes avec le même N°OT à 9 chiffres, le deuxième groupe compte 7 entrées, le troisième 11 entrées, et ainsi de suite, avec à chaque fois un nombre plus grand OU plus petit d'entrées.

AUCUNE entrée ne DOIT être omise. Elles DOIVENT TOUTES être analysées.

J'ai donc créé une macro qui reprend, dans le même ordre, les N°OT de la requête (A02), en les comparant avec la liste sans doublons (A01), afin de les "copier-coller" indépendamment dans chaque "bloc atelier", dans le "bloc Total", et les "blocs statistiques 2 et 3". Ma macro fonctionne ! Mais elle ne fait qu'une partie de ce que je voudrais qu'elle fasse.

C'est là que je vous sollicite : je ne sais pas trop si je dois mettre une 2e action dans CETTE macro ou faire une 2e macro pour créer la ligne "sous-total" pour chaque OT.

Mon besoin :

pour le 1er OT
avoir les 6 lignes avec le même n°OT (ici 401508385)
Directement suivi d'une ligne nommée "S/S TOTAL"
puis, les 7 lignes pour le 2e OT (401567468)
Directement suivi d'une ligne nommée "S/S TOTAL"
et ainsi de suite, jusqu'à avoir TOUS les groupes d'OT séparés par cette ligne "S/S TOTAL".

Mes questions :
1) Est-il possible d'ajouter dans ma 1ere macro une 2e action pour créer cette ligne "S/S TOTAL" dans CHAQUE BLOC ? (Un screen shot du résultat recherché en p.j.)
(c'est-à-dire : "POUF" 6 entrées à n°OT, "PAF" Ligne "S/S TOTAL", "POUF" 7 entrées à n°OT, "PAF" Ligne "S/S TOTAL", "POUF" 11 entrées à n°OT, "PAF" Ligne "S/S TOTAL", etc...)

OU

2) Si NON, est-il possible de créer une 2e macro qui insère une ligne vide entre la 6e cellule qui contient le n°OT 401508385 et la 1e cellule qui contient le n°OT 401567468, et ainsi de suite jusqu'à la fin des 3091 entrées, MAIS là encore dans CHAQUE BLOC. Et qui fait "copier-coller" de la fameuse ligne "S/S TOTAL" (dans son entier, du coup, tant qu'à faire) sur cette ligne vide.
Et j'ai beau avoir parcouru plus de 70 pages du Forum de ce site, je n'ai rien trouvé qui m'aide réellement à ça.

Vous trouverez dans le VBE 3 modules. Il faut exécuter le 1er : "Sub AA_01". Cela dure environ 10 à 12 secondes avant que le résultat s'affiche.
J'ai mis un ' (apostrophe) devant les lignes qui concerne les feuilles A10 à A18, car pour les test, la A09 suffit. Mais je confirme que la macro fonctionne sur tous les blocs.
Et si vous voulez vous amuser à retirer l'apostrophe de chaque ligne, faites-vous plaisir ^^ !
Le module 2 et 3 (AA_02 et AA_03) sont des idées/tentatives que je n'arrive pas à faire aboutir du fait de ma connaissance BEAUCOUP TROP MÉDIOCRE du VBA.

Vous trouverez un fichier pdf avec une capture d'écran donnant aperçu du résultat recherché.

D'autres questions viendront éventuellement plus tard, dans d'autres posts, pour des détails du même genre pour ce même tableau . Mais tant que je n'ai réussi à créer ces lignes "S/S TOTAL", je suis bloqué, car toutes les autres macros qui suivront seront fondées sur cette fameuse ligne.

Je précise que je n'ai pas d'échéance dans le temps pour réaliser mon tableau.

Je remercie vivement tous ceux qui auront le courage de lire ça jusqu'au bout, et plus encore ceux qui pourront m'apporter ne serait-ce qu'une piste pour régler ma problématique. Je précise que mon entreprise fonctionne avec Excel 2010.

Un grand merci encore.
 

Pièces jointes

  • AC-05 - test - Redem feuillets bon ordre - macro 2b.xlsm
    438.3 KB · Affichages: 9
  • Résultat recherché pdf.pdf
    58.3 KB · Affichages: 6

Scorp0211

XLDnaute Nouveau
J'ai remis la macro et le bouton dans ton fichier AD-07

pour ta question 1: pas de souci, la macro fonctionnera toujours à partir du moment où les noms complets ne sont pas en doublon (sinon, c'est le premier trouvé qui est pris en compte: c'est ce qui se passe actuellement avec juste les prénoms)

pour la donnée Temps (feuille A05)==> si ca peut t'aider
pour convertir un nombre (7.8) en temps ==> 7h48 ou 468mn, il y a une formule qui fonctionne très bien
je l'ai mise en lignes 24 et 25 (en jaune)
en 24, j'ai découpé le calcul pour que tu vois l'effet de chaque élément de la formule
et en ligne 25, j'ai supprimé les calculs intermédiaires pour tout mettre en une fois.

d'une manière générale, tu demandes s'il existe une macro pour faire telle ou telle chose
en fait: la macro, c'est le programme qu'on est en train d'écrire: du coup, une macro fait tout ce qu'on lui demande de faire à travers des instructions

les possibilités d'une macro n'ont pour limite que l'imagination du créateur..
certains ecrivent des macros pour envoyer des mails, envoyer des SMS, Suis quasi sur qu'une macro excel est tout aussi capable de passer un coup de téléphone :-D
Bonjour !!!

Mise à part 90 minutes en début de matinée, que j'ai dû consacrer à ma tâche principale (la saisie des OT du jour), et 90 autres minutes d'étude assidue de ton codage, j'ai passé le reste de la journée à affiner la liste des agents en A04 pour réduire le nombre de "agent introuvable" sur la page A02.... résultat obtenu après 5h30 de travail de recherche : moins de 20 "agent introuvable" sur 3091 entrées !

Sérieux mec, tu assures !!!!!!

Tu as des livres sur le codage VBA à me conseiller ? Je veux me hisser à ton niveau ^^ !

et là, je viens de voir que tu viens de m'écrire. je te réponds juste après ^^ !
 

Scorp0211

XLDnaute Nouveau
Hello
voici une nouvelle version avec remplissage des heures et minutes issues de la conversion des heures décimales..
tu pourras remarquer que le code ne fait pas appel à la feuille A05==> les formules de conversion sont directements effectuées dans le code

pour la suite, plutot qu'un long roman, je te propose ce qui suit:
lance la macro (bouton 1)
et dans une des feuilles atelier, saisis à la main les formules que tu souhaites avoir au final (ne saisir que le premier OT de la feuille.. ca suffira)

C'est juste monstrueusement impeccable ^^ !
J'imprime ce code, et j'étudie ça dans le train.
J'ai un rdv, je dois y aller !
Encore merci. TRÈS bonne soirée à toi !
 

vgendron

XLDnaute Barbatruc
non pas de livre, juste deux sources: Google est ton ami, et ce forum, une vraie mine d'or..
perso, ma connaissance de VBA n'a pour origine que ma fainéantise.. 🙃
j'ai très vite eu ras le bol de répeter les memes actions à la main pour toujours traiter des résultats d'essais..
l'enregistreur de macro m'a d'abord aider à voir le code associé à mon action, puis à force d'optimisation, je suis passé d'un traitement manuel de 2h à un traitement automatique de 15s...
 

Scorp0211

XLDnaute Nouveau
Salut

J'ai detecté quelques problèmes à confirmer
feuille A04
si j'ai bien compris, la colonne B correspond au numéro d'atelier et la colonne B à la catégorie Agent
1) il faudrait ajouter une ligne d'entete avec le nom des colonnes (NomAgent - NumAtelier - Catégorie Agent): juste pour une question de lisibilité

2) en colonne B: de la ligne 45 à 49, les colonnes semblent inversées==> ca va poser des problèmes lorsqu'on cherchera la feuille de l'atelier

3) les 4 eres lignes indiquent un numéro d'atelier 0 (la feuille atelier 0, n'existe pas) ==> je vois que ce sont les chefs d'atelier==> Comment sait on qui est le chef de quel atelier?

4) à partir de la ligne 80, on a un atelier numéro 8==> idem, la feuille de cet atelier n'existe pas (la dernière feuille A15 correspond à l'atelier 7)

5) pour les personnes "plus la": vu qu'ils n'ont pas de numéro d'atelier: comment doit on les traiter? on les ignore?

6) question pour la correspondance de temps
comment ca se passe?
feuille A02: agent ZDZiSLAW ==> Temps 7.8

dans la feuille A05: on récupère quoi? en fonction de quoi?
Hello !

Pour une raison inconnue, j'ai zappé ce message... Il n'est apparut qu'hier soir très tard dans le fil de la discussion... et du coup, je me rend compte que, n'ayant pas répondu à tes questions, tu as dû travailler un peu dans le flou... Excuses-moi, ce n'était pas voulu !

Du coup, je te répond à CE message tout de suite :

1) pas de problème pour les en-têtes : si ça peut t'aider, moi, ça me va aussi !

2) Tu avais raison à propos des cases inversées, et je vois que tu as corrigé par toi-même. je t'en remercie.

3)-4) Pour les agents en atelier 0 : je me suis renseigné, et j'ai modifié en conséquences : afin d'avoir un résultat, je les ai rattaché à des ateliers.

D'ailleurs, ça tombe très bien, en réalité, car c'était justement le travail que j'ai fait hier en allant chercher les dernière infos à propos des "agent introuvable"... La bonne nouvelle, c'est que j'ai réussi à réduire ce chiffre-là à une petite trentaine de personne en tout.
La mauvaise nouvelle, c'est que je ne pourrais pas affiner davantage, et ça va nous forcer à passer à une version AE-07, car il va falloir créer un bloc atelier (8, donc) supplémentaire entre l'atelier 7 et le bloc TOTAL, pour ces personnes et les quelques lignes ou il y a autre chose qu'un nom.

5) Pour les personnes "plus là", la question n'est pas de savoir s'ils sont encore là ou plus là aujourd'hui. Elles étaient là entre le 01/01/2021 et le 31/12/2021 et sont présentes dans la requête, donc, je les ai tout simplement réintégrées dans la liste A04 dans les ateliers auxquels elles appartenaient à ce moment là.

Et pour tous les autres, j'ai ajouté un atelier 8 INCLASSABLE. Il s'agit de personnes qui ont momentanément travaillé pour nous, font partie de l'entreprise mais qui viennent d'ateliers extérieurs à notre division. Ce que je ne savais pas hier soir. Je ne l'ai appris que ce matin.

6) En feuille A05, j'ai vu que tu avais mis en fond jaune les données de conversion. C'est tout-à-fait les données qu'il faut prendre comme référence. MAIS ce tableau est encore incomplet, et je suis moi-même encore à la recherche des bonnes infos pour affiner... Pour le moment, travaillons avec ça ! et je reviens vers toi dès que j'ai qqch de concrèt à te donner. (à savoir : les colonnes A à K n'ont pas été créées par moi).

Tu trouveras ci-joint le fameux AE-07 avec : une feuille "Atelier 8" en plus donc, et une feuille A04 complète cette fois-ci, ce qui, logiquement, devrait donner un résultat avec 0 (zéro) "agent introuvable" après exécution de la macro, après ajustement de celle-ci.

J'ai vraiment lu attentivement ton codage des 2 macros. Les choses commencent à bien se dessiner dans mon esprit. Je vais chercher sur internet des définitions précises de certains termes comme "LBound" ou "UBound", car il y a encore du flou... mais c'est normal, je ne fait que commencer à naviguer dans le monde du VBA... je ne suis qu'un pauvre moussaillon ^^ !

Pour la macro 3, je vais essayer de la coder moi-même, et tu me diras là où sont mes erreurs.
Es-tu d'accord ?

À bientôt, et surtout bonne journée à toi !
 

Pièces jointes

  • AE-07 - STATS OT - SET - macro 2 - sans noms agents.xlsM
    198.5 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
Pour la macro 3, je vais essayer de la coder moi-même, et tu me diras là où sont mes erreurs.
Es-tu d'accord ?
Pas de pb, au contraire :-D

pour Lbound - UBound
c'est assez facile à deviner..
Bound==>Boundaries=limite
L==>Low
U==>Upper

limites Basse et Haute du tableau
en plus simple: première et dernière valeur du tablo

avec quelques subitilités à maitriser pour ne pas trop s'emmeler
un tablo 1D: c'est juste une colonne- plusieurs lignes
un tablo 2D: c'est plusieurs colonnes, et plusieurs lignes ==> Ex A1:C25: c'est un tablo de 25 lignes sur 3 Colonnes

la première dimension, c'est le nombre de lignes :25
la seconde dimensiion, c'est le nombre de colonne: 3
le nombre d'élements de la première dimension est donnée par ubound(tablo,1)
le nombre d'élments de la seconde dimension est donnée par ubound(tablo,2)

pour accéder à l'élément i,j du tablo==> tablo(i,j)
dans l'exemple A1:C25==> si je veux avoir la valeur de B17 ==> tablo(17,2)
 

Scorp0211

XLDnaute Nouveau
Pas de pb, au contraire :-D

pour Lbound - UBound
c'est assez facile à deviner..
Bound==>Boundaries=limite
L==>Low
U==>Upper

limites Basse et Haute du tableau
en plus simple: première et dernière valeur du tablo

avec quelques subitilités à maitriser pour ne pas trop s'emmeler
un tablo 1D: c'est juste une colonne- plusieurs lignes
un tablo 2D: c'est plusieurs colonnes, et plusieurs lignes ==> Ex A1:C25: c'est un tablo de 25 lignes sur 3 Colonnes

la première dimension, c'est le nombre de lignes :25
la seconde dimensiion, c'est le nombre de colonne: 3
le nombre d'élements de la première dimension est donnée par ubound(tablo,1)
le nombre d'élments de la seconde dimension est donnée par ubound(tablo,2)

pour accéder à l'élément i,j du tablo==> tablo(i,j)
dans l'exemple A1:C25==> si je veux avoir la valeur de B17 ==> tablo(17,2)
Bonjour Vgendron !

J'espère que tu as passé un bon week-end ! Merci pour les indications de ton dernier message.

De mon côté, j'ai bossé un peu sur le codage de la 3e macro sur mon pc perso... mais je me suis aperçu que il y a une erreur sur ma version AE-07 : comme j'ai créé une feuille A20, j'ai oublié de remettre dans le bon ordre les feuille dans le développeur.

De plus, sur mon pc, la 1er macro ne fonctionne pas. je vais faire le nécessaire ici pour rétablir tout ça, et reviendra vers toi si je n'y arrive pas. Si j'y arrive, je continuerai le travail du codage de la 3e macro.

Bonne journée à toi.
 

Scorp0211

XLDnaute Nouveau
Bonjour Vgendron !

J'espère que tu as passé un bon week-end ! Merci pour les indications de ton dernier message.

De mon côté, j'ai bossé un peu sur le codage de la 3e macro sur mon pc perso... mais je me suis aperçu que il y a une erreur sur ma version AE-07 : comme j'ai créé une feuille A20, j'ai oublié de remettre dans le bon ordre les feuille dans le développeur.

De plus, sur mon pc, la 1er macro ne fonctionne pas. je vais faire le nécessaire ici pour rétablir tout ça, et reviendra vers toi si je n'y arrive pas. Si j'y arrive, je continuerai le travail du codage de la 3e macro.

Bonne journée à toi.
J'ai réglé le problème de la macro 1 : comme on avait mis des en-têtes en A02, il fallait juste corriger la ligne
TabData = .Range("A1:E" & fin).Value en TabData = .Range("A2:E" & fin).Value
de la section "With Sheets("A02")".

C'est chose faite !
 

Scorp0211

XLDnaute Nouveau
J'ai réglé le problème de la macro 1 : comme on avait mis des en-têtes en A02, il fallait juste corriger la ligne
TabData = .Range("A1:E" & fin).Value en TabData = .Range("A2:E" & fin).Value
de la section "With Sheets("A02")".

C'est chose faite !
J'ai fais les derniers petits ajustement de la liste en A02 :
1) ai réduit le nombre de "agent introuvable" à 0 (zéro) (===> YOUPI !!!!!)
2) ai "intégré" au codage de la macro 2 l'atelier "8 inclassable" sur les lignes de codage concernées.
Résultat : l'atelier 8 est correctement rempli comme les 7 autres. C'est absolument NICKEL !

Allez maintenant, la macro 3... Initialisation : Try #1... (lol)
 

Scorp0211

XLDnaute Nouveau
J'ai fais les derniers petits ajustement de la liste en A02 :
1) ai réduit le nombre de "agent introuvable" à 0 (zéro) (===> YOUPI !!!!!)
2) ai "intégré" au codage de la macro 2 l'atelier "8 inclassable" sur les lignes de codage concernées.
Résultat : l'atelier 8 est correctement rempli comme les 7 autres. C'est absolument NICKEL !

Allez maintenant, la macro 3... Initialisation : Try #1... (lol)
Re bonjour !

Je planche depuis 10h30 ce matin très sérieusement sur le code de la 3e macro.
j'ai deux ou trois questions à te poser (je pose la question PARCE QUE je n'ai rien trouvé sur google de vraiment explicit sur le sujet).

Je vois dans le code de la 2e macro, à un moment, "DebFormule = 4"... qu'est- ce que c'est ?

D'ailleurs, y a t-il un moyen de numéroter les lignes dans l'espèce de petit marge sur la gauche de là où on écrit le code DANS le développeur ?

Il va être 16h20, j'arrive plus à réfléchir. Je m'arrête pour aujourd'hui.
 

vgendron

XLDnaute Barbatruc
salut
DebFormule: c'est une variable que j'utilise pour créer la formule de somme
la première formule qui s'applique au premier code est somme (B4:B10)

pour la numérotation des lignes, il y a apparemment un outil MZTool qui fait ca..
selon les versions de VBA il peut y avoir une option à activer..??..??
 

Scorp0211

XLDnaute Nouveau
salut
DebFormule: c'est une variable que j'utilise pour créer la formule de somme
la première formule qui s'applique au premier code est somme (B4:B10)

pour la numérotation des lignes, il y a apparemment un outil MZTool qui fait ca..
selon les versions de VBA il peut y avoir une option à activer..??..??
Hello ! Merci pour l'info, ça m'a bien aidé...

J'ai fait quelques modifications de mise en forme de mon tableau, et aussi de la macro 2, mais j'ai pas encore fini... j'ai fais quelques test, et c'est presque comme ce que je recherche.

Je vais encore plancher dessus demain, et sur la macro 3, et je t'envoi mon "essai#1" demain dans l'après midi avec la description du résultat recherché, que tu puisses me dire où sont mes erreurs de codage s'il y en a.

Bonne soirée à toi !
 

Scorp0211

XLDnaute Nouveau
Hello ! Merci pour l'info, ça m'a bien aidé...

J'ai fait quelques modifications de mise en forme de mon tableau, et aussi de la macro 2, mais j'ai pas encore fini... j'ai fais quelques test, et c'est presque comme ce que je recherche.

Je vais encore plancher dessus demain, et sur la macro 3, et je t'envoi mon "essai#1" demain dans l'après midi avec la description du résultat recherché, que tu puisses me dire où sont mes erreurs de codage s'il y en a.

Bonne soirée à toi !
Bonjour Vgendron,

Excuses-moi pour le "non-envoi" d'hier... beaucoup d'imprévus toute la journée, par les activités du bureau... des OT vraiment ultra urgents à traiter et super importants pour le "Grand Patron" de la boîte. Et donc pas eu une seconde pour travailler sur le codage.
Et puis je dois dire que je pédale un peu dans la choucroute là ! Alors j'ai décidé de m'y prendre autrement, en repartant de zéro sur cette 3e macro... j'ai d'abord écrit mon protocole (que je t'envoi avec ce message), afin que tu puisses voir de ton côté, MAIS je continue de travailler sur le codage ! Tu le trouvera ici aussi.

En lisant mon codage et mon protocole en parallèle, tu verras en vert les étapes de mon protocole.

J'ai plein de questions car j'ai encore des doutes sur ma compréhension de certains choses : (dans le codage de la macro 2)
1) La ligne :
"For i = LBound(TabData, 1) To UBound(TabData, 1) 'pour chaque ligne du tableau de données
Agent = UCase(TabData(i, 4))"
veut bien dire :
"le nom de l'agent se situe dans la colonne D, du tableau en feuille A02 (TabData), en cellule variante, et que sont contenu est renvoyé entièrement en Majuscule" ? c'est bien ça ?

2) La ligne : "Indi = 1" signifie quoi concrètement ? et pourquoi "=1" ? qu'est-ce qui se passe si on met "2" ?

3) même Question pour "DebFormule = 4" : pourquoi "=4" ? qu'est-ce qui se passe si on met un autre chiffre ?

4) La ligne "Dim TabComplet() As Variant" désigne "les x lignes d'un OT + la ligne S/S TOTAL" dans le(s) bloc(s) atelier ? ou bien le bloc atelier lui même une fois la macro exécutée ? j'ai un doute.

5) La ligne "ReDim TabComplet(1 To TailleFinale, 1 To UBound(TabData, 2))"
veut bien dire "re-défini le "tabComplet" de la 1e ligne jusqu'à la dernière ligne contenant qqch, qui dépendent elles-mêmes de la 1e ligne à la dernière ligne du tableau qui se trouve en TabData c'est-à-dire le tableau en A02 colonne B" ? ou ce "2" à la fin de la ligne désigne la 2e ligne de cette feuille A02 ?

6) Dans la ligne "TabFinal(IndI + 1, j) = "=Sum(" & ContenuFormule & ")", c'est ce "ContenuFormule" qui me permet de juste saisir directement la formule dans la dite cellule ? et elle se mettra à jour sur la ligne suivante ?

Le fichier Excel est trop volumineux pour être envoyé.
J'ai donc mis le code sur une page Word.
Tu verras sur le protocole où je me suis arrêté dans le codage.
Tu verras dans le codage, une fois reporté dans le VBE, il y a plein d'annotations en vert, et aussi quelques questions par-ci par-là...
J'ai également mis une capture d'écran sous format pdf du résultat recherché.

J'ai été obligé de m'arrêter pour aujourd'hui car il est l'heure de partir...
Je suis en congés ce soir pour 2 semaines. je reprends le lundi 23 Mai, mais je continuerais à travailler un peu dessus chez mon père.

Je te dis à bientôt, et bonne soirée. Bon Week-end à toi pour demain.
 

Pièces jointes

  • Protocole Macro 3.docx
    21.5 KB · Affichages: 2
  • Envoi impossible - fichier trop volumineux - 05 05 2022.pdf
    68.8 KB · Affichages: 3
  • Sub AA_03 - pour envoyer à Vgendron sur ExcelDownloads com.docx
    25.7 KB · Affichages: 2
  • Résultat recherché 05 05 2022.pdf
    688.7 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
Hello
je viens de regarder ton fichier image "Résultat Recherché"
pour l'atelier 1:
si j'ai bien compris, la ligne 10 "sous total", c'est la somme des lignes 4 à 9
le calcul du pourcentage en colonne G, c'est le nombre de minute * 100 / (nombre total de minutes de tous les ateliers)

ces calculs me posent un souci..
D10: 23.4 = 7.8+15.6==> OK
E10: 22=7+15==>OK
F10: 84=48+36==>OK
MAIS !! 23.4 (temps Sima), ce n'est pas 22h84
si on utilise la conversion Temps SIMA==> H:mm ca donne 23h 24mn

comme les pourcentages ne sont calculés QUE sur les minutes (les heures sont totalement oubliées), les résultats sont totalement erronés..
il vaudrait mieux calculer tes pourcentages sur un nombre total de minutes qui tient compte aussi des heures==>
7.8==>7h:48mn==>7*60+48=468mn

dans la description de ta formule (pour la ligne 6 par ex)
F6*A3/ cellule F10 de la feuille A17
1) A3 contient toujours 100.. pas besoin de cette cellule.. suffit d'ecrire 100
la feulle A17: à quel moment et comment est elle remplie? dans le fichier que j'ai, la feuille est vide
 

vgendron

XLDnaute Barbatruc
Hello

Regarde la PJ
j'y ai mis une nouvelle macro "Statistiques3"
j'ai modifié la façon de procéder
j'y ai mis tout un tas de commentaires

on commence par créer un "TabComplet" qui contient toutes les infos de tous les OT, de tous les agents pour tous les ateliers...Bref.. la totale

ex: pour le premier OT: dans le tablo, on a les 6 lignes remplies avec les 6 agents
Ce TabComplet sert ensuite à alimenter les ateliers==> les 6 agents sont donc ventilés dans les différents ateliers
Ce TabComplet sert également à alimenter la feuille Totaux (A16 que j'ai renomée)
comme c'est le meme tablo qui alimente les ateliers et la feuille totaux.. on en déduit que tes colonnes Verif1 et 2 ne servent à rien...==> je les ai laissées . au cas où

plutot que mettre des formules, c'est VBA qui se charge de compter, sommer....
en plus, des formules ca alourdit le fichier.

un commentaire sur les calculs de conversion du temps SIMA: il s'agit d'un nombre décimal
ex: 5.5: c'est 5h et demi
pour convertir en h, minutes:
on prend la valeur entière de 5.5 ==>5h
on prend le reste (5.5 - 5) *60=0.5*60=30mn
on a donc bien 5.5 = 5h et demi, = 5h30mn

autre exemple: 3.8==> 3h + 0.8*60 = 3h:48mn

total de 5.5 + 3.8 = 9.3 soit 9h + 0.3*60 = 9h18mn
toi: sur la ligne sous total, tu fais un total sur les heures, puis les minutes: ==5+3=8h et 30+48 = 78mn
==> ce qui te donne dans ta ligne sous total: 9.3 (OK) / 8 (PAS ok)/ 78(Pas OK)

ces deux exemples ne sont pas pris au hasard :-D
on est bien d'accord que 5.5, c'est plus que 3.8
hors. tu fais des calculs de pourcentage uniquement sur les minutes...
pour le 5.5 ==> tu as 30*100/78 = 38
pour le 3.8 ==> tu as 48*100/78 = 61
le 3.8 représente donc plus que 5.5.. NOK

d'ou ma proposition dans le code de faire les calculs de % sur les temps SIMA convertis en minutes
5.5=5h30 = 5*60+30=330mn
3.8=3h48 = 3*60+48 = 218mn

PS: les % pourraient etre calculés directement sur le temps décimal SANS conversion...
 

Pièces jointes

  • AE-07 - STATS OT - SET - macro 2 - sans noms agents.xlsM
    242.5 KB · Affichages: 4

Scorp0211

XLDnaute Nouveau
un commentaire sur les calculs de conversion du temps SIMA: il s'agit d'un nombre décimal
ex: 5.5: c'est 5h et demi
pour convertir en h, minutes:
on prend la valeur entière de 5.5 ==>5h
on prend le reste (5.5 - 5) *60=0.5*60=30mn
on a donc bien 5.5 = 5h et demi, = 5h30mn

autre exemple: 3.8==> 3h + 0.8*60 = 3h:48mn

total de 5.5 + 3.8 = 9.3 soit 9h + 0.3*60 = 9h18mn
toi: sur la ligne sous total, tu fais un total sur les heures, puis les minutes: ==5+3=8h et 30+48 = 78mn
==> ce qui te donne dans ta ligne sous total: 9.3 (OK) / 8 (PAS ok)/ 78(Pas OK)

ces deux exemples ne sont pas pris au hasard :-D
on est bien d'accord que 5.5, c'est plus que 3.8
hors. tu fais des calculs de pourcentage uniquement sur les minutes...
pour le 5.5 ==> tu as 30*100/78 = 38
pour le 3.8 ==> tu as 48*100/78 = 61
le 3.8 représente donc plus que 5.5.. NOK

d'ou ma proposition dans le code de faire les calculs de % sur les temps SIMA convertis en minutes
5.5=5h30 = 5*60+30=330mn
3.8=3h48 = 3*60+48 = 218mn

PS: les % pourraient etre calculés directement sur le temps décimal SANS conversion...
Bonjour Vgendron !

Tout d'abord, je te prie de m'excuser pour ces 2 semaines de silence... J'avais dit que je bosserai sur le projet sur le pc de mon père, quelque part dans le trou du c** de la France... mais voilà : des travaux urbains de la mairie pour la rénovation des lignes téléphoniques et des conduites d'électricité du patelin ont fait que je n'avais aucune connexion internet pendant mon séjour... Bref !

Je me suis remis au boulot ce matin. Et je viens de jeter un oeil sur ton dernier envoi. C'est exactement ce que je recherche. Et tu as TOTALEMENT raison sur la question du temps que tu soulèves dans ton dernier message : 3.8 SIMA ne peut pas donner plus que 7.8 SIMA...

Et dans mon esprit, j'avais effectivement prévu de ne faire mes calculs statistiques QUE sur le temps en minutes... d'où la nécessité d'avoir les bonnes conversion dès le départ. Mais ça, c'est pas de ta faute.
Encore la mienne ^^ !

D'où le tableau en A05... Je suis en train de me renseigner auprès d'une personne qui connait notre logiciel spécifique sur le bout des doigts pour régler la question de la conversion. Je reviens vers toi dès que j'aurai du concret à te fournir.

As-tu lu mon essai de codage ? Qu'en penses-tu ? Il est évident que ça doit être bourré de fautes... et j'en ris d'avance... ^^

À bientôt.
 

Discussions similaires

Statistiques des forums

Discussions
298 901
Messages
1 972 611
Membres
203 781
dernier inscrit
makam