Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Julie25

XLDnaute Nouveau
Bonjour;
J'ai un extract qui m'est envoyé de façon quotidienne avec des données brutes;
J'ai donc pour un ticket le nombre d'aller et retour qu'un ticket a fait avec comme:

-Première colonne (1 sur l'image en PJ) l'identifiant des tickets.
-Troisième colonne (2 sur l'image en PJ) la date et l'heure de chacune des actions
sur le ticket.
-Et enfin en quatrième colonne (3 sur l'image en PJ) une colonne vide qui servira à
mettre la durée de traitement totale pour un ticket.

J'aimerai avoir une macro qui dès que le numéro de ticket (colonne 1) change de valeur, la valeur de la colonne 2 (sur l'image en PJ) est sauvée. Elle continue de parcourir la colonne 1 jusqu'à se que la valeur change puis on effectue la soustraction entre la valeur sauvée et celle de la colonne 2 à la ligne i-1.
On reporte le résultat de la soustraction sur la colonne 3 (sur l'image en PJ) à la ligne i-1.
On sauve la valeur de la colonne 2 (sur l'image en PJ) à la ligne i.
On continue ce manège jusqu'à se que la valeur de la colonne 2 (sur l'image en PJ) soit nulle.

Une fois fini, on efface toutes les lignes qui n'ont pas de valeur dans la colonne 3 (sur l'image en PJ).


Merci beaucoup si vous pouvez m'aider.
Cordialement;
Julie.
 

Pièces jointes

  • ExtractBO.xls
    53.5 KB · Affichages: 86
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Bonjour Julie, bienvenue dans ce monde de brutes :)

Premier constat: l'image ne permet pas une vision claire de ton fichier.
Second constat: toute personne désireuse de t'aider devrait commencer par reconstituer le fichier (pour tester la proposition) ou proposer "à l'aveugle" (ou au myope, à tout le moins)
Troisième constat: tu sembles avoir déjà réfléchi à une logique pour la programmation.

Et si tu nous adressais un exemple de fichier Excel avec, pourquoi pas, déjà un petit bout de code que tu aurais testé. Qu'il ne soit pas fonctionnel ou que tu ne sois pas disposée à le présenter dans une exposition ne doivent pas t'empêcher de "préparer le travail"
 

Julie25

XLDnaute Nouveau
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Bonjour;
J'ai modifié le post et la PJ.
J'ai effectivement réfléchie à une solution mais je ne sais pas bien coder en VBA, seulement en C, j'ai bien sur essayé de coder mais sans succès. Je ne connais pas assez bien le langage.

Merci pour ta réponse en tout cas,

Cdlt
Julie.
 

Julie25

XLDnaute Nouveau
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Voila mon premier essai. J'ai une erreur à

Temps = Range("C" & i - 1) - Date1.

J'imagine qu'on ne peut attribuer une valeur comme ca à une cellule?
Je vous l'avais dit, je suis nulle en VBA. :S

Je regarde le site du zéro mais je n'arrive pas à trouver, je vais chercher sur le site.

Code:
Sub Macro2()
    Dim ID As String
    ID = Range("A3")
    Dim x As Byte
    x = 2
    Dim Date1 As String
    Date1 = Range("C3")
    Dim Temps As Byte
    
    
    For i = 3 To 36000

        'If ID = "" Then
        'Exit For
        
        If Range("A" & i) <> ID Then
            Range("C" & i - 1).Select
            Selection.Copy
    
            Range("D" & i - 1).Select
            ActiveSheet.Paste
            Range("D" & i - 1).Select
        
            Temps = Range("C" & i - 1) - Date1
            Range("D" & i - 1) = Temps
            ID = Range("A" & i)
            x = x + 1
            
            Date1 = Range("C" & i)
        End If
        
    Next i
MsgBox i
End Sub
 
Dernière édition:

Julie25

XLDnaute Nouveau
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Nouveau programme, enfin si on peut appeler ca comme ca lol.
J'ai essayé au moins... :)


Code:
Sub Macro2()
    Dim ID_Cas As String
    ID_Cas = Range("A3")
    Date1 = Range("C3")
    
    
    For i = 3 To 8

        'If ID = "" Then
        'Exit For
        
        If Range("A" & i) <> ID Then
           Range("C" & i - 1).Select
           Selection.Copy
           Range("D" & i - 1).Select
           ActiveSheet.Paste
        
           Date2 = Range("C" & i - 1)
           Range("A1") = Date2
           Range("B1") = Date1
            
           Range("C1").Select
           Application.CutCopyMode = False
           ActiveCell.Formula = "=A1-B1"

            
           Range("D" & i - 1) = Range("C1")
           ID = Range("A" & i)
            
           Date1 = Range("C" & i)
        End If
        
    Next i
MsgBox i
End Sub
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Re-bonjour,

Je suis repassé à tout hasard et constate avec plaisir que tu t'es jetée à l'eau ... Bravo! (avec des connaissances en C, la logique devrait y être :rolleyes:)
Pas le temps maintenant (désolé), mais dans le fichier déposé, ta colonne C est vide, alors que dans ton code, tu copies le contenu de celle-ci, pour le coller en colonne D!? Soit quelque chose m'échappe, soit le code que tu nous livres n'est pas adapté au fichier. En prenant plus de temps, j'arriverais peut-être à comprendre, mais là, j'en manque cruellement!

Je repasserai tout à l'heure, mais si, d'ici là, quelqu'un prend le relais, je n'en prendrai pas ombrage (si la question se posait :D) ... Et Julie non plus, j'imagine!
 

Modeste

XLDnaute Barbatruc
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Re-bonjour et bonsoir,

Un essai en pièce jointe. J'ai tâché de simplifier un peu ton code, ai ajouté un ou 2 commentaires et peux en ajouter si besoin ... teste toujours pour voir si c'est ok ... je vais courir pendant ce temps-là :p

Edit: modification du fichier pour prise en compte des durées supérieures à 24 heures
 

Pièces jointes

  • ExtractBO (Julie25).xls
    46.5 KB · Affichages: 84
Dernière édition:

Julie25

XLDnaute Nouveau
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Bonjour! :)
Merci bcp pour ces modifications du code.
Je n'ai pas pu regarder avant.
Il me reste à effacer toutes les valeurs nulles, sinon c'est génial et beaucoup beaucoup plus pro que ma macro hehe.
 

Julie25

XLDnaute Nouveau
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Et voila! :)
Code:
Sub Macro2()
    Dim ID_Cas As String
    ID_Cas = Range("A3").Value
    Date1 = Range("C3").Value
    
    
    For i = 4 To Sheets("Rapport1").Range("A" & Application.Rows.Count).End(xlUp).Row + 1
        If Range("A" & i) <> ID_Cas Then
            Date2 = Range("C" & i - 1)
            Range("D" & i - 1) = Date2 - Date1
            Range("D" & i - 1).NumberFormat = "[h]:mm:ss"
            ID_Cas = Range("A" & i)
            Date1 = Range("C" & i)
            
        End If
    Next i
    
    Dim a As Long
    Dim b As Long

    a = Range("D65536").End(xlUp).Row

    For b = a To 1 Step -1
        'A faire via une macro est le mot que mon extract me donne.
        If Cells(b, 4).Value = "A faire via une macro" Then
        Rows(b).Delete
    End If
    Next b


    
End Sub

Merci encore Modeste!
 

Modeste

XLDnaute Barbatruc
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Bonjour Julie25,

Ravi donc, que tu sois ravie ... ceci dit, un seul "Like" suffisait amplement ;)
Pour ton code, une fois arrivée en fin de première boucle, la variable i peut être réutilisée pour tes suppressions. Tu peux donc supprimer ta variable a et écrire
Code:
For b = i To 1 Step -1
(voire même i-1 puisque cette variable avait été incrémentée en fin de première boucle)

@+
 

Julie25

XLDnaute Nouveau
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Effectivement, on voit tout de suite le pro... :)

Et maintenant, j'aurais besoin d'avoir les résultats en jours ouvrés et là forcement je cale...

Je connais bien la fonction NB.JOURS.OUVRES mais aucune idée de comment l'implanter...
 

Modeste

XLDnaute Barbatruc
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Re-bonjour,

Si tu connais la fonction, tu peux utiliser
Code:
res = Application.WorksheetFunction.NetworkDays(Date1, Date2)
... dans la boucle, dès que Date2 est "garnie" ... reste à voir ce que tu veux en faire?

Edit: comme pour la fonction, ne pas oublier les fériés, le cas échéant
 

Julie25

XLDnaute Nouveau
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

J'aurais aimé que lorsqu'on prend la différence entre
le 06/05/2011 12:00
et le 10/05/2011 12:00
le résultat qui en sorte donne 48:00:00 et non pas 96:00:00.

Et donc que le temps passé entre le samedi 00:00 jusqu'au lundi 00:00 soit omis dans la soustraction.

Je ne sais pas comment rentré la fonction que tu m'a donné dans la macro. C'est une fonction qui prend directement le nombre de jours ouvrés entre 2 dates?
 

Modeste

XLDnaute Barbatruc
Re : Calcul de durée de traitement en utilisant les allers-retours d'un ticket.

Bonsoir,

Pour autant que je puisse en juger (et en espérant que je ne sois pas "à côté de la plaque"), la proposition suivante pourrait répondre à ta demande. J'ai mis en commentaire une portion de code qui devrait fonctionner sous Excel 2003. Comme je ne dispose ici que d'Excel 2000, il y a une autre portion de code qui est propre à ce bon vieux 2000.
... à tester donc soigneusement :p

VB:
Sub Macro2()
    Dim ID_Cas As String
    ID_Cas = Range("A3").Value
    Date1 = Range("C3").Value
    
    For i = 4 To Sheets("Rapport1").Range("A" & Application.Rows.Count).End(xlUp).Row + 1
        If Range("A" & i) <> ID_Cas Then
            Date2 = Range("C" & i - 1)
            ' *** à tester sous 2003
            'res = Application.WorksheetFunction.networkdays(Date1, Date2) - 1
            'Range("D" & i - 1) = Date2 - Date1 - res
            ' **********************
            
            ' *** sous XL 2000
            ' traitement jours ouvrés
            we = 0
            j = 0
            Do While Int(Date1) + j < Int(Date2)
                If Weekday(Date1 + j, 2) >= 6 Then we = we + 1
                j = j + 1
            Loop
            Range("D" & i - 1) = Date2 - Date1 - we
            ' **********************
            
            Range("D" & i - 1).NumberFormat = "[h]:mm:ss"
            ID_Cas = Range("A" & i)
            Date1 = Range("C" & i)
            
        End If
    Next i

    For b = i - 1 To 1 Step -1
        'A faire via une macro est le mot que mon extract me donne.
        If Cells(b, 4).Value = "A faire via une macro" Then
        Rows(b).Delete
    End If
    Next b

End Sub

Resteront encore les fériés à traiter ... si ce qui précède est ok!?
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 453
Messages
2 088 550
Membres
103 881
dernier inscrit
malbousquet