XL 2016 VBA Sélection en fonction de critères

james7734

XLDnaute Junior
Bonjour à tous,

Confiné, je fais appel à votre aide aujourd'hui.
Voilà, je possède un fichier avec 400 noms de sociétés et une note attribuée pour chaque valeur (2 étant la note maximale et -2 la note minimale, pas de 0,5) et pour chaque mois.
A travers de VBA, je cherche à lister dans le deuxième onglet uniquement 5 valeurs par mois en fonction de 2 critères:
- Les notes des 3 derniers mois sont "supérieurs à 1,5"
- La moyenne des notes des 6 derniers mois est "supérieure à 1,5"

J'ai un donné un petit visuel de ce que je cherche à faire sur l'onglet 2.
Il faut savoir que des nouvelles colonnes correspondant à des nouveaux mois vont s'implémenter à la suite au fil du temps. Je cherche une solution spécifiquement sur VBA (pas de formules).
Je pense qu'il sera également de trouver des valeurs pour les 5 premiers mois.

Merci énormément!
 

Pièces jointes

  • Classeur1 (1).xlsx
    57 KB · Affichages: 18
Solution
En PJ un nouvel essai.
Bien évidemment je commence au 6ème mois de façon à faire la moyenne.
J'ai mis le seuil de 1.5 en B1, ce qui permet de le faire varier.
Si inutile changer la ligne :
VB:
Seuil = [B1]   par   Seuil = 1.5
Par contre je ne fais pas de tri par classement car je ne mémorise pas tous les calculs intermédiaires.
Et je ne remonte pas les 5 premiers, mais tous ceux qui sont au dessus du seuil.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir James,
En PJ un essai, à tester, et à retester. :)
Il suffit d'appuyer sur le bouton "the best"
Les résultats sont en feuill2.
Comme il peut y avoir plus de 5 company à répondre aux bons critères et qu'il n'y a pas façon de discriminer, j'ai créé une "note" qui est Note n-2 + Note n-1 + Note N + Moyenne6Mois, et à la fin je tri sur ces notes. Ca vaut ce que ça vaut.
A vous de le modifier pour répondre à vos besoins.

NB1 : j'ai oublié : Je tri sur une valeur >=1.5. Si vous voulez uniquement > il faut modifier le code sur la ligne :
VB:
If tablo(i, Largeur) >= 1.5 And tablo(i, Largeur - 1) >= 1.5 And tablo(i, Largeur - 2) >= 1.5 Then
NB2: par contre ça, je n'ai pas compris ... donc pas traité. ;)
Je pense qu'il sera également de trouver des valeurs pour les 5 premiers mois.
 

Pièces jointes

  • James.xlsm
    81.1 KB · Affichages: 10
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
En PJ une version un peu optimisé.
Concernant le choix :
- Soit on met tous les ex æquo de la meilleure note sans limite de nombre
- Soit on limite la liste aux 5 meilleurs.
Comme je ne savais quoi choisir, j'ai mis en Feuil2 4 filtres possibles.

A vous de choisir la version qui vous sied le mieux.
 

Pièces jointes

  • James(V3).xlsm
    81 KB · Affichages: 5
Dernière édition:

james7734

XLDnaute Junior
En PJ une version un peu optimisé.
Concernant le choix :
- Soit on met tous les ex æquo de la meilleure note sans limite de nombre
- Soit on limite la liste aux 5 meilleurs.
Comme je ne savais quoi choisir, j'ai mis en Feuil2 4 filtres possibles.

A vous de choisir la version qui vous sied le mieux.
Bonjour Sylvanu,

Merci énormément pour ta solution! Je comprends ce que tu as fait, mais je voulais pour chaque mois une liste de 5 (ou plus comme tu as fait) valeurs. Si je me trompe pas ton fichier calcul sur l'ensemble de la période?
Pardon pour l'incompréhension... En gros, chaque mois je souhaitais une liste de 5 valeurs correspondant aux 2 critères.

Merci encore!
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Vérifiez, les calculs sont fais sur les trois derniers mois et la moyenne sur les 6 derniers mois.
VB:
    If tablo(i, Largeur) >= 1.5 And tablo(i, Largeur - 1) >= 1.5 And tablo(i, Largeur - 2) >= 1.5 Then
Largeur étant la taille de l'array en mois, donc N, N-1 et N-2.
De même la moyenne est effectuée sur les six derniers mois :
Code:
        Moyenne = 0
        For j = 0 To 5
            Moyenne = Moyenne + tablo(i, Largeur - j)
        Next j
        Moyenne = Moyenne / 6

Ai je raté quelque chose ?

Add : Vous m'avez fait douté.
En PJ un fichier où toutes les données sont à -100 sauf les six derniers mois, et les calculs sont corrects.
 

Pièces jointes

  • James(V3)TEST pour vérification.xlsm
    77.6 KB · Affichages: 3
Dernière édition:

james7734

XLDnaute Junior
Re,
Vérifiez, les calculs sont fais sur les trois derniers mois et la moyenne sur les 6 derniers mois.
VB:
    If tablo(i, Largeur) >= 1.5 And tablo(i, Largeur - 1) >= 1.5 And tablo(i, Largeur - 2) >= 1.5 Then
Largeur étant la taille de l'array en mois, donc N, N-1 et N-2.
De même la moyenne est effectuée sur les six derniers mois :
Code:
        Moyenne = 0
        For j = 0 To 5
            Moyenne = Moyenne + tablo(i, Largeur - j)
        Next j
        Moyenne = Moyenne / 6

Ai je raté quelque chose ?

Add : Vous m'avez fait douté.
En PJ un fichier où toutes les données sont à -100 sauf les six derniers mois, et les calculs sont corrects.
Bonjour,
Oui c'est exactement ce que je veux mais pour chaque mois!
Voici un visuel de ce que je cherche (les valeurs sont prises au hasard, juste pour montrer la forme).
 

Pièces jointes

  • James(V3)TEST pour vérification.xlsm
    73.4 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
En PJ un nouvel essai.
Bien évidemment je commence au 6ème mois de façon à faire la moyenne.
J'ai mis le seuil de 1.5 en B1, ce qui permet de le faire varier.
Si inutile changer la ligne :
VB:
Seuil = [B1]   par   Seuil = 1.5
Par contre je ne fais pas de tri par classement car je ne mémorise pas tous les calculs intermédiaires.
Et je ne remonte pas les 5 premiers, mais tous ceux qui sont au dessus du seuil.
 

Pièces jointes

  • James(V4).xlsm
    77.2 KB · Affichages: 9

james7734

XLDnaute Junior
En PJ un nouvel essai.
Bien évidemment je commence au 6ème mois de façon à faire la moyenne.
J'ai mis le seuil de 1.5 en B1, ce qui permet de le faire varier.
Si inutile changer la ligne :
VB:
Seuil = [B1]   par   Seuil = 1.5
Par contre je ne fais pas de tri par classement car je ne mémorise pas tous les calculs intermédiaires.
Et je ne remonte pas les 5 premiers, mais tous ceux qui sont au dessus du seuil.
Rebonjour Sylvanu,

Incroyable! c'est ce que je veux !
Merci énormément, je regarde ton code...

Merci,
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 332
Membres
102 863
dernier inscrit
Selemani