XL 2021 affectation et classement de mes appels selon contenu des cellules en colonnes J ou L ou M

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous :)

En novembre 2021, j'avais posté une demande complexe pour moi.
Parmi les réponses (je remercie encore les intervenants), j'avais choisi la solution de job75 qui répondait à ma demande.

A l'usage, je me suis rapidement aperçu que ma demande était erronnée et que dans certains cas, compter uniquement les "Répondeurs" ne correspondait pas exactement à mon besoin.

Toujours très occupé, j'ai continué avec le code de Gérard même si cela me pose des soucis de classements.
Je me suis enfin décidé ce matin à refaire un fichier test avec une demande plus aboutie.

Voici mon besoin :
si cellule en col J contient "NPR" - cellule en col Z = NPR
si cellule en col J contient "RdV Fait ou RdV Fait Facturé" - cellule en col Z = RdV
si cellule en col J contient "une date" et cellule en col L contient en 1ère ligne un texte "différent" de "Répondeur" - cellule en col Z = Rappel
si cellule en col L contient uniquement un ou des "Répondeur " - cellule en col Z = Compter nombre de Répondeur


N'arrivant pas à trouver le bon code, votre aide me serait salutaire lol :)

En cas, je joins le fichier test.
Un grand merci par avance,
Entre temps, je continue à chercher...
:)
 

Pièces jointes

  • Repondeurs_classer_compter_Gerard2.xlsm
    94.1 KB · Affichages: 5
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel, et bonne année,
Un essai en PJ avec cette fonction perso :
VB:
Function TypeAppel(J, L)
Application.Volatile
TypeAppel = ""
    Select Case J
        Case "NPR":                 TypeAppel = "NPR"
        Case "RdV Fait":            TypeAppel = "RDV"
        Case "RdV Fait Facturé":    TypeAppel = "RDV"
        Case Else
            Dim T, Nappel%, i%
            T = Split(L, Chr(10))
            If T(0) Like "*Répondeur*" = False Then
                TypeAppel = "Rappel"
            Else
                Nappel = 0
                For i = 0 To UBound(T)
                    If T(i) Like "*Répondeur*" Then Nappel = Nappel + 1
                Next i
                TypeAppel = Nappel
            End If
    End Select
End Function
J'ai différencier "RdV Fait" et "RdV Fait Facturé" dans le cas où vous voudriez modifier le texte de retour.
 

Pièces jointes

  • Repondeurs_classer_compter_Gerard2.xlsm
    96.6 KB · Affichages: 2

patty58

XLDnaute Occasionnel
Bonjour à vous deux,
Je suis quasi nulle en formule, mais j'ai essayé :
VB:
=SI(NB.SI(J6;"*NPR*");"NPR";SI(NB.SI(J6;"*RdV*");"RdV";SI(NB.SI(L6;"*Répondeur*");"Compter nombre de Répondeur";SI(NB.SI(L6;"<>*Répondeur*");"Rappel"))))
Il ne reste plus qu'à compter le nombre de répondeur, pour le moment, je sèche
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Patty,
Cela va être difficile de vérifier par formule si dans la première ligne "Répondeur" est absent comme sur la ligne 7. ( sauf Usine à gaz :) )
Pour compter les "Répondeur" on peut faire :
VB:
=(NBCAR(L13)-NBCAR(SUBSTITUE(L13;"Répondeur";"")))/NBCAR("Répondeur")
Evidemment on peut remplacer à la fin NBCAR("Répondeur") par 9, j'ai mis ça pour une meilleure compréhension.
 

patty58

XLDnaute Occasionnel
Bonjour Sylvanu
Je suis plutôt VBA, car en effet les formules sont vite à rallonge et donc usine à gaz.
Mais je dois dire que j'essaie de temps en temps de me jeter à l'eau..
Mais tu as raison, dans ce cas, VBA est plus adapté.
Bonne journée
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel, et bonne année,
Un essai en PJ avec cette fonction perso :
VB:
Function TypeAppel(J, L)
Application.Volatile
TypeAppel = ""
    Select Case J
        Case "NPR":                 TypeAppel = "NPR"
        Case "RdV Fait":            TypeAppel = "RDV"
        Case "RdV Fait Facturé":    TypeAppel = "RDV"
        Case Else
            Dim T, Nappel%, i%
            T = Split(L, Chr(10))
            If T(0) Like "*Répondeur*" = False Then
                TypeAppel = "Rappel"
            Else
                Nappel = 0
                For i = 0 To UBound(T)
                    If T(i) Like "*Répondeur*" Then Nappel = Nappel + 1
                Next i
                TypeAppel = Nappel
            End If
    End Select
End Function
J'ai différencier "RdV Fait" et "RdV Fait Facturé" dans le cas où vous voudriez modifier le texte de retour.
Bonjour Sylvanu :), Bonjour patty58 :),
Tout d'abord, mes bons voeux pour toi et tes proches pour cette nouvelle année.

Et merci pour ce code qui fonctionne nickel :)
Juste un truc que je ne comprends pas et qui me gêne car j'ai eu des soucis par le passé avec "des @"dans des formules :
La formule qui apparait est "=@TypeAppel(J6;L6)"
J'ai enlevé les @ et les résultats sont les mêmes.

A koi il sert l'@ ?

Merci à toi :)
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
La formule qui apparait est "=@TypeAppel(J6;L6)"
J'ai enlevé les @ et les résultats sont les mêmes.
C'est un truc qui apparait lors de la migration de formules d'anciennes versions XL vers de nouvelles. Tout du moins c'est ce que j'ai compris. Donc aucune incidence :
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjur Sylvanu :), bonjour à tous :)

Je confirme que ton code fonctionne super bien et je t'en remercie :)

Je reviens pour un p'tit complément si tu veux bien encore m'aider :
Pour automatiser un peu plus, j'ai ajouter un petit code
VB:
Sub Macro1()
    [Z6:Z18].Formula2R1C1 = "=IF(RC[-14]<>"""",TypeAppel(RC[-16],RC[-14]),"""")"
    [Z6:Z17] = [Z6:Z17].Value
    Application.CutCopyMode = False
    [K1].Select
End Sub
Bouton code affecté
Je voudrais que seules les lignes cellules colonne A "non vide" soient calculées
C'est à dire de la ligne 6 à la dernière ligne non vide en col A

J'ai quelques difficutés pour faire le code incluant dernière ligne et formule
Aurais-tu le bon code ?
Je te remercie.
Je joins le fichier tel que je l'ai modifié...
:)
 

Pièces jointes

  • Repondeurs_classer_compter_Sylvanu.xlsm
    100.7 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel,
Je pense qu'il y a plus simple que de coller des formules :
VB:
Sub Affecter()
    Dim i%: Application.ScreenUpdating = False
    For i = 6 To [A1000].End(xlUp).Row
        Cells(i, "Z") = TypeAppel(Cells(i, "J"), Cells(i, "L"))
    Next i
End Sub
Un appui sur "Code affecté" réaffecte à chaque ligne utile le bon code.
 

Pièces jointes

  • Repondeurs_classer_compter_Sylvanu.xlsm
    98.3 KB · Affichages: 3

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour et merci à toi :)

Je l'avais trouvé comme ceci :
VB:
Sub Macro1()
    Range("z6:z" & Range("a" & Rows.Count).End(xlUp).Row).Formula2R1C1 = "=TypeAppel(RC[-16],RC[-14])"
    Range("z6:z" & Range("a" & Rows.Count).End(xlUp).Row) = Range("z6:z" & Range("a" & Rows.Count).End(xlUp).Row).Value
    [K1].Select
End Sub
Je vais tester ta solution.
Chouette j'aurai 2 codes possibles comme ça :)
Merci
:)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour sylvanu :), bonjour le Forum :)

Je reviens sur le fil et je te confirme que ton code fonctionne super bien et que j'ai pu l'intégrer sabns souci dans mon "Usine à gaz" lol

Mais, au contrôle dans mon fichier, je m'aperçois que d'autres cas nécessitent d'autres conditions.
J'ai tenté de modifier ta fonction mais je n'y arrive pas :mad:

Veux-tu encore m'aider stp ?
En cas, je joins le fichier à jour des conditions.
Un grand merci déjà pour avoir été là.
:)
 

Pièces jointes

  • Repondeurs_classer_compter_Sylvanu3.xlsm
    70.2 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel,
Ca devient une "Usine à gaz" :)
Tout d'abord les "dates" sont du genre "26.01.2024" ou "26 01 2024" ou "26/01/2024" donc pas toujours considérés comme des nombres. Donc j'ai pris le parti d'analyser que les deux premiers chiffres.
J'ai juste rajouté au début :
VB:
If Not IsError(Left(J, 2)) And LCase(M) = "rdv possible" Then TypeAppel = "RdV P": Exit Function
If Not IsError(Left(J, 2)) And LCase(M) = "rdv incertain" Then TypeAppel = "RdV I": Exit Function
If IsNumeric(Left(J, 2)) And IsNumeric(Left(K, 2)) And K <> "" Then TypeAppel = "RdV A": Exit Function
Ensuite je ne comprend pas :
si cellule en col J et K contiennent une "Date" - cellule en col Z = RdV A
Cela veut dire qu'en lignes 9,16 on met "RdV A" et non autre chose puisque les cellules J et K contiennent des nombres.
Or dans l'attendu vous mettez le nombre de Répondeur trouvés.
Pouvez vous être plus précis sur ce point en expliquant le pourquoi des différence entre nous sur les lignes 9 et 16 .
 

Pièces jointes

  • Repondeurs_classer_compter_Sylvanu4.xlsm
    66.1 KB · Affichages: 1

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Merci à toi :)
Je n'ai que des "#VALEUR!" en résultat col Z

Ensuite je ne comprend pas :
si cellule en col J et K contiennent une "Date" - cellule en col Z = RdV A
Cela veut dire qu'en lignes 9,16 on met "RdV A" et non autre chose puisque les cellules J et K contiennent des nombres.
lionel : exact pour moi, "RdV A" veut dire "RdV Annulé"

Or dans l'attendu vous mettez le nombre de Répondeur trouvés.
Pouvez vous être plus précis sur ce point en expliquant le pourquoi des différences entre nous sur les lignes 9 et 16 .
lionel : Je n'avais pas modifié les lignes 9,16
Car les conditions à appliquer sont des lignes 18 à 24 (les lrésultats des lignes 9,16 seront alors modifiés)
Encore merci d'être là pour moi,
:)
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 227
Membres
103 159
dernier inscrit
FBallea