CountIfs 1 critère avec plage variable ds boucle

Lilly ...

Accessoirement ... si tu as énormément de données ... il pourrait être astucieux de gérer, dans un onglet séparé, la liste entière des articles avec les conditions qui régissent tes fameuses règles ...

Bonjour à Tous & Toutes

Bonjour James

Toujours pas à 100% de la forme mais un mieux...

Afin d'essayer de mieux m'expliquer :

Alors ci-joint fichier où il y a en macro en extrait quelques uns des calculs qui existent et fonctionnent actuellement et qui sont du genre :

If Cells(i, 2) = True And Cells(i, '8) = True And Cells(i, 9) = True And Cells(i, 5) = True Then

Cells(i, 16).Value = True

Else

Cells(i, 16).Value = False

End If

Je souhaite pour optimiser le temps... et selon les conseils de la page de microsoft dédiée à l'optimisation des performances en version 2010...

passer de ces formules (If avec And) à du COUNTIF du genre :

var = Application.WorksheetFunction.CountIf(Range(Cells(i, 2), Cells(i, 5)), True)

If var = 4 Then

Cells(i, 6).Value = True

Else

Cells(i, 6).Value = False

End If

Le seul et unique souci : la plage pour le "countif"...

J'ai 10 colonnes qui servent à mes calculs. J'ai donc défini chacune de ces 10 colonnes comme une plage à part entière.

Puis j'ai défini "Plage_Calcul01" (qui représente les plages des colonnes dont j'ai spécifiquement besoin pour le calcul 1) en utilisant "union"...

et ainsi de suite jusqu'à "Plage_Calcul75" qui est le dernier calcul dont j'ai besoin dans ce cas précis...

Là j'ai toujours une erreur qui est indiquée dans la ligne de code var quand je met pour la partie qui définie dans CountIf la plage "Plage_Calcul"

Donc, comme vba ne se trompe jamais mais le programmeur si.... rdi2:

Soit je ne codifie pas correctement les plages de chacune des colonnes,

soit je codifie pas correctement les plages "Plages_Calcul" ,

soit je codifie pas correctement la ligne contenant le Countif...

ou pire encore... je codifie mal pour ces 3 points...

Est-ce un peu plus clair ?...

Je ne sais pas si c'est possible... Bien que mon credo soit que rien n'est impossible avec excel...

Encore merci pour le temps consacré à m'aider...

A plus...

19wbj.xlsm (19.64 Ko)

Bonjour Lilly ...

Aujourd'hui ... je pense avoir le temps de reprendre ton problème à tête reposée ...

Le moins que l'on puisse dire ... c'est que ta tendance naturelle ... n'est pas de te faciliter la vie ...

Cela dit ... je suis sûr et certain que l'on va finir par trouver une solution efficace ...

Car avec Excel ... tout est possible ...

Re James...

Oui... s'il y a un mot qui ne fait pas parti d'excel c'est bien le mot "impossible"... c'est pour cela que je m'entête...

Et pour mes tendances naturelles... un philosophe a dit : "Nous n'arrivons pas au sommet de la montagne en prenant une route qui chemine à plat"....

Trouver la solution pour ces calculs... c'est trouver la solution aussi pour d'autres de mes calculs qui eux sont nettement plus nombreux... donc en fait là c'est la solution pour 75% de mes nombreuses colonnes....

Et je continue de chercher aussi de mon côté... il y a peu de chance que je trouve une solution avant toi... mais je peux toujours essayer de trouver...

Encore merci du fond du coeur pour ton aide précieuse....

Re ...

Avant de plonger dans le code ... ...

Peux-tu me confirmer que :

1. structurellement, pour toi, un Lot est toujours composé de 5 articles ... donc, sans exception de 10 Colonnes pour tenir compte du Vrai Faux ... ???

2. l'ordre d'apparition des articles dans les colonnes est respecté ... concrètement toutes les 5 colonnes ...???

3. tu effectues tes calculs systématiquement sur les 4 premiers articles ...???

4. les quatre statistiques que tu veux produire pour un lot ... sont communes à tous les lots ...???

Je suppose, par ailleurs, que tu dois gérer un Nombre N de Lots pour lesquels les statistiques doivent être identiques ...

je suis à l'ouest... et je comprend pas toutes tes questions...

puis-je t'envoyer un message privé pour répondre ?

lillysg a écrit :

je suis à l'ouest... et je comprend pas toutes tes questions...

puis-je t'envoyer un message privé pour répondre ?

Dire que lorsqu'on perd le Nord ... on se retrouve à l'Ouest .... c'est Dingue ....

No problem ... pour tes MP ...

Lilly

Ci-joint la dernière version test ... de ta macro ... avec commentaires explicatifs ...

21wbk.xlsm (24.29 Ko)

Re,

Corrections ajoutées ... sur les quatre modes de calcul ...

Avant d'aller plus loin dans le code ...

Les résultats obtenus sont-ils corrects ...???

19wbk.xlsm (24.41 Ko)

en retour le fichier avec les calculs qui fonctionnent pas en vert....

ce fichier va finir par avoir ma peau....

Bon je crois franchement que je vais garder mes "if avec and".... comme à l'origine... tant pis pour la vitesse d'exécution.... je tricoterai pendant que la macro s’exécute...

21wbk-1.xlsm (25.20 Ko)

Re,

Lilly ... Il ne faut pas te décourager ... malheureusement, je n'ai manifestement encore pas saisi la logique de l'ensemble ...

Mais ... je suis sûr que si le cap de la logique sous-jacente est maitrisée ... nous pourrons ensuite nous attaquer à l'optimisation

Lilly

J'espère que le fichier test joint rdi: ... corrige les anciennes erreurs ... ...

Et du coup ... on peut envisager ... avec précaution de s'approcher de l'optimisation ... tant désirée ...

23wbk-2.xlsm (25.81 Ko)

coucou James

Hier la grippe a eu raison de moi .... désolée de n'avoir pas répondu plus tôt...

On approche la perfection..... bravo à toi....

donc.... en voyant ton code j'ai tout de suite vu où le mien n'allait pas avec Countif.... puisque je m’entêtais avec les plages alors que oui la plage n'est que 4 cellules de la même ligne...

Bon alors par contre puisque "var" est constitué d'addition de "countif"... je me demande si.... .... (je sais je suis peut-être un peu trop "perfectionniste" ou "enquiquineuse"... voir les 2...) on pouvait essayer d'utiliser le fameux "countifs" pluriel ainsi...

var = Application.WorksheetFunction.CountIfs(Cells(i, arti1), True & Cells(i, arti2), True & Cells(i, arti3), True & Cells(i, arti4), True)

Je vais essayer.... ....

Bon aussi... pour les 75 calculs c'est 15 calculs (identiques dans la formulation) x 5 lots (dans chaque lot 1 article référent est différent par rapport au lot précédent, voir liste ci-après)

Lot A : Art1 + Art 2 + Art 3 + Art 4

Lot B : l'Art 4 du Lot A est remplacé par l'Art 5 = Art1 + Art2 + Art3 + Art5

Lot C : L'Art 3 du Lot B est remplacé est remplacé par L'art 4 = Art1 + Art2 + Art4 + Art5

Lot D: L'art 2 du Lot C est remplacé par l'Art 3 = Art1 + Art3 + Art4 + Art5

Lot E : L'art 1 du Lot D est remplacé par L'Art 2 = Art2 + Art3 + Art4 + Art5

Donc pour la boucle avec J ... je crois que ce n'est pas judicieux de boucler sur les lots... puisque les lots ne sont pas identiques dans leurs compositions d'Articles....

Par contre... les "formulations" des calculs sont toujours identiques :

Le calcul 1 de chaque lot est toujours arti1 du lot =1 et arti2 du lot=1 et arti3 du lot =1 et arti4 du lot =1

Le calcul 2 de chaque lot est toujours arti1 du lot =1 et arti2 du lot=1 et arti3 du lot=1 et arti4 du lot=0

etc...

Je me demande donc si il ne serait pas préférable de boucler sur les calculs plutôt que sur les lots... ce qui fait 15 boucles dans lesquelles s'exécute 5 fois le calcul pour les 5 lots...

Et aussi en réel... la colonne cible xcol est (de mémoire) vers les colonnes 300....

Bon je vais essayer de faire un fichier test avec les 15 calculs des 5 lots... et de le mettre ici...

Quoiqu'il en soit MERCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII encore une fois pour toute l'aide et le temps que tu nous apportes... c'est vraiment et nous apprécions énormément ...

Bonjour Lilly

Désolé d'apprendre que la grippe t'a gardé au lit-lit ... ... Mais ...content de savoir que tu vas mieux ...

C'est sympa d'apprendre que la première étape de la logique sous-jacente est ... globalement ... sous le coude ...

Bien sûr... tu as totalement raison ... il va falloir totalement repenser la boucle j ... puisque la composition des Cinq Lots répond à des règles de rotation ... qui sont spécifiques à chaque lot ...

Mais nous verrons cela un peu plus tard ...

En attendant, deux remarques pour les étapes suivantes :

1. le fameux countifs() "pluriel" répond, lui aussi, à une logique de plages constituées de cellules adjacentes ... donc ... il n'aura pas d'utilité pour toi ... dans le cas précis qui nous préoccupe ...

2. xcol va également avoir besoin d'être revisité en fonction du nombre de Lots ....

Peux-tu me confirmer que, même si les règles de rotation modifient la structure interne de chaque lot ... chacun des lots dans ta feuille est composé de 10 Colonnes ...

Bonjour,

Pour reprendre le fil ... Peux-tu me confirmer que chacun des lots est bien composé de 10 Colonnes ...???

Coucou James

Alors les 10 colonnes sont invariables...

C'est à partir de toujours les mêmes 10 colonnes (B à K) que sont fait les 15 calculs du lot A ; les 15 calculs du lot B ; les 15 calculs du lot C ; les 15 calculs du lot D ; les 15 calculs du lot E...

Cela répond à ta question ?

Encore merci

Re,

Merci beaucoup ...!!!

Cette précision est cruciale ... puisque j'étais parti sur 10 Colonnes pour chaque Lot ... donc en tout 50 Colonnes ... avant de pouvoir produire les statisitiques ... !!!

Et, du coup, les statistiques ne pouvaient démarrer que dans la Colonne BB (xcol = 54) ...

Conclusion : toutes les statistiques de tous les Lots peuvent démarrer en Colonne N (xcol = 14)

Encore une fois ... si je fais une erreur de raisonnement ... il ne faut pas hésiter à me corriger ...

Re,

Le premier calcul pour lot A commence en col N et fini en col AB

Le premier calcul pour lot B commence en col AC et fini en col AQ

Le premier calcul pour lot C commence en col AR et fini en col BF

Le premier calcul pour lot D commence en col BG et fini en col BU

Le premier calcul pour lot E commence en col BV et fini en col CJ

Est-ce plus clair ainsi ?

Re,

Génial ...!!! Clarissimo ...

Il ne me reste plus qu'à attaquer la rédaction, dans ta macro, des règles internes de rotation des Lots ...

Et, ensuite ...

.... pour moi cette partie là du fichier...

Rechercher des sujets similaires à "countifs critere plage variable boucle"