Rechercher date et heure appels SUIVANT

Bonjour à tous et merci pour votre accueil ;)

Je me présente, Auré, 40 ans, assistante de gestion et chargée (entre autre) des stats d'appels du service.

En réception d'appels, duand nous sommes tous en ligne, au bout de 3 minutes, l'appel est raccroché.

Je dispose donc

1er onglet : liste d'appel non aboutis 5 à 6 000 par an environ (date heure et numéro)

2eme onglet : liste d'appel décrochés 70 à 80 000 (date heure et numéro).

Mon objectif : à partir du numéro de téléphone, pour chaque appel non abouti, retrouver la date et heure à laquelle l'appel a été décroché

(ensuite je rajouterai 1 ou 2 formule pour calculer le délai de réponse (pour NF l'appel est conforme si on a décroché le jour même ou l'appel n'a pas abouti ou le lendemain pour les We et Jours fériés).

En sachant :

un même numéro peut être raccrochée 2 ou 3 fois de suite avant d'être décroché

un même numéro peut apparaître comme décroché plus d'une centaine de fois dans l'année.

Un numéro peut être raccroché et ne jamais rappeler

En gros si j'ai

Onglet 2 : Appel décroché du numero A à 17h12 et 18h15 le 4 janvier

Onglet 1 : appels non aboutis 10h03 et 14h52 le 4/1 => faire correspondre le plus proche soit 17h12 le 4 janvier pour les 2 lignes

Et dans le cas ou il n'y aurais aucun appels décrochés correspondant faire en sorte que la case soit vide ou noté faux peut importe.

On m'avait donner une astuce qui avait l'air de fonctionner mais au moment de vérifier aléatoirement la fiabilité, certains appels non abouti étaient noté avec aucun rappel alors qu'il y avait bien le même numéro de téléphone dans la liste des appels décrochés ... pourquoi certains passaient à la trappe ... Mystère

Or, au vu du volume d'appel, j'ai besoin d'être sure de la fiabilité des recherches parce que rechercher manuellement 5000 appels ca prends E-NOR-ME-MENT de temps.

Bien évidemment, je vous joint un fichier (j'ai limité aux premiers mois de l'année pour que le fichier ne soit pas trop volumineux) pour visualiser plus facilement et d'avance un grand merci à celui ou celle qui pourra m'aider à trouver la formule adaptée (je préfère préciser que je suis très très novice en macro).

Bonne soirée et à bientôt pour vous lire

bonjour Auré_keolis

un essai

Mystère = vos numéros sont de temps en temps des valeurs numériques, sinon, des strings.

re,

version plus rapide

Merci mais ce n'est pas exactement ce dont j'ai besoin.

En gros j'ai ma liste d'appel décroché en onglet 1 et celle non abouti en onglet 2

Il faudrait que sur l'onglet 2, pour chaque ligne Excel m'indique quel jour + heure on a décroché (en recherchant dans l'onglet 1)

02/01/202410:34:22952659670mar 02/01/24 10:34:22formule à trouver
02/01/202410:46:04649388363mar 02/01/24 10:46:04formule à trouver
02/01/202413:06:07648490642mar 02/01/24 13:06:07formule à trouver
02/01/202413:46:55256512326mar 02/01/24 13:46:55formule à trouver
02/01/202413:49:13651246164mar 02/01/24 13:49:13formule à trouver

Merci à ceux qui aurait la solution ;)

vous avez la même chose avec la macro, non ?

Bonjour à tous,

Une autre proposition par formule (Microsoft 365 que vous semblez avoir ?) selon ma compréhension.

Geniçal, je m'empresse de tester :)

Je reviens vous dire si c'est ok

Merciiiiii

Bonjour les amis,

Pour cerner la difficulté, j'ai créé une jointure via une macro qui ne répond certainement pas à la question mais peut aider à la compréhension et résolution de la problématique.

Voir le résultat sous forme d'images ci-dessous après exécution de la macro.

Option Explicit
Sub Jointure()
    Dim a, e, i As Long, ii As Long, w, t As Long, n As Long, txt As String, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    For Each e In Array("Appels_non_aboutis", "Appels_entrants_decroches")
        a = Sheets(e).Cells(1).CurrentRegion.Value2
        For i = 2 To UBound(a, 1)
            'txt = Join$(Array(a(i, 1), a(i, 3)), "|")
            txt = a(i, 3)
            If Not dico.exists(txt) Then
                ReDim w(1 To UBound(a, 2) * 2 + 4, 1 To 1)
            Else
                w = dico(txt)
            End If
            t = w(UBound(w, 1) - IIf(e = "Appels_non_aboutis", 1, 0), 1) + 1
            If UBound(w, 2) < t Then ReDim Preserve w(1 To UBound(w, 1), 1 To t)
            For ii = 1 To UBound(a, 2)
                w(ii + IIf(e = "Appels_non_aboutis", 0, 5), t) = a(i, ii)
            Next
            If e = "Appels_non_aboutis" Then
                w(4, t) = i
            Else
                w(5, t) = i
            End If
            w(UBound(w, 1) - IIf(e = "Appels_non_aboutis", 1, 0), 1) = t
            dico(txt) = w
        Next
    Next
    Application.ScreenUpdating = False
    If Not Evaluate("isref('Jointure'!a1)") Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Jointure"
    With Sheets("Jointure")
        .Cells(1).CurrentRegion.Clear
        .Cells(4).Resize(, 2).Interior.ColorIndex = 44
        .Cells(1).Resize(, 3).Interior.ColorIndex = 43
        .Cells(6).Resize(, 3).Interior.ColorIndex = 45
        With .Cells(1).Resize(1, 10)
            .BorderAround Weight:=xlThin
            .Value = _
            Array("Date", "Heure", "Appels non aboutis", "N° ligne appels non aboutis", "N° ligne appels décrochés", _
                  "Date", "Heure", "Appels entrants décrochés", "Nbre non Aboutis", "Nbre décrochés")
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = True
        End With
        n = 2
        For Each e In dico
            With .Rows(n).Resize(UBound(dico(e), 2), UBound(dico(e), 1))
                .Value = Application.Transpose(dico(e))
                .BorderAround Weight:=xlThin
            End With
            n = n + UBound(dico(e), 2)
        Next
        With .Cells(1).CurrentRegion
            .Columns(1).NumberFormatLocal = "jj/mm/aaaa"
            .Columns(2).NumberFormat = "hh:mm:ss"
            .Columns(6).NumberFormatLocal = "jj/mm/aaaa"
            .Columns(7).NumberFormat = "hh:mm:ss"
            .VerticalAlignment = xlCenter
            .Font.Name = "Calibri"
            .Font.Size = 10
            .Borders(xlInsideVertical).Weight = xlThin
            .BorderAround Weight:=xlThin

            .Columns.AutoFit
        End With
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub

Dans les images ci-dessous, différents cas sont représentés (pas tous).

Faut-il, au regard d'un appel non abouti, renvoyer la valeur que j'ai surligné en mauve ?

A savoir la valeur de l'appel décroché (heure) immédiatement supérieure à la valeur (heure) de l'appel non abouti.

appels1 appels2

A tester sur le fichier du post #1, attention j'ai changé le nom des 2 feuilles sources.

Edit : il faut lire "Nbre non aboutis" et non "Nbre aboutis" dans l'en-tête.

klin89

Houlà la version macro j'ai pas tout compris.

Aurais je oublier de préciser que je suis novice en macro ;) .....Mais aussi curieuse donc je vais essayer quand même

Par contre la proposition de BeGood fonctionne très bien à un petit détail près ..

quand il y a deux fois le même numéro qui n'abouti il ne donne pas le même appel décroché, il passe à celui d'après (exemple ici : c'est le même numéro donc il devrait me donner le 02/01 15h50 pour les 2)

02/01/202415:38:1367282945502/01/202415:50:36
02/01/202416:55:2867282945504/01/202411:26:37

Monsieur ou Madame BeGodd :), il y a t il un moyen de corriger cela car à part çà, j'ai projeter sur l'année complète et je n'ai pas vu d'autres dysfonctionnements.

Merci d'avoir pris le temps déjà de m'avoir trouver une solution presque fonctionnelle et si on peut la corriger je suis prête à vous envoyer des chocolats tellement je serai heureuse (pour info je recherchais manuellement chaque numéro depuis très très longtemps)

Bonne soirée

Bonjour à tous,

Je ne vois pas les valeurs

02/01/202416:55:28672829455

dans les données du fichier exemple (peut-être suis-je myope ?)

Mais en, tout état de cause on ne peut pas pour un appel non abouti à 16:55 donner un appel décroché antérieurement à 15:50, donc c'est le suivant le 04/01 à 11:26 (dans vos données)

Fournissez votre jeu de données réel pour y voir plus clair.

Je vais devoir vous embaucher BeGood :)

Je me suis tellement focaliser sur le fait que j'avais des rappels hors délai en raison de doublons d'appels que je n'ai pas vu qu'effectivement il y a bien un appel décroché entre les 2 non aboutis et non après !!!

Je rectifie ce que j'ai dit, le fichier est fonctionnel c'est moi qui bug :) :)

Merci beaucoup et bonne semaine

Bonjour à tous,

Je reviens sur le sujet :

J'ai modifié quelque peu ma macro du post #8 pour procéder à des essais de comparaison manuelle.

Je trouve les mêmes résultats que BeGood, exemple :

Résultat visuel obtenu avec ma macro pour l'appel 299309577

begood1

Superbe formule BeGood , excellent travail

Résultat en colonne E avec la formule :

begood2

Me reste à analyser les fichiers de Bsalv

klin89

re,

il y avait une erreur dans la question au début, donc je me rappèle que ma macro était plutôt une bonne réponse à une mauvaise question ....

Re à tous,

Comme le sujet m'intéressait, j'envoie ma solution en VBA, voir le rendu visuel du résultat dans l'image ci-dessous :

A gauche les appels non aboutis, colonne A et B

Au centre les appels entrants décrochés, colonne E et F

A droite, colonne I, au regard de chaque appel non abouti, l'appel suivant décroché

Les colonnes C et D identifient la ligne où est situé l'appel dans sa feuille respective. (pas indispensable)

Les colonnes G et H dénombrent les différents appels.

appel suivant

Le code :

Option Explicit
Sub Jointure1()
    Dim a, e, i As Long, ii As Long, w, t As Long, n As Long, txt As String, dico As Object
    Dim flag As Boolean, minValue As Double
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    For Each e In Array("Appels_non_aboutis", "Appels_entrants_decroches")
        a = Sheets(e).Cells(1).CurrentRegion.Value2
        For i = 2 To UBound(a, 1)
            'txt = Join$(Array(a(i, 1), a(i, 3)), "|")
            txt = a(i, 3)
            If Not dico.exists(txt) Then
                ReDim w(1 To (UBound(a, 2) - 1) * 2 + 5, 1 To 1)
            Else
                w = dico(txt)
            End If
            t = w(UBound(w, 1) - IIf(e = "Appels_non_aboutis", 2, 1), 1) + 1
            If UBound(w, 2) < t Then ReDim Preserve w(1 To UBound(w, 1), 1 To t)
            w(1 + IIf(e = "Appels_non_aboutis", 0, 4), t) = a(i, 1) + a(i, 2)
            w(2 + IIf(e = "Appels_non_aboutis", 0, 4), t) = a(i, 3)
            w(3 + IIf(e = "Appels_non_aboutis", 0, 1), t) = i
            w(UBound(w, 1) - IIf(e = "Appels_non_aboutis", 2, 1), 1) = t
            dico(txt) = w
        Next
    Next
    For Each e In dico
        w = dico(e)
        For i = 1 To UBound(w, 2)
            If IsNumeric(w(1, i)) And Not IsEmpty(w(1, i)) Then
                minValue = 0
                flag = False
                For ii = 1 To UBound(w, 2)
                    If IsNumeric(w(5, ii)) And w(5, ii) > w(1, i) Then
                        If Not flag Or w(5, ii) < minValue Then
                            minValue = w(5, ii)
                            flag = True
                        End If
                    End If
                Next
                If flag Then w(9, i) = minValue
            End If
        Next
        dico(e) = w
    Next
    Application.ScreenUpdating = False
    If Not Evaluate("isref('Jointure2'!a1)") Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Jointure2"
    With Sheets("Jointure2")
        .Cells(1).CurrentRegion.Clear
        .Cells(3).Resize(, 2).Interior.ColorIndex = 44
        .Cells(1).Resize(, 2).Interior.ColorIndex = 43
        .Cells(5).Resize(, 2).Interior.ColorIndex = 45
        .Cells(9).Interior.ColorIndex = 40
        With .Cells(1).Resize(1, 9)
            .BorderAround Weight:=xlThin
            .Value = _
            Array("Date + Heure", "Appels non aboutis", "N° ligne appels non aboutis", "N° ligne appels décrochés", _
                  "Date + Heure", "Appels entrants décrochés", "Nbre non Aboutis", "Nbre décrochés", "Appel suivant décroché")
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = True
        End With
        n = 2
        For Each e In dico
            With .Rows(n).Resize(UBound(dico(e), 2), UBound(dico(e), 1))
                .Value = Application.Transpose(dico(e))
                .BorderAround Weight:=xlThin
            End With
            n = n + UBound(dico(e), 2)
        Next
        With .Cells(1).CurrentRegion
            .Columns(1).NumberFormatLocal = "jj/mm/aaaa hh:mm:ss"
            .Columns(5).NumberFormatLocal = "jj/mm/aaaa hh:mm:ss"
            .Columns(9).NumberFormatLocal = "jj/mm/aaaa hh:mm:ss"
            .VerticalAlignment = xlCenter
            .Font.Name = "Calibri"
            .Font.Size = 10
            .Borders(xlInsideVertical).Weight = xlThin
            .BorderAround Weight:=xlThin
            .Columns.AutoFit
        End With
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub

klin89

Rechercher des sujets similaires à "rechercher date heure appels suivant"