VBA - Valeur max en fonction de 3 critères

Bonjour à tous,

J'essaye de terminer un calcul sur VBA, qui me permet de recalculer/modifier les valeurs d'un tableau présent sur excel. Pour pouvoir terminer mon code, j'ai besoin de pouvoir identifier si la valeur initiale de chaque cellule du tableau correspond où non à la valeur max en fonction de 3 critères :

  • Année
  • Saison
  • Colonne

A la fin de cette manipulation, je dois donc avoir identifiée 1 valeur max par saison de chaque année en fonction de la colonne dans laquelle je me trouve.

Mais je ne sais pas comment m'y prendre.

J'ai essayé avec : Max = Application.WorksheetFunction.Max(Range(" : ")) Le problème c'est que je ne vois pas comment définir automatiquement la matrice en fonction des saison/année/colonne au fur et à mesure que mon calcul s'exécute.

Pour l'exemple, je vous joins un classeur :

50exemple-max.xlsm (16.37 Ko)

Ca vous permettra de voir le type de données avec lesquelles je travaille et de voir comment je compte organiser mes boucles.

Merci d'avance pour vos idées !

Bonsoir Glancerise le forum

super le fichier j'ai ouvert j'ai regardé j'ai cherché les consignes ou l'exemple de ce que l'on doit te faire, mais j'ai rien vu

alors j'ai refermé et voilà

si tu as envie d'expliquer ce que tu devrais retrouvé et ou le retrouvé, on fera

a+

papou

Ben ... il n'y a qu'un module, j'ai "lu" les tableaux excel comme je l'ai fait dans travail:

Colonne A: Date

Colonne B: Année

Colonne C: Mois

Colonne D: Saison

Colonne E à M : les valeurs que je recalcul dans mon travail ... pas dans l'exemple proposé.

J'ai organisé les boucles (For...Next) comme je l'ai fait dans mon travail.

Et avec ces données ... boucles/tableaux ... je suis censée trouver un moyen d'identifier la valeur maximal de chaque colonne E à M, en fonction de l'année et de la saison.

je dois donc avoir identifiée 1 valeur max par saison de chaque année en fonction de la colonne dans laquelle je me trouve.

Précision: Dans le fichier original, j'ai 21 années complète, succéssives (du 1/1/1990 au 31/12/2010), ce qui n'est pas le cas dans l'exemple.

Malheureusement je n'arrive pas à être plus claire que ça !

Dans le code de mon exemple, j'ai juste mis:

Max(P, Année, Saison) = ?

'

' Date(Max(P, Année, Saison)) = DECALER (Max(P, Année, Saison); 0; P+3) ?

'

' ou

'

' Si P=x et Année=y et Saison=z alors je suis bien sur la cellule qui contient

' la valeur max.

pour tenter d'expliquer mon raisonnement. Bref, apparemment je suis nulle en explication!! (J'avoue que c'est pas clair tout ça !!) Désolée.

A mon boulot, on m'a proposé

1) identifier le 1er "jdeb" et le dernier jour "jfin" de l'année "an" avec "Do...Loop Until"

2) de faire une bouvle For...Next pour identifier si la valeur du jour j+1 est supérieure à celle du jour j. La valeur la plus élévée prend le nom de "Max" . Et a la fin de ma boucle, je devrais pouvoir identifier la date de la valeur Max.

Si je fais tout ca dans une boucle For colonne = 1 to 9 , je suis censée obtenir un max par saison de chaque année et par colonne ...

Je pense qu'avec de telles consignes je suis dans de beaux draps !!

Si vous avez saisie quelque chose et que vous avez une idée de comment procédé, je prends !

re

Bah oui mais tu n'as toujours pas dit quand on a trouvé le max pour 1 année pour un mois et pour une saison on en fait quoi??

on le supprime? on le met en vert? ou quoi d'autre????

a+

papou

En effet ... Ben ils seront re-calculés lors de chaque run. Donc il faut juste que je puisse les utilisés dans mes calculs dans la suite du code. Donc les enregistrer dans un tableau pourait être judicieux

Bonjour,

voir fichier joint...

à tester.

78glamc.xlsm (21.60 Ko)

Ok merci.

Je regarde ça, je te tiens au courant ^^

A un petit détail près (indice n'appartient pas à la plage de donnée), j'ai réussi à m'en sortir!

Merci à tous

glamcerise a écrit :

A un petit détail près (indice n'appartient pas à la plage de donnée), j'ai réussi à m'en sortir!

envoie moi ton fichier si tu veux que je jette un coup d'oeil...

Pourquoi pas

Je te passe une grande partie de mon code. Les valeurs dans mes tableaux excel ne représentent rien. C'est juste pour permettre à VBA de tourner.

Le déboggeur te permettra de trouver la ligne qui pause problème.

Il y a 3 modules:

  • CalculMax : calculs nécéssaires pour identifier des valeurs max en fonction de mes critères/
  • LectureTableauxExcel : Lecture des tableaux excel
  • ModulePrincipal : C'est dans ce module qu'il y a un problème.
Il n'y a qu'un programme a executer. (Attention de bien te trouver sur l'onglet "Tirages" lors de l'execution).

De mon côté, je continue de chercher évidemment

Bonne journée.

Je pensais que c'était mon code qui contenait un bug... honnêtement, là, je n'en ai aucune idée...

^^ Je finirai par trouver une solution.

En tout cas merci pour ton aide

Bonne continuation !

Rechercher des sujets similaires à "vba valeur max fonction criteres"