Création d'une fonction sous Excel

Création d'une fonction sous Excel - VB/VBA/VBS - Programmation

Marsh Posté le 11-11-2005 à 16:34:22    

Tout d'abord bonjour,
voila j'aimerais savoir s'il est possible de créer une fonction sous Excel.
je m'explique, j'aimerais créer une fonction MAX.SI un peu similaire à la fonction SOMME.SI, qui elle existe, mais cette nouvelle fonction ne ferait pas la somme mais rechercherait le max de la plage sélectionnée.
Merci beaucoup pour votre réponse,
Bye.

Reply

Marsh Posté le 11-11-2005 à 16:34:22   

Reply

Marsh Posté le 11-11-2005 à 18:19:46    

Please

Reply

Marsh Posté le 11-11-2005 à 18:44:16    

bonjour,
Exemple d'une fonction qui renvoie le MAX des multiples d'un nombre de la sélection courante:

Code :
  1. Function MAXIF(o As Range, i As Integer)
  2. For Each cellule In o
  3. If cellule Mod i = 0 Then If cellule > resultat Then resultat = cellule
  4. Next
  5. MAXIF = resultat
  6. End Function

Cette fonction doit être collée dans un module quelconque (Module1, Module2...) pas dans un module de Feuille.
 
on l'utilise dans la feuille de calcul comme une fonction ordinaire
la formule suivante :
=MAXIF(B1:B5;2)
renvoie 8 si B1:B5 contient 3,4,8,9,13
Elle est alors visible dans la liste des fonctions (dernière ligne : personnalisées)
A+

Reply

Marsh Posté le 11-11-2005 à 19:28:55    

Merci pour ta réponse mais la fonction que tu me proposes me permet de trouver le maximum d'une plage qui est multiplue de 2 et je ne recherche pas cela.
En effet, j'aimerais avoir une fonction qui me permet de trouver le maximum d'une plage tout en tenant compte d'un critère.
exemple :
Date :            Noms :   Montants:
01/01/2005     Pierre        3
04/05/2005     Paul          4
06/07/2005     Pierre       12
18/10/2005     Jacques     6
J'aimerais ici trouver le maximum de montant d'achat qu'a fait Pierre lors d'une seule journée.
Dans ce cas ma plage serait B2:B5
mon critère serait Pierre
et ma plage ou je veux connaitre le max en fonction du critère serait C2:C5
Et je veux que le résultat trouvé par cette fonction soit 12 c'est à dire le montant des achats qu'a fait Pierre le 06/07/2005 (car il est supérieur au montant des achats que Pierre a fait le 01/01/2005)
 
Merci beaucoup pour vos nouvelles réponses

Reply

Marsh Posté le 11-11-2005 à 21:33:19    

Please

Reply

Marsh Posté le 11-11-2005 à 22:57:07    

Re...
Je t'ai donné un exemple de création de fonction selon un critère qui chez moi est un multiple de x.
A toi de l'adapter en fonction de ton critère...
Ce n'est pas bien difficile :
Je te le fait à la hache et sans test...
 
Function MAXIF(o As Range, crit As Range)
z = crit.Value
For Each cellule In o
iR = cellule.Row
If Cells(iR, crit.Column) = z Then If cellule > resultat Then resultat = cellule
Next
MAXIF = resultat
End Function


---------------
roger
Reply

Marsh Posté le 11-11-2005 à 23:39:13    

Merci galopin de l'intéret que tu portes à ma demande mais je dois te dire que je ne sais pas du tout programmer c'est pourquoi je te demande stp, si cela ne te dérange pas, de me faire cette fonction entierement.
J'ai testé celle que tu as faite mais elle ne rponds pas à ma requete.
Si tu peux te pencher plus amplement sur ma question je t'en serait beaucoup reconnaissant,
Merci encore.

Reply

Marsh Posté le 12-11-2005 à 00:30:58    

Please

Reply

Marsh Posté le 12-11-2005 à 05:07:25    

bonjour,
ben, normalement ça marche...
je l'ai juste adaptée un poil pour que ce soit impec.

Code :
  1. Function MAXIF(plage As Range, critere As Range)
  2. Dim iR&, o, vMax, z
  3. Application.Volatile
  4. z = critere
  5. For Each o In plage
  6. iR = o.Row
  7. If Cells(iR, critere.Column) = z Then If o > vMax Then vMax = o
  8. Next
  9. MAXIF = vMax
  10. End Function

Les conditions d'utilisation sont les mêmes : Module Standart
syntaxe de l'appel:
=MAXIF(C2:C10;B2)
A+


---------------
roger
Reply

Marsh Posté le 12-11-2005 à 11:31:35    

Dans la formule que tu me donnes, lorsque je la rentre en VBA et que je l'applique sous Excel, il me demande seulement une plage et un critère (et donc pas de plage ou il faut chercher le MAX en fonction du critere).
J'espere qe tu pourras prendre le temps de te pencher un peu sur la question
Merci déja beaucoup

Reply

Marsh Posté le 12-11-2005 à 11:31:35   

Reply

Marsh Posté le 12-11-2005 à 11:34:19    

Derniere précision :
Je voudais que la formule se présente comme ceci :
MAXIF(plage de critère, critère, plage du max à faire en fonction du critere)     <=(comme la fonction SOMME.SI mais ici il faut rechercher le MAX et non faire la SOMME
Voila merci encore

Reply

Marsh Posté le 12-11-2005 à 12:30:59    

Please

Reply

Marsh Posté le 12-11-2005 à 14:26:21    

HELP ME PLEASE lol

Reply

Marsh Posté le 12-11-2005 à 15:17:16    

Bonjour,
Cette formule s'adapte exactement à ton exemple.
Plage correspond à la colonne dont il faut trouver le max en fonction du critère.
Pour critère, pas besoin de déterminer une plage : tu pointes directement sur Pierre, Paul ou Jacques...
Je comprend qu'une formule plus générale permettant de faire un critère conditionnel t'interesserait plus, mais dans ce cas... il faudra chercher ta réponse ailleurs !
Si tu la trouves je suis preneur !
A+


---------------
roger
Reply

Marsh Posté le 12-11-2005 à 17:03:36    

Et oui il me faudrait une fonction avec un critère conditionnel,
c'est pourquoi je suis toujours ouvert à toute les aides que vous pouvez m'offir,
merci à tous ce qui m'aideront

Reply

Marsh Posté le 12-11-2005 à 19:23:40    

Please

Reply

Marsh Posté le 12-11-2005 à 20:43:17    

N'y a t il vraiment personne de bon en VBA ici???

Reply

Marsh Posté le 12-11-2005 à 23:18:26    

Bon pour galopin et pour les autres , voila la solution que j'attendais et qui m'a été donné trés gentiement par une personne.
Régalez vous et @+.
 
 
Dim valeur As Double
Function maxsi(plage As Range, critère As String, max_plage As Range)
x = max_plage.Column - plage.Column
valeur = 0
For Each c In plage
If c.Value = critère Then
If c.Offset(0, x).Value > valeur Then valeur = c.Offset(0, x).Value
End If
Next
maxsi = valeur
End Function

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed