Calcul de productivité

bonjour,

mes connaissances en VBA sont assez limitées, et au vu de ce que je voudrais faire, il n'y a que VBA qui pourrait le faire (enfin je pense !!).

Dans le fichier joint, la liste est triée par utilisateur et par jour. Il y a deux sous totaux : 1 qui compte le nombre d'activités à chaque changement d'activités et 1 autre qui compte le nombre d'activité journalière.

A ce niveau, je souhaiterais que lorsque qu'il y a un changement d'activité (colonne S), on puisse calculer le temps (heure max-heure min). Le problème est que parfois il n'y a qu'une seule ligne et dans ce cas il faudrait pouvoir faire (heure max - heure max précédente).

Mon idée était d'utiliser le sous total et que lorsque ce sous total = 1, appliquer la formule (heure max - heure max précédente)

Si sous total >1, appliquer la formule (heure max-heure min).

Je n'arrive pas à traduire ceci en VBA, et votre aide me serait vraiment très précieuse.

Merci à vous tous pour votre aide

98test.xlsx (42.08 Ko)

Bonjour,

une timide tentative: ) mais sans VBA

P.

79test-2.xlsx (94.60 Ko)

Bonjour,

Bonjour patrick1957,

La même chose mais différemment.

Cdlt.

68test-2.xlsx (88.90 Ko)

bonjour,

merci pour vos réponses.

le résultat est intéressant mais cela présente quand même quelques incohérences au niveau du calcul des heures. (journée de 22H de travail )

Il me semble que seul VBA peut venir à notre rescousse, mais je ne vois pas encore comment.

En tout cas, merci pour ces premières pistes de travail.

bonne journée

Re,

Tu peux aussi nous indiquer à quoi correspondent les colonnes Conf. à, Mini et Maxi.

Et surtout nous donner un exemple de résultat pour une activité donnée.

Sinon, ne recherches-tu pas pour une activité, l'écart de la colonne Conf. à, entre le début et la fin ?

Ce qui pourrait donner ceci :

snip 20160408114513

A te relire.

Cdlt.

bonjour,

ci-joint un résultat que je devrais fournir (feuil2).

le calcul a été réalisé manuellement.

il arrive que le fichier que l'on extraie fasse plus de 20000 lignes .

on doit mettre en évidence par utilisateur et par jour, l'activité réalisé en heure sans que cela dépasse 7 h

ex: 1h50 d'encasage le 04/01 par l'utilisateur test.....

merci pour votre aide

49test.xlsx (44.39 Ko)

re,

j'ai un peu l'impression qu'il nous manque des infos...

tu veux un total par jour/ par utilisateur/dans chacune des activités et faire le total des heures ?

Je ne suis pas sur d'y arriver mais je cherche

P.

edit: voilà, mais je suis au bout de mes possibilités et ..c'est le week end

80sellig-xlp.xlsm (81.77 Ko)

bonsoir,

oui c'est exactement cela : total heure par activités, par jour, par utilisateur et en bonus le total heure par journée pour un utilisateur.

c'est pour cela qu'il me semble que seul VBA peut résoudre ce casse-tête

en langage naturel, cela pourrait donner cela :

lecture du tableau (trié par utilisateur et par jour), dès qu'un sous total est détecté (sous total dès qu'il y a changement d'activité) :

  • comptage du nombre d’occurrence d'activité
  • si nombre supérieur à 1 : heure max - heure min = temps pour une activité et écriture dans la ligne du sous total
  • si nombre = 1 : heure (du sous total = 1)- heure max du précédent sous total = temps pour une activité et écriture dans la ligne du sous total
et ainsi de suite jusqu’à la fin du tableau.

Peut-être que je me trompe de voie et qu'il y a un moyen plus simple mais je ne vois par lequel.

en tout cas, merci pour votre aide.

bonne soirée.

Je viens d'attacher mon résultat juste avant ou après que tu mettes un commentaire...

Mais là, c'est stop

Bye

P.

merci et excellent week-end

Re,

Pourrais-tu m'expliquer une chose ?

Entre le début et la fin de la journée, nous avons 06:41:51. Ton calcul d'activité affiche 06:13:34. Que fait-on des 00:28:17 ?

Cdlt.

snip 20160408225807

bonjour,

cet écart vient du fait que lorsqu'il change d'activité, il doit prendre les nouvelles consignes. Il y a aussi quelques petites pauses......

C'est pourquoi je souhaiterais avoir ce temps en fonction de chaque activité afin de pouvoir comparer.

bonne journée

bonjour,

j'ai un peu avancé sur le code vba, mais la je bloque sur le calcul de l'intervalle (incompatibilité de type).

ma variable maxh récupère bien l'heure max dès qu'il y a un changement d'activité et idem pour minh pour l'heure minimum.

Je n'arrive pas à affecter le calcul de maxh - minh à intervalle

Sub Macro1()

Dim FL1 As Worksheet, Cell As Range, NoCol1 As Integer, NoCol2 As Long
Dim DerLig As Long, Plage As Range
'Les données récupérées
Dim Var1, adres, str As String, NoLig As Long, NoCol As Integer, maxh, minh, intervalle As String
    'Instance de la feuille : Permet d'utiliser FL1 partout dans ...
    '... le code à la place de Worksheets("Feuil2")
    Set FL1 = Worksheets("Feuil1")

    'Fixe le N° de première colonne de la plage à lire
    NoCol1 = 19

    'Fixe le N° de la dernière colonne de la plage à lire
    NoCol2 = 19

    'Détermine la dernière ligne renseignée de la feuille de calculs
    DerLig = Split(FL1.UsedRange.Address, "$")(4)

    'où FL1.Range(FL1.Cells(1, NoCol1), FL1.Cells(Derlig, NoCol2)) détermine
    'la plage de cellules à lire

    With FL1
        Set Plage = .Range(FL1.Cells(1, NoCol1), FL1.Cells(DerLig, NoCol2))
        'Utilisation de l'objet range (Cell) dans une boucle For Each... Next
        For Each Cell In Plage

            'Valeur de la cellule lue
            Var1 = Cell.Value

            '*** Récupération de l'adresse de la cellule lue ***
            'Adresse complète
            adres = Cell.Address
            'Numéro de ligne
            NoLig = Cell.Row
            'Numéro de colonne
            NoCol = Cell.Column

            'Pour tester : Affiche les variables dans la fenêtre Exécution de VBA
            Debug.Print adres & " " & NoLig & " " & NoCol & " "

            Debug.Print Var1

 str = TypeName(Var1)
If str = "Double" And str <> "Empty" And Var1 > 1 Then

            maxh = Format(Cell.Offset(-1, -1), "hh:mm")
            minh = Format(Cell.Offset(-Var1, -1), "hh:mm")

            Debug.Print maxh & " " & minh

        End If
        Next
    End With
    Set FL1 = Nothing
    Set Plage = Nothing

End Sub

merci pour votre aide

bonne journée

re,

coup d'oeil rapide mais il m'étonnerait très fort que tu obtiennes l'heures min et max en scannant la colonne "S" ...

P.

bonjour,

toutes mes excuses, mais j'ai fait cela avant de partir au boulot, et j'ai oublié de joindre le fichier.

En fait j'ai déplacé la colonne des heures juste avant la colonne S !!!

10test.xlsm (56.22 Ko)

en exécutant le pas à pas détaillée, maxh et minh prennent bien les valeurs adéquat, mais je n'arrive pas à calculer ce fameux intervalle.

Je suis bien conscient que la méthode est pas très conventionnelle, mais j'ai fait au mieux avec mes faibles connaissances en VBA.

j'ai laissé en commentaires dans le code les différentes tentatives pour calculer l'intervalle mais à chaque fois, j'ai une incompatibilité

Avec encore toutes mes excuses, merci pour votre aide.

bonne journée

sellig a écrit :

bonjour,

toutes mes excuses, mais j'ai fait cela avant de partir au boulot, et j'ai oublié de joindre le fichier.

En fait j'ai déplacé la colonne des heures juste avant la colonne S !!!

en exécutant le pas à pas détaillée, maxh et minh prennent bien les valeurs adéquat, mais je n'arrive pas à calculer ce fameux intervalle.

Je suis bien conscient que la méthode est pas très conventionnelle, mais j'ai fait au mieux avec mes faibles connaissances en VBA.

j'ai laissé en commentaires dans le code les différentes tentatives pour calculer l'intervalle mais à chaque fois, j'ai une incompatibilité

Avec encore toutes mes excuses, merci pour votre aide.

bonne journée

Bonjour,

en exécutant ton code au pas à pas, je n'ai jamais eu le maxh et le minh...

as-tu essayé le code que j'avais fais sur un post précédant , j'arrive aux même totaux que Jean Eric et ça n'a pas l'air de te convenir,...

Le code que tu as mis ici n'est pas correct et je peux t'assurer que de travailler avec les dictionnaires (pas faciles à maitriser- je patauge encore bcp ) est une solution plus adaptée sur un grand nombre de lignes.

Dans le post du "08 Avr 2016, 11:47" il a fait des totaux sur la colonne de droite (14:25:28) et il compte le nombre d'activités, mais les totaux sont les mêmes.

bonjour,

dans vos essais, l'utilisateur test, le 04/01, a réalisé 6h41 de reappro, 5h24 d'encasage et 2H19 de transfert soit plus de 14H de travail.

Or je devrais obtenir 4H20 de reaprro, 1h50 d'encasage et 3 min de transfert soit 6H13 de travail (pour une journée de 7H)

il faudrait pouvoir obtenir l'intervalle entre chaque activité (par jour et par utilisateur), sachant qu'un utilisateur peut faire pendant 20min du reappro, puis 10 minutes d'encasage, puis repartir sur du reappro pendant 2 heures......sur une durée de 7H journalière.

Je reconnais que votre code dans le post du 08 avril 19:29 est top mais cela donne des résultats qui ne correspondent pas à la réalité.

En ce qui concerne mon code, je sais qu'il est pas correct (et encore moins conventionnel), mais j'ai fait avec le peu de compétences que j'ai en VBA. dans le fichier joint, après exécution du code (dans la colonne R), j'obtiens 23 mn de reappro, 10 mn d'encasage etc...

8test.xlsm (57.19 Ko)

merci de l'intérêt que vous portez à mon cas, et merci à patrick1957 pour ce code qui vous a surement demandé de très gros effort.

en attendant de vous relire, je vous souhaite une très bonne journée

Bonjour,

2 ou 3 remarques:

  • il manque un titre à la colonne 1, ça peut toujours servir et il faut en mettre un !
  • il ne faut pas 2 titres identiques sur ces colonnes
  • le test de "str" = "double" ne sert à rien puisque la colonne "S" est toujours du string !
  • je te comprends pas comment tu fais , avec ce code pour totaliser , la colonne "R" puisque le maxh ne se fait que si c'est justement <> de "string" ...
  • tu parles de l'utilisateur "test" , toutes les lignes comportent "test" !
  • comment obtiens-tu 4h20 de réappro et 1h50 d'encasage ? tu sais expliquer ? et comment ensuite obtiens-tu 23mn et 10 mn ?

Je pense que nous n'avons pas toutes des données en main pour t'aider (moi ou un autre) mais, comme tu le dis, mon code fonctionne, mais suivant les infos que tu as donné

Comme tu dis, j'ai fais des efforts, les dico je maitrise mal, mais les totaux sont bons, le problème m'intéresse et si une autre personne donne la solution, je le lirai avec plaisir

P.

A suivre

bonjour,

  • titre colonne 1 ajouté
  • titre différent sur chaque colonne
  • j'utilise le code une fois que le tableau est trié par date et utilisateur, et qu'il me totalise le nombred'activité à chaque changement d'activité. str, à un moment donné est un nombre. il remplit donc l'une des conditions suivant sa valeur.
  • ensuite je récupère les valeurs de la colonne R :
var1 = 6

je récupère la valeur de la ligne -1 et de la colonne - 1 soit 13h37 (maxh)

je récupère la valeur de la ligne -var1 (soit -6) et de la colonne -1 soit 13h14 (minh)

et ensuite calcul de intervalle.

après il faut totaliser les minutes par activité, par jour et par utilisateur.

- j'ai remplacé le nom de l'utilisateur par test car je préfère ne pas divulguer de nom ("respect de la vie privée").

Je suis bien conscient que cette demande est très spécifique et que cela vous a demandé de très gros effort. Comme vous l'avez dit, mon code n'est pas correct et encore moins conventionnel (contrairement au votre qui est très propre), mais je ne voulais pas vous laissez faire tout le boulot.

je suis déçu de ne pas avoir réussi à faire comprendre ma demande, et vous remercie d'avoir pris du temps et de l'énergie pour m'aider.

j'espère pouvoir relire des messages sur ce sujet.

bonne journée

re,

je pense que tu pouvais mettre des noms "bidons" à la place de "test", car on ne sait pas comme ça à quel moment il faut arrêter les totaux puisque ici tout est au nom de "test"...

quand commence l'activité de la personne1 ? et quand fini-t-elle dans une même journée ? et donc quand commence la première activité de la seconde personne , ce sont des infos qui manquent

P.

Rechercher des sujets similaires à "calcul productivite"