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:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Merci sylvanu :)

C'est tout bon Nickel de chez Nichel MERCI à toi

J'en aurai une dernière (enfin je pense).

Après test dans ma z'Usine à gaz (plus de 20000 lignes), le temps d'exécution est long...
A moins que ton code puisse s'exécuter plus rapidement, je pense qu'il me faudra m'en servir par ligne active avec change R sur la ligne.

Dès que je serai prêt, je t'enverrai ma demande si tu veux bien encore m'aider.

En tout cas, c'est Nichel GRAND MERCI ;)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
En modifiant Macro1 comme ça, et en ajoutant des ElseIf au lieu de simples IF dans TypeAppel sur mon vieux PC je gagne 40% ( de 0.76s à 0.5s pour 10000 lignes )
VB:
Sub Macro1()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    On Error GoTo DupFor
    With Range("z6:z" & Range("a" & Rows.Count).End(xlUp).Row)
        .FormulaR1C1 = "=IFERROR(TypeAppel(RC[-16],RC[-15],RC[-14],RC[-13]),"""")"
        .Value = .Value
    End With
    [K1].Select
DupFor:
    Application.Calculation = xlCalculationAutomatic
End Sub
 

Pièces jointes

  • Repondeurs_classer_compter_Sylvanu7.xlsm
    824.4 KB · Affichages: 2
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Et en cassant tout, en passant par des arrays au lieu de formules, je tombe à 0.16s au lieu des 0.76s initiales sur mon PC, soit un peu moins de 5 fois plus rapide, avec :
VB:
Public T
Sub NewMacro1()
    Application.ScreenUpdating = False
    On Error GoTo DupFor
    T = Range("J6:M" & [A100000].End(xlUp).Row)
    ReDim Z(1 To UBound(T))
    For i = 1 To UBound(T)
        Z(i) = TypeAppel(T(i, 1), T(i, 2), T(i, 3), T(i, 4))
    Next i
    [Z6].Resize(UBound(Z), 1).Value = Application.Transpose(Z)
    [K1].Select
DupFor:
End Sub
Donc préciser le nombre de lignes à traiter au départ oriente la solution la plus optimale.;)
 

Pièces jointes

  • Repondeurs_classer_compter_Sylvanu8.xlsm
    825.6 KB · Affichages: 6

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Et en cassant tout, en passant par des arrays au lieu de formules, je tombe à 0.16s au lieu des 0.76s initiales sur mon PC, soit un peu moins de 5 fois plus rapide, avec :
VB:
Public T
Sub NewMacro1()
    Application.ScreenUpdating = False
    On Error GoTo DupFor
    T = Range("J6:M" & [A100000].End(xlUp).Row)
    ReDim Z(1 To UBound(T))
    For i = 1 To UBound(T)
        Z(i) = TypeAppel(T(i, 1), T(i, 2), T(i, 3), T(i, 4))
    Next i
    [Z6].Resize(UBound(Z), 1).Value = Application.Transpose(Z)
    [K1].Select
DupFor:
End Sub
Donc préciser le nombre de lignes à traiter au départ oriente la solution la plus optimale.;)
Encore merci :)
Je vais mes tests ce soir et je reviendai te dire :)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bjr sylvanu :), Bjr le Forum :)

Je croyais que c'était tout bon mais non... Avec tes 2 fichiers "optimisés pour aller plus vite en exécution", je n'arrive pas à faire fonctionner correctement les codes dans mon fichier de travail Grrrr :mad:

Je suis donc reparti du fichier du #post 15

Dans mon fichier de travail, j'ai un beug :
erreur 9.png

Curieusement, ça fonctionne quand même, il me fait bien les affectations mais il bloque mon fichier.

Je joins le fichier dans lequel j'ai ajouté l'onglet "compare codes" (comparaison de ton code et de ce que j'ai mis dans mon fichier de travail)

Pour info : Malgré "Application.Calculation = xlCalculationManual", l'éxécution du code est très long, +de 20 secondes... Peut'être à voire dans un second temps.

Si tu veux bien en voir ce qu'il est possible de faire, je t'en remercie beaucoup...
:)
 

Pièces jointes

  • Repondeurs_classer_compter_Sylvanu5.xlsm
    64.9 KB · Affichages: 2
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lionel,
Je ne suis pas arrivé à reproduire votre erreur.
Toutes vos chaines en colonne L comportent un retour à la ligne.
Cette erreur trouvée semble vouloir dire que T(0) n'existe pas.
J'ai rajouté une sécurité pour en être toujours sûr d'avoir ce retour à la ligne avec :
VB:
L = L & Chr(10)
Testez cette PJ.
Je suis reparti du dernier fichier qui est le plus rapide.
Sur 10000 lignes j'arrive sur mon PC autour de 0.15s. J'ai rajouté le temps d'exécution en cellule AC1.
( si tout marche supprimez la ligne [AC1] = Format(Timer - T0, "0.000s") )
 

Pièces jointes

  • Repondeurs_classer_compter_Sylvanu9.xlsm
    824.5 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
on error resumle next avant "If T(0) Like "*Répondeur*" = False Then", ça semble fonctionner mais je ne vois pas pourquoi il y a ce beug
Evidemment puisque vous sautez la ligne où il y a l'erreur.
( ne jamais utiliser "on error resume next" si l'erreur n'est pas clairement identifiée, c'est masquer le problème )
Donc il y a une configuration dans votre colonne L qui n'a pas de CHR(10), ma solution du post précédent devrait résoudre le problème.

NB: Par curiosité pouvez vous me donner le temps d'exécution sur votre PC de la version 9. Merci.
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bjr sylvanu :)

Encore là et je t'en remercie :)

J'ai avancé et fait beaucoup de tests avec toutes les versions lol

En fait, avec le "on error resume next" ça fonctionne bien, version 8 fichier joint, dans mon fichier de travail et c'est super rapide :)
(ne jamais utiliser "on error resume next" si l'erreur n'est pas clairement identifiée, c'est masquer le problème) : Je suis bien d'accord.
Il me reste (je pense) juste un "ptit" souci :
Laisser la cellule col "Z" VIDE si cellulle col "L" est vide (voire ligne 8)
Je joins le fichier
:)
 

Pièces jointes

  • Repondeurs_classer_compter_Sylvanu8.xlsm
    715.7 KB · Affichages: 1
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 220
Membres
103 158
dernier inscrit
laufin