Valeur max avec critère
cajou08
Messages postés
7
Statut
Membre
-
cajou08 Messages postés 7 Statut Membre -
cajou08 Messages postés 7 Statut Membre -
Bonjour à tous,
Je débute en VBA. Je souhaite écrire une fonction affichant la valeur max d'une plage donnée respectant un certain critère (un mois donné) dans une autre plage.
J'ai trouvé des posts se rapprochant de ma question dans ce forum mais j'aimerais apprendre de mes erreurs en vous proposant ce code.
En m'appuyant sur le code que m'a transmis thev pour la recherche d'occurrences (autre topic), j'en suis là :
Le souci que je rencontre, c'est que la fonction semble retourner la valeur de la cellule la plus "éloignée" dans le tri pour le mois en question et non la valeur max.
Merci par avance de votre aide
Je débute en VBA. Je souhaite écrire une fonction affichant la valeur max d'une plage donnée respectant un certain critère (un mois donné) dans une autre plage.
J'ai trouvé des posts se rapprochant de ma question dans ce forum mais j'aimerais apprendre de mes erreurs en vous proposant ce code.
En m'appuyant sur le code que m'a transmis thev pour la recherche d'occurrences (autre topic), j'en suis là :
Public Function max_m(plage_date As Range, num_mois As Byte, plage_recherche As Range) As Double
'fct max_m : trouve la valeur mensuelle maximale dans une plage donnée
'arg1 : plage_date : plage contenant les dates
'arg2 : num_mois : numéro du mois
'arg3 : plage_recherche : plage contenant les données dont on veut trouver le max
For Each élément In plage_date
ligne_relative = élément.Row - plage_date.Row + 1
colonne_relative = élément.Column - plage_date.Column + 1
If Month(élément.Value) = num_mois Then
max_m = Application.WorksheetFunction.Max(plage_recherche.Cells(ligne_relative, colonne_relative).Value)
End If
Next
End Function
Le souci que je rencontre, c'est que la fonction semble retourner la valeur de la cellule la plus "éloignée" dans le tri pour le mois en question et non la valeur max.
Merci par avance de votre aide
| EDIT : Ajout du LANGAGE dans les balises de code.
Explications disponibles ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Valeur max avec critère
- Driver max - Télécharger - Pilotes & Matériel
- I14 pro max - Accueil - Guide téléphones
- Le monde de max ✓ - Forum Loisirs / Divertissements
- Réinitialiser kidicom max - Forum Téléphones & tablettes Android
- Reset kidicom max ✓ - Forum Téléphones & tablettes Android
1 réponse
Après réflexion, j'ai amélioré le code qui semble fonctionnel même si j'imagine que ce n'est pas forcément bien écrit (j'ai ajouté un contrôle sur l'année en plus du mois) :
Public Function max_m(plage_date As Range, num_mois As Byte, plage_recherche As Range) As Double
'fct max_m : trouve la valeur mensuelle maximale dans une plage donnée
'carnet entraînement : sortie mensuelle avec le + grand kilométrage
'arg1 : plage_date : plage contenant les dates
'arg2 : num_mois : numéro du mois
'arg3 : plage_recherche : plage contenant les données
Application.Volatile
Dim annee As Integer
'annee courante du carnet d'entraînement, la valeur est stockée temporairement dans setup.F5
annee = Sheets("setup").Range("F5").Value
For Each élément In plage_date
ligne_relative = élément.Row - plage_date.Row + 1
colonne_relative = élément.Column - plage_date.Column + 1
If Month(élément.Value) = num_mois _
And Year(élément.Value) = annee Then
If plage_recherche.Cells(ligne_relative, colonne_relative).Value > max_m Then
max_m = plage_recherche.Cells(ligne_relative, colonne_relative).Value
End If
End If
Next
End Function