XL 2016 Problème de comptage pour trouver les trois meilleurs

Webperegrino

XLDnaute Impliqué
Supporter XLD
Bonjour le Forum,

Je vous invite à m'indiquer où je fais des erreurs dans la codification du fichier ci-joint, dans la partie "Private Sub CommandButton1_Click() 'le comptage des valeurs par prénom" .

Je tourne en rond dans plusieurs tentative de corrections depuis 24 h, mais en vain.
Les codes ne me réalisent pas une bonne comptabilisation de valeurs pour trouver et extraire les trois gagnants selon deux catégories (six au total).

Par la suite j'essaierai, par vba également, de gérer les 'ex aequos' pour les placer sur mon "podium" figurant dans le pavé en partie droite de la Feuille 'Résultat' ...

Pour vous aider dans votre aide que vous pourriez m'apporter, j'ai mis en valeur entre des '******************, les lignes de codes qui me posent problème.
Cordialement,
Webperegrino

 

Pièces jointes

  • Triomphe.xlsm
    86.1 KB · Affichages: 5
Solution
Re

@Webperegrino
Je m'aperçois que je n'avais pas rempli la colonne Total ! :rolleyes:
1723971145952.png


Avec cette version c'est réparé ;)

A noter :
Je n'ai pas regarder les formules qui sont ici et qui me semblent approximatives......
1723970973730.png


Et comme la écrit Bernard tu as 3 noms vides dans la feuille "Base"
1723971274844.png


Merci de ton retour

Phil69970

XLDnaute Barbatruc
Bonjour @Webperegrino

Tes macros me semble très ...... brouillons 🤔

1) Peux tu expliquer ce que doit faire TOUTE ta macro "Calcul" et ta macro "Rang à la demande" ?

2) En clair quels résultats attends tu de ces colonnes ????
1723897140589.png


3) Peux tu remplir à la main les 5 ou 6 premières lignes de la feuille
1723896735390.png


4) Ainsi que le résultat attendu ici
1723896858082.png
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Le Forum,
Bonjour PHIL69970,
Merci d'avoir répondu.

Recherche n° 1 :
Dans Base :
FRANÇOIS·LR dispose d’un nombre cumulé de 268 dans la catégorie Amb (colonne H)
FRANÇOIS·LR dispose d’un nombre de 67 dans la catégorie Amb (colonne H)
Ce total de 335 devrait aller s’afficher dans la Feuille Résultat en cellule [E32]

Choisie en colonne D, LIH-JUANG a :
- 200 en colonne F pour du Amb en colonne H,
- 220 en colonne F pour du Fixe en colonne H
MAIS : Choisie en colonne E , LIH-JUANG a :
- 35 en colonne F pour du Amb en colonne H

Dans la Feuille Résultat, LIH-JUANG recevra :
- 200 + 35 = 235 pour du Amb iront en cellule [E51],
- 220 pour du Amb iront en cellule [H51],


Recherche n° 2 :
La macro « Rang sur demande » viendra analyser les deux colonnes E et H.
Le rang de chaque personne viendra se placer dans las colonnes J et K


Recherche n° 3 :
Les trois premiers de la colonne J vont se placer en [M2], [M3] et [M4] (pour la catégorie Amb)
Les trois premiers de la colonne H vont se placer en [O2], [O3] et [O4] (pour la catégorie Amb)

Ensuite je gèrerai les « ex aequo » avec une partie de macro du genre si M2 est vide placer celui qui est en position 1, si une autre personne est aussi en première position, on aura alors M2 = M2 & chr(10) & cette nouvelle personne


Webperegrino
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Un essai avec ma fonction Gigogne et aussi avec l'indexeur que contient son module.
Remarque, puisqu'il n'a pas été répondu à la question de @Phil69970, que je salue, j'ai bêtement mis ce qui était marqué : Aux intitulé ColD, la colonne D de BASE et aux intitulé ColE, la colonne E de BASE, même si ça n'a pas de sens vu les velléités de calculs des totaux de ces textes …
 

Pièces jointes

  • GigogneWebperegrino.xlsm
    132 KB · Affichages: 2
Dernière édition:

Webperegrino

XLDnaute Impliqué
Supporter XLD
Le Forum,
Phil69970,
Bonjour Bernard,
Je suis vraiment navré de ne pas avoir correctement répondu à toutes les questions soulevées par Phil9970, et je suis impressionné par la qualité des lignes de codes proposées dans la conversation #4 : c'est un peu "extra-terrestre" pour moi cette codification que je vais essayer de déchiffre, comprendre.

Pour mieux m'exprimer, dans le fichier, en retour, j’ai reformulé plus clairement les entêtes des colonnes Base – colC, ColD, ColF et colG.
En effet je désirais que ces colonnes devaient recevoir, non pas les prénoms mais le nombre trouvé dans la colonneF de BASE (des nombres) :
- ce nombre placé à gauche dans Résultat-Colonne C si catégorie Amb de H-BASE avec le prénom était à gauche dans BASE (colD),
- ce nombre trouvé en colF-BASE placé en feuille Résultat à droite (Résultat colonne D) si catégorie Amb de H-BASE avec le prénom était à droite (BASE(colD),

Mon travail (dans BASE) est une petite partie de mon gros fichier non transportable ici car trop épais en Mo.

La feuille Résultat ne fait pas partie de mon réel fichier, et pourrait tout aussi bien :
  • soit être réduite (sans les colonnes C et D, F et G)
  • soit être supprimée pour n’utiliser que la feuille BASE et afficher le résultat, par exemple en pavé [J1 :O7] ; ça ne poserait aucun désordre dans mon document.
En effet j’avais créé cette feuille Résultat pour essayer « d’éclater ma recherche » sur plusieurs colonnes pour voir où cela bloquait. D’où l’avis tout à fait justifié de Phil quand il indiquait que j’étais « brouillon » dans mon approche.

Merci en tout cas de votre secours et je ne serais pas froussé si vous ne continuez pas dans la correction de mon projet.
Cordialement,
Bon week-end,
Webperegrino
 

Pièces jointes

  • (2)_GigogneWebperegrino.xlsm
    111.6 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
Mais ce nombre est déjà porté dans les colonnes E et H ! pourquoi les répéter à gauche alors ?
À moins que les noms en colonne B de Résultat soient les mêmes, pouvant provenir soit de la D soit de la E de BASE, la quantité portée en F valant alors de moitié pour les deux noms ?
Dans ce cas on pourrait mettre dans ces colonnes C, D, F, G le nombre d'enregistrements où le nom est apparu respectivement dans les colonnes D et E de BASE.
Ça peut se traiter, en passant par un tableau dynamique intermédiaire mais après c'est même un peu plus simple.
Je l'ai fait comme ça, je le joins.
 

Pièces jointes

  • GigogneWebperegrino.xlsm
    130.8 KB · Affichages: 5

Webperegrino

XLDnaute Impliqué
Supporter XLD
Je trouve ceci en manuel...
En travaillant uniquement avec la Feuille BASE.
On peut laisser tomber mon "brouillon" qu'est la feuille Résultat pour les calculs, ce serait plus simple.

Voir dans BASE le pavé [J11:O49] que j'ai rempli manuellement.
Je me trompe peut-être car mes résultats sont différents des vôtres, en pourcentage.
Je n'ai fais qu'avec trois personnes pour simuler manuellement.

Pas d'urgence pour me répondre car je continue de mon côté à essayer de corriger et trouver les bons résultats par vba dans le petit tableau haut-droit pour le classement général des 6 récipiendaires.
Merci encore à vous.
Webperegrino
 

Pièces jointes

  • (3)_GigogneWebperegrino(1).xlsm
    130.3 KB · Affichages: 3

Webperegrino

XLDnaute Impliqué
Supporter XLD
Je pense que non car le compagnon éventuelle dans la colonne voisine sera aussi classé avec ce nombre et avec ses autres nombres à lui, avec ou sans autres compagnons de vente, de son côté.
L'un et l'autre auront probablement des résultats cumulés différents.
Non, moi je ne diviserais pas par deux.
Cette étude est pour du bénévolat.
 

Dranreb

XLDnaute Barbatruc
Il faudrait en être sûr parce que sinon le total des résultats de l'ensemble des personnes sera supérieur au total des quantités de la liste de base puisque celles qui auront été traitées à 2 y seront comptées 2 fois. Actuellement il en manque au contraire 599 parce que 200 Amb et 399 Fixes figurent dans la base sans prénom indiqué, ni 1 ni 2. J'ai provisoirement corrigé la chose en les intégrant aussi à une ligne sans prénom dans la feuille Résultat. On retrouve ainsi 55613 des deux cotés.
Mais on a tout d'un coup l'impression que cette feuille Résultat ne sert à rien ?
C'est bête d'avoir travaillé dessus alors ! Elle serait inutile pour établir votre podium. Bien sûr actuellement, puisqu'elle est faite, le traitement qui l'établit se base dessus. Mais il pourrait tout aussi bien se baser seulement sur le tableau intermédiaire en mémoire.
 

Pièces jointes

  • GigogneWebperegrino.xlsm
    131.1 KB · Affichages: 1

Phil69970

XLDnaute Barbatruc
Re

@Webperegrino

Je te propose ce fichier en partant du fichier du post #1

A noter que la totalité de ta demande peux ce faire sans macro avec UNIQUEMENT des formules !!!
Voir dans mon fichier le code VBA ou je copie toutes les forme puis je les écrase en copiant les cellules sur elle même. ;)

Merci de ton retour
 

Pièces jointes

  • Triomphe .somme si ens V1.xlsm
    86.3 KB · Affichages: 2

Phil69970

XLDnaute Barbatruc
Re

@Webperegrino
Je m'aperçois que je n'avais pas rempli la colonne Total ! :rolleyes:
1723971145952.png


Avec cette version c'est réparé ;)

A noter :
Je n'ai pas regarder les formules qui sont ici et qui me semblent approximatives......
1723970973730.png


Et comme la écrit Bernard tu as 3 noms vides dans la feuille "Base"
1723971274844.png


Merci de ton retour
 

Pièces jointes

  • Triomphe .somme si ens V2.xlsm
    83.1 KB · Affichages: 1
Dernière édition:

Webperegrino

XLDnaute Impliqué
Supporter XLD
Le Forum,
Dranreb, Phil69970,
Bonjour,
Toutes vos propositions apportées ici vont me rendre un énorme service !
J'ai encore un gros travail de compréhension de ces nouvelles lignes de codification que je ne manquerai pas d'appliquer lors qu'elles me paraîtront moins compliquées.
Elles ont tellement efficace !

La nuit m'a porté conseil.
Mes neurones spécialisées en compréhension Excel se sont tout d'un coup excitées et, au réveil, moins fatigué, l'idée m'est venue de simplifier tout cela avec une formulation en SOMMEPROD sur sélection de la catégorie (Amb ou Fixe), du Prénom, et par traitement des deux colonnes où se trouvent ces prénoms.

Puis je suis rentré dans la lecture du post et du fichier #11de Phil : et là le miracle pour moi, car formulation plus compréhensible, pour l'instant, que la programmation intéressante de Dranreb que je remercie à nouveau pour sa patience et son travail, et encore meilleure que mes longueurs de formules SommeProd.

Enfin, pour simplifier encore et encore, j'ai décidé sans cette Feuille Résultat, trop perturbatrice et devenue inutile suite à la dernière application que je vous propose de vérifier : je crois que je n'ai plus besoin de de creuser ; grâce à vous je crois avoir trouvé la solution en or ! [avec cette dernière mouture].

Merci de vérifier que mes formules sont recevables. Votre non réponse signifierait aussi que tout est recevable maintenant et que je peux continuer dans cette optique.
Toutefois, sachant que je devrai traiter 1 500 lignes de saisies dans la BASE, dois-je laisser les formules dans les cellules, ou remplacer ensuite le résultat de chaque cellule par leur valeur pour peut-être alléger, en Ko ou Mo, mon vrai fichier sans formules dans les colonnes (et là j'appliquerai une macro pour faire ce travail de remplacement). Je ne pense pas que ça ferait une grosse différence.

Merci encore à vous deux ; je vais me servir un verre de Whisky Breton à votre santé pour votre soutien : c'est l'heure de l'apéro !
Belle journée à vous,
Webperegrino
 

Pièces jointes

  • (5)selon propCorrection_Phil69970_Triomphe.xlsm
    94.9 KB · Affichages: 2

Phil69970

XLDnaute Barbatruc
Re

@Webperegrino

Je vois que tu as repris l'intégralité de mes formules ;)

Pourquoi mettre ici une formule matricielle contrairement à mes formules qui sont toutes non matricielles ?

1723978188205.png


Mais pas besoin de mettre une formule matricielle
1723978294207.png


Après fait un essai avec formule et sans formule pour voir le poids du fichier dans chaque version

1723978560792.png


Et ne pas oublier l'aspect modification des formules par des personnes tierces et qui mettront en l'air ton travail !!!

Edit :
A titre perso je mettrais les formules dans une macro avec copie des formules sur elles mêmes pour les remplacer par leur valeur .
De plus tes formules "rang" je les ferais comme j'ai fais dans mon fichier


Code issu de mon post #11 et 12 à adapter à ta feuille "Base"
VB:
DerligDest = WsDest.Range("B" & Rows.Count).End(xlUp).Row
LaFormule = "=RANG(E8;$E$8:$E$1;0)"
LaFormule = Replace(LaFormule, 1, DerligDest)
WsDest.Range("J8").FormulaLocal = LaFormule

Comme cela j'ai toujours la dernière ligne à jour dans la formule ..... :oops:
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
159

Statistiques des forums

Discussions
313 867
Messages
2 103 092
Membres
108 521
dernier inscrit
manouba