[Résolu] calcul de productivité

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'043
Appréciations reçues : 615
Inscrit le : 27 août 2012
Version d'Excel : 365 Insider

Message par Jean-Eric » 8 avril 2016, 23:09

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.png
snip_20160408225807.png (12.65 Kio) Vu 303 fois
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
s
sellig
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 7 avril 2016
Version d'Excel : 2007 FR

Message par sellig » 9 avril 2016, 07:45

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
s
sellig
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 7 avril 2016
Version d'Excel : 2007 FR

Message par sellig » 11 avril 2016, 08:28

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
p
patrick1957
Passionné d'Excel
Passionné d'Excel
Messages : 3'157
Appréciations reçues : 31
Inscrit le : 24 août 2015
Version d'Excel : 2007-2010-2016 PC

Message par patrick1957 » 11 avril 2016, 16:01

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.
Je fais du géocaching et vous ?
Indentez vos codes VBA, ---> http://www.oaltd.co.uk/Indenter/Default.htm
A lire pour les débutants: http://www.xlerateur.com/divers/2010/05 ... nnees-612/
s
sellig
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 7 avril 2016
Version d'Excel : 2007 FR

Message par sellig » 12 avril 2016, 08:02

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 !!! :roll:
test.xlsm
(56.22 Kio) Téléchargé 10 fois
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
p
patrick1957
Passionné d'Excel
Passionné d'Excel
Messages : 3'157
Appréciations reçues : 31
Inscrit le : 24 août 2015
Version d'Excel : 2007-2010-2016 PC

Message par patrick1957 » 12 avril 2016, 14:52

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 !!! :roll:
test.xlsm
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... :cry:

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.
Je fais du géocaching et vous ?
Indentez vos codes VBA, ---> http://www.oaltd.co.uk/Indenter/Default.htm
A lire pour les débutants: http://www.xlerateur.com/divers/2010/05 ... nnees-612/
s
sellig
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 7 avril 2016
Version d'Excel : 2007 FR

Message par sellig » 13 avril 2016, 09:03

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...
test.xlsm
(57.19 Kio) Téléchargé 8 fois
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
p
patrick1957
Passionné d'Excel
Passionné d'Excel
Messages : 3'157
Appréciations reçues : 31
Inscrit le : 24 août 2015
Version d'Excel : 2007-2010-2016 PC

Message par patrick1957 » 13 avril 2016, 14:24

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" ... ::B.
- 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 :)
Je fais du géocaching et vous ?
Indentez vos codes VBA, ---> http://www.oaltd.co.uk/Indenter/Default.htm
A lire pour les débutants: http://www.xlerateur.com/divers/2010/05 ... nnees-612/
s
sellig
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 7 avril 2016
Version d'Excel : 2007 FR

Message par sellig » 14 avril 2016, 08:48

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
p
patrick1957
Passionné d'Excel
Passionné d'Excel
Messages : 3'157
Appréciations reçues : 31
Inscrit le : 24 août 2015
Version d'Excel : 2007-2010-2016 PC

Message par patrick1957 » 14 avril 2016, 15:14

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.
Je fais du géocaching et vous ?
Indentez vos codes VBA, ---> http://www.oaltd.co.uk/Indenter/Default.htm
A lire pour les débutants: http://www.xlerateur.com/divers/2010/05 ... nnees-612/
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message