Croisement sommeprod / max / index equiv?

Bonjour à tous,

Petit problème qui ne trouve pas de solution et qui se résume en une question. En consultant le fichier joint, comment savoir quel agent a les meilleurs résultats ce mois ci. La réponse à la formule devant être "AGENT 4" car la somme des résultats des deux jours travaillés en septembre (mois actuel) 8.

Si compliqué que ça?

Merci par avance!

48classeur1.xlsx (8.47 Ko)

Bonsoir..

Voir PJ

@ + +

85relien33.xlsx (10.45 Ko)

Bonsoir Rachid,

Merci pour la rapidité de la réponse. Est-il obligatoire de passer par une colonne intermédiaire ou existe t'il une façon de tout synthétiser en seule formule?

Cordialement

Bonsoir...

Relien33 a écrit :

Bonsoir Rachid,

Merci pour la rapidité de la réponse. Est-il obligatoire de passer par une colonne intermédiaire ou existe t'il une façon de tout synthétiser en seule formule?

Cordialement

Peut-être en VBA...

@ + +

Rachid,

Merci pour le conseil, je vais voir ce que je peux faire dans ce sens.

Bonne soirée

Bonjour,

Une solution avec VBA

42relien33.xlsm (19.90 Ko)

A+

Bonjour,

Une proposition alambiquée à reproduire

Cdlt

49classeur1-1.xlsx (12.42 Ko)

Bonjour,

Une piste...

32jb-relien33.xlsx (12.65 Ko)

Bonsoir à vous,

Merci pour vos réponses. J'ai adapté celle de Frangy afin que le résultat apparaisse dans une case. Je vais maintenant compléter le code pour avoir le meilleur agent de la semaine actuelle et le meilleur agent du jour mais je sèche une nouvelle fois.

Lorsque NumAn = Year(date) NumSem ne peut pas être Week(date)?

Cordialement

40relien33.xlsm (22.35 Ko)

Bonjour Relien33,

A tester

62relien33-2.xlsm (21.72 Ko)

A+

Bonsoir Frangy,

C'est parfait merci beaucoup!

Cordialement

Bonjour le forum

Je me permets de relancer ce post car mes besoins ont évolué. Frangy m'a trouvé une solution pour dégager le meilleur agent d'un mois. J'ai adapté son code de manière à avoir le meilleur agent de la semaine en cours et le meilleur du jour.

Ma nouvelle demande est la suivante.

Comment faire pour déterminer l'agent qui a le plus progressé entre S-2 et S-1?Et celui qui a le plus chuté?

Vous trouverez un fichier joint qui illustre le problème.

J'ai cherché j'ai point trouvé :s

Merci par avance!

Cordialement

16relien33-2.xlsm (23.56 Ko)

Bonsoir,

Savez vous s'il faut toujours passer par un code de type: CreateObject("Scripting.dictionary") ? J'ai essayé de décortiquer le code de Frangy pour le comprendre en vain...

Bonjour,

Comment faire pour déterminer l'agent qui a le plus progressé entre S-2 et S-1? Et celui qui a le plus chuté?

Dans la proposition jointe, les résultats de S-1 et S-2 sont notés en feuille 2, ce qui permet de visualiser la progression.

Les maxi et mini sont mis en évidence avec une mise en forme conditionnelle.

Savez vous s'il faut toujours passer par un code de type: CreateObject("Scripting.dictionary") ?

Le dictionnaire permet d'une part d'établir la liste des agents (liste sans doublon) et d'autre part d'effectuer le cumul des résultats par agent.

Si l'agent n'existe pas dans la liste, on le crée et on note le résultat.

Si l'agent existe dans la liste, on cumule le résultat.

17relien33.xlsm (30.06 Ko)

A+

Bonjour,

Merci Frangy pour la réponse. Pour être un peu plus précis et reprendre la méthode trouvée dernièrement est-il possible, sans passer par un tableau intermédiaire, de mettre dans la case prévue le nom de l'agent qui a le plus progressé avec entre parenthèses l'évolution ("AGENT (+8)") et faire pareil pour celui qui a le plus chuté?

Cordialement

15relien33.xlsm (31.42 Ko)

A tester

20relien33-bis.xlsm (28.71 Ko)

A+

Bonsoir,

Le code me donne un erreur "variable non définie" au niveau de S_Max sur excel 2013 mais pas sur le 2007

Sub S2_S1()
Dim NumAn As String
Dim N As Integer, NumS1 As Integer, NumS2 As Integer
Dim Dico, k, i, Tablo()
Dim C As Range
Dim R_Max As Double, R_Min As Double
Dim A_Max As String, A_Min As String
    Set Dico = CreateObject("Scripting.dictionary")
    NumAn = Year(Date)
    NumS1 = DatePart("ww", Date, vbMonday, vbFirstFourDays) - 1
    NumS2 = DatePart("ww", Date, vbMonday, vbFirstFourDays) - 2
    With ThisWorkbook.Worksheets("Feuil1")
        For Each C In .Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row)
            If _
            (DatePart("ww", C.Offset(0, -1).Value, vbMonday, vbFirstFourDays) = NumS1 Or _
            DatePart("ww", C.Offset(0, -1).Value, vbMonday, vbFirstFourDays) = NumS2) And _
            Year(C.Offset(0, -1).Value) = NumAn Then
                If Not Dico.Exists(C.Value) Then
                    Dico.Add C.Value, C.Value
                    N = N + 1
                    ReDim Preserve Tablo(1 To 3, 1 To N)
                    Tablo(1, N) = C.Value
                    If DatePart("ww", C.Offset(0, -1).Value, vbMonday, vbFirstFourDays) = NumS1 Then
                        Tablo(2, N) = C.Offset(0, 1) 'Résultat S-1
                    ElseIf DatePart("ww", C.Offset(0, -1).Value, vbMonday, vbFirstFourDays) = NumS2 Then
                        Tablo(3, N) = C.Offset(0, 1) 'Résultat S-2
                    End If
                Else
                    For i = 1 To UBound(Tablo, 2)
                        If Tablo(1, i) = C.Value Then
                            If DatePart("ww", C.Offset(0, -1).Value, vbMonday, vbFirstFourDays) = NumS1 Then
                                Tablo(2, i) = Tablo(2, i) + C.Offset(0, 1) 'Résultat S-1
                            ElseIf DatePart("ww", C.Offset(0, -1).Value, vbMonday, vbFirstFourDays) = NumS2 Then
                                Tablo(3, i) = Tablo(3, i) + C.Offset(0, 1) 'Résultat S-2
                            End If
                        End If
                    Next i
                End If
            End If
        Next C
        R_Max = 0
        R_Min = 9 ^ 9
        For i = 1 To UBound(Tablo, 2)
            If Tablo(2, i) - Tablo(3, i) > R_Max Then
                R_Max = Tablo(2, i) - Tablo(3, i)
                A_Max = Tablo(1, i)
            End If
            If Tablo(2, i) - Tablo(3, i) < R_Min Then
                R_Min = Tablo(2, i) - Tablo(3, i)
                A_Min = Tablo(1, i)
            End If
        Next i
        If R_Max > 0 Then S_Max = "+ "
        If R_Min > 0 Then S_Min = "+ "
        .Range("E14") = A_Max & " ( " & S_Max & R_Max & " )"
        .Range("E17") = A_Min & " ( " & S_Min & R_Min & " )"
    End With
End Sub

Rajoute les 2 variables S_Max et S_Min dans la partie déclaraiton

Dim A_Max As String, A_Min As String, S_Max As String, S_Min As String

A+

Re,

J'ai rétabli les variables mais les valeurs ne sont pas correctes. Je pense que l'erreur vient du fait que l'ordre des dates n'est pas conforme. Les valeurs seront toujours présentées ainsi, jour par jour, parce que les données s'incrémentent au fur et a mesure des journées de travail.

exemple:

20/11/2013 AGENT 1

20/11/2013 AGENT 2

21/11/2013 AGENT 1

21/11/2013 AGENT 2

22/11/2013 AGENT 1

22/11/2013 AGENT 2

23/11/2013 AGENT 1

23/11/2013 AGENT 2

24/11/2013 AGENT 1

24/11/2013 AGENT 2

L'erreur vient-elle de là?

Cordialement (et désolé pour toutes ces demandes)

17relien33-bis.xlsm (28.54 Ko)

Pourquoi dis-tu que les valeurs ne sont pas correctes ?

Je trouve une progression de +3 pour les 2 agents.

A+

Rechercher des sujets similaires à "croisement sommeprod max index equiv"