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.
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/2024 | 10:34:22 | 952659670 | mar 02/01/24 10:34:22 | formule à trouver |
| 02/01/2024 | 10:46:04 | 649388363 | mar 02/01/24 10:46:04 | formule à trouver |
| 02/01/2024 | 13:06:07 | 648490642 | mar 02/01/24 13:06:07 | formule à trouver |
| 02/01/2024 | 13:46:55 | 256512326 | mar 02/01/24 13:46:55 | formule à trouver |
| 02/01/2024 | 13:49:13 | 651246164 | mar 02/01/24 13:49:13 | formule à 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 SubDans 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.
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/2024 | 15:38:13 | 672829455 | 02/01/2024 | 15:50:36 | |
| 02/01/2024 | 16:55:28 | 672829455 | 04/01/2024 | 11: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/2024 | 16:55:28 | 672829455 |
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
Superbe formule BeGood
Résultat en colonne E avec la formule :
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.
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 Subklin89