Fonction pr calculer la différence de deux plages

vertigos Messages postés 4 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 18 février 2005 - 17 févr. 2005 à 15:53
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 20 févr. 2005 à 16:15
Bonjour,
Je cherche à créer une focntion personnalisée calculant dans une cellule de
la feuille de calcul la différence entre la valeur maxi d'une plage de cellules et
la valeur mini d'une autre plage.

Voilà ce que j'ai fait. Et le calcul de la première plage ne s'opère pas!
Voyez-vous où est le problème?
Merci d'avance de votre aide!!!
Vertigos

Function Q3Différence(plage1, plage2)


'Définition des variables
Dim Maxi As Variant
Dim i As Long
Dim Mini As Variant


'calcul plage1
Maxi = plage1(LBound(plage1))
For i = LBound(plage1) + 1 To UBound(plage1)
If plage1(i) > Maxi Then Maxi = plage1(i)
Next i


'calcul plage2
Mini = plage2(LBound(plage2))
For i = LBound(plage1) + 1 To UBound(plage2)
If plage2(i) < Mini Then Mini = plage2(i)
Next i


'Résultat
If Maxi > Mini Then Q3Différence = Maxi - Mini


End Function

8 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
17 févr. 2005 à 16:15
Ta fonction est correcte, mais peut-être ne l'utilises-tu pas bien. Le code suivant fonctionne parfaitement :





--------------------------------------------------

Dim t(3) As Long

Dim tt(4) As Long



Function Q3Différence(plage1, plage2)



'Définition des variables

Dim Maxi As Variant

Dim i As Long

Dim Mini As Variant



'calcul plage1

Maxi = plage1(LBound(plage1))

For i = LBound(plage1) + 1 To UBound(plage1)

If plage1(i) > Maxi Then Maxi = plage1(i)

Next i



'calcul plage2

Mini = plage2(LBound(plage2))

For i = LBound(plage1) + 1 To UBound(plage2)

If plage2(i) < Mini Then Mini = plage2(i)

Next i



'Résultat

If Maxi > Mini Then Q3Différence = Maxi - Mini



End Function





Private Sub Form_Load()

' t() = (3,4,5,6)

' tt() = (5,6,7,8,9)

For i = 3 To 6

t(i - 3) = i

Next i

For i = 5 To 9

tt(i - 5) = i

Next i



MsgBox Q3Différence(t, tt)

End Sub










Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
17 févr. 2005 à 16:17
Private Sub Form_Load()



doit être remplacé par Private Sub UserForm_Initialize()



.. il me semble. Car j'ai utilisé ta fonction dans une routine VB, et pas VBA.




Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
phantom_2005 Messages postés 184 Date d'inscription mercredi 8 décembre 2004 Statut Membre Dernière intervention 1 septembre 2010 1
17 févr. 2005 à 16:30
Private Sub Form_Load() fonctionne parfaitement en VBA


--------------------------------------------------------------------------------
Phantom_2005
0
vertigos Messages postés 4 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 18 février 2005
17 févr. 2005 à 17:05
merci beaucoup pour votre aide, econs et phantom_2005, mais...
çà ne marche pas du tout.

Je suis sûre que la fonction a un problème quelque part (vers calacul plage 1
je pense). Quand je fais f(x) sous Excel, Excel me dit que la fonction est
inutilisable, et rien ne se passe quand je sélectionne plage1 (alors que le programme
devrait me donner la valeur maxi !).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vertigos Messages postés 4 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 18 février 2005
17 févr. 2005 à 18:18
En fait, le problème semble venir d'ici.
Je ne sais pas faire une fonction personnalisée donnant le maximum d'une plage (oui, y'a une fonction déjà toute faite pour çà mais j'en voudrais une en VBA).

Function maximum(plage)
Dim Maxi As Variant
Dim i As Long


Maxi = maximum(UBound(plage))


For i = LBound(plage) To UBound(plage)
If plage(i) > Maxi Then maximum = plage(i)
Next i


End Function
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
17 févr. 2005 à 23:37
Salut,
Sous excel il existe des fonctions pour cela
ex: =MAX(A1:A5)-MIN(B1:B6)

Si tu l'utilises sous vba tu dois tapper

Dim MyRangeMax As Range
Dim MyRangeMin As Range
Dim RangeRésultat As Range


Set MyRangeMax = Worksheets("feuil1").Range("A1:A6")
Set MyRangeMin = Worksheets("feuil1").Range("B1:B6")
Set RangeRésultat = Worksheets("feuil1").Range("C7")


RangeRésultat = Application.WorksheetFunction.Max(MyRangeMax) - Application.WorksheetFunction.Min(MyRangeMin)

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
vertigos Messages postés 4 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 18 février 2005
18 févr. 2005 à 09:15
Merci de ton aide, Jean-Paul... même si cela ne répond pas à mon problème.
Je ne cherche pas à travailler à partir d' une plage pré-définie sous Excel (exemple: Worksheets("feuil1").Range("A1:A6")) mais à lancer une fonction personnalisée (fx) qui me demande de sélectionner une plage et alors seulement la fonction affiche la valeur numérique maximale des valeurs sélectionnées.

Je pense donc qu'une boucle est nécessaire, mais celle que j'ai fait ne fonctionne pas
Function maximum(plage)
Dim Maxi As Variant
Dim i As Long
Maxi = maximum(UBound(plage))


For i = LBound(plage) To UBound(plage)
If plage(i) > Maxi Then maximum = plage(i)
Next i


End Function
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
20 févr. 2005 à 16:15
Salut,
Je n'arrive pas à te comprendre .....
si tu veux calculer un max à partir de cellule tu dois faire

Public Function Maximum(MyRange As Range) As Single
Maximum = Application.WorksheetFunction.Max(MyRange)
End Function

si tu veux que le prog te demmande de sélectionner des cellules tu dois faire une UserForm insérer dans celle ci un controle RefEdit et dans ton code appeller cette UserForm. ensuite tu récupère la valeur de la sélection et tu applique la fonction Max

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
Rejoignez-nous