Fonction avec 2 paramètres

Le
steph05
Bonjour,

J'aimerais savoir s'il est possible de faire une fonction avec deux
paramètres.
Parce que j'ai essayé mais ma syntaxe ne doit pas être correcte parce
que ça bugge.

J'ai écrit:

Public Function ClassementF(ColonneScore, ColonneClt)
End Function

Sub Classement()
ClassementF ("J","A")
End Sub

Et il bugge quand j'appelle la fonction. (il y a des trucs dans ma
fonction, mais il bugge avant de les lire donc je ne les ai pas écrits
dans ce message)

Comment dois-je faire?

Merci de votre aide
Stéphanie
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Carim
Le #5380681
Bonjour,

Il me semble que tu ne définis pas tes Variables ...

et ... quelle est ta UDF ...?
steph05
Le #5380661
On 16 déc, 12:21, Carim
Bonjour,

Il me semble que tu ne définis pas tes Variables ...

et ... quelle est ta UDF ...?


Ca veut dire quoi UDF ?
Effectivement je ne définis pas mes variables, mais si je n'en mets
qu'une, ça marche.

Si je fais:

Public Function ClassementF (ColonneClt)
End Function

Sub Classement()
ClassementF ("A")
End Sub

Je n'ai pas de problème.

Merci

LSteph
Le #5380651
Bonjour,

J'aimerais savoir s'il est possible de faire une fonction avec deux
paramètres.
Bien sûr exemple simpliste:


Function hypoth(x As Single, y As Single) As Single
hypoth = (x ^ 2 + y ^ 2) ^ (1 / 2)
End Function


Public Function ClassementF
Attention selon le sens de classement s'il s'agit de classer (tri)une

fonction n'a pas vocation à déplacer des éléments dans une feuille.
Une fonction renvoie un résultat. Alors c'est peut-être pour cela que tu
ajoutes une sub en dessous

fonction, mais il bugge avant de les lire donc je ne les ai pas écrits


Précisément si tu veux qu'on y voit quelque chose faut tout mettre
et dire ce que tu veux faire avec quoi, parce que là "classement" c'est
pas tout clair au niveau de ce que tu veux utiliser ,ensuite obtenir et où.

Cordialement.

--
lSteph

Bonjour,

J'aimerais savoir s'il est possible de faire une fonction avec deux
paramètres.
Parce que j'ai essayé mais ma syntaxe ne doit pas être correcte parce
que ça bugge.

J'ai écrit:

Public Function ClassementF(ColonneScore, ColonneClt)
End Function

Sub Classement()
ClassementF ("J","A")
End Sub

Et il bugge quand j'appelle la fonction. (il y a des trucs dans ma
fonction, mais il bugge avant de les lire donc je ne les ai pas écrits
dans ce message)

Comment dois-je faire?

Merci de votre aide
Stéphanie


LSteph
Le #5380621
:o)) ???
Union des Démocrates Français

On 16 déc, 12:21, Carim
Bonjour,

Il me semble que tu ne définis pas tes Variables ...

et ... quelle est ta UDF ...?


Ca veut dire quoi UDF ?
Effectivement je ne définis pas mes variables, mais si je n'en mets
qu'une, ça marche.

Si je fais:

Public Function ClassementF (ColonneClt)
End Function

Sub Classement()
ClassementF ("A")
End Sub

Je n'ai pas de problème.

Merci







steph05
Le #5380581
On 16 déc, 12:32, LSteph
Bonjour,

J'aimerais savoir s'il est possible de faire une fonction avec deux
paramètres.
Bien sûr exemple simpliste:


Function hypoth(x As Single, y As Single) As Single
hypoth = (x ^ 2 + y ^ 2) ^ (1 / 2)
End Function

Public Function ClassementF
Attention selon le sens de classement s'il s'agit de classer (tri)une

fonction n'a pas vocation à déplacer des éléments dans une feuille .
Une fonction renvoie un résultat. Alors c'est peut-être pour cela que tu
ajoutes une sub en dessous

fonction, mais il bugge avant de les lire donc je ne les ai pas écrit s


Précisément si tu veux qu'on y voit quelque chose faut tout mettre
et dire ce que tu veux faire avec quoi, parce que là "classement" c'est
pas tout clair au niveau de ce que tu veux utiliser ,ensuite obtenir et o ù.

Cordialement.

--
lSteph


Alors voilà l'explication de ce que je veux faire.
Je cherche à faire le classement d'une compétition, mettre 1 à celui
qui a le plus de points, 2 au deuxième ... et mettre la même place si
j'ai des ex-aequo.
J'y arrive, mais comme cette compétition comporte plusieurs manches,
je veux répéter ce classement à chaque manche.
Au lieu de réécrire 4 fois la même chose, j'aimerais paramétrer ma
macro.

Ma fonction entière est:

Public Function ClassementF(ColonneClt)

'En attendant d'arriver à mettre les deux paramètres
ColonneScore = "J"

ligne = Range("C1").End(xlDown).Row
DiffColonne = Range(ColonneScore & "1").Column - Range(ColonneClt &
"1").Column

'Classer selon le cumul
Cells.Select
Selection.Sort Key1:=Range(ColonneScore & "3"),
Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal

' Mettre 1 au rang du premier en donnant comme rang le N° de ligne
moins 2
Range(ColonneClt & "3").Select
ActiveCell.FormulaR1C1 = "=ROW(RC[" & DiffColonne & "])-2"

' Au suivant mettre son N° de ligne -2 s'il est différent du
précédent,sinon mettre comme le précédent
For Each LaCellule In Range(ColonneClt & "4", ColonneClt & ligne)
LaCellule.FormulaR1C1 = "=+IF(RC[" & DiffColonne & "]=R[-1]C[" &
DiffColonne & "],R[-1]C,ROW(RC[-1])-2)"
Next LaCellule

'Collage spécial valeurs
Range(ColonneClt & "3", ColonneClt & ligne).Copy
Range(ColonneClt & "3").PasteSpecial Paste:=xlPasteValues

End Function

Et je l'appelle dans une sub:

Sub Classement()
'Classer selon le cumul: Score=J, Clt=A
ClassementF ("A")
End Sub

Merci beaucoup de m'aider!


Carim
Le #5380561
Désolé ... je sUis DéFormé ...

UDF = User Defined Function ...
LSteph
Le #5380551
Re,

alors tu as une fonction toute faite pour cela directement dans excel
Grande.Valeur

voici en exemple (deux versions):

http://cjoint.com/?mqnBJZXR4M

http://cjoint.com/?mqnCZnAdDy

Ce sujet a été traité souvent dans le forum et il en ressort
des exemples aussi bien avec que sans vba:
http://www.excelabo.net/moteurs/motsclefs.php?mot=grande.valeur
http://www.excelabo.net/moteurs/motsclefs.php?mot=comparer
http://www.excelabo.net/moteurs/motsclefs.php?mot=classements

--
lSteph

On 16 déc, 12:32, LSteph
Bonjour,

J'aimerais savoir s'il est possible de faire une fonction avec deux
paramètres.
Bien sûr exemple simpliste:


Function hypoth(x As Single, y As Single) As Single
hypoth = (x ^ 2 + y ^ 2) ^ (1 / 2)
End Function

Public Function ClassementF
Attention selon le sens de classement s'il s'agit de classer (tri)une

fonction n'a pas vocation à déplacer des éléments dans une feuille.
Une fonction renvoie un résultat. Alors c'est peut-être pour cela que tu
ajoutes une sub en dessous

fonction, mais il bugge avant de les lire donc je ne les ai pas écrits


Précisément si tu veux qu'on y voit quelque chose faut tout mettre
et dire ce que tu veux faire avec quoi, parce que là "classement" c'est
pas tout clair au niveau de ce que tu veux utiliser ,ensuite obtenir et où.

Cordialement.

--
lSteph


Alors voilà l'explication de ce que je veux faire.
Je cherche à faire le classement d'une compétition, mettre 1 à celui
qui a le plus de points, 2 au deuxième ... et mettre la même place si
j'ai des ex-aequo.
J'y arrive, mais comme cette compétition comporte plusieurs manches,
je veux répéter ce classement à chaque manche.
Au lieu de réécrire 4 fois la même chose, j'aimerais paramétrer ma
macro.

Ma fonction entière est:

Public Function ClassementF(ColonneClt)

'En attendant d'arriver à mettre les deux paramètres
ColonneScore = "J"

ligne = Range("C1").End(xlDown).Row
DiffColonne = Range(ColonneScore & "1").Column - Range(ColonneClt &
"1").Column

'Classer selon le cumul
Cells.Select
Selection.Sort Key1:=Range(ColonneScore & "3"),
Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal

' Mettre 1 au rang du premier en donnant comme rang le N° de ligne
moins 2
Range(ColonneClt & "3").Select
ActiveCell.FormulaR1C1 = "=ROW(RC[" & DiffColonne & "])-2"

' Au suivant mettre son N° de ligne -2 s'il est différent du
précédent,sinon mettre comme le précédent
For Each LaCellule In Range(ColonneClt & "4", ColonneClt & ligne)
LaCellule.FormulaR1C1 = "=+IF(RC[" & DiffColonne & "]=R[-1]C[" &
DiffColonne & "],R[-1]C,ROW(RC[-1])-2)"
Next LaCellule

'Collage spécial valeurs
Range(ColonneClt & "3", ColonneClt & ligne).Copy
Range(ColonneClt & "3").PasteSpecial Paste:=xlPasteValues

End Function

Et je l'appelle dans une sub:

Sub Classement()
'Classer selon le cumul: Score=J, Clt=A
ClassementF ("A")
End Sub

Merci beaucoup de m'aider!




LSteph
Le #5380541
Bonjour Carim,

;-)
Voilà une Utile Définition Finalement!

Bon Dimanche

--
lSteph

Désolé ... je sUis DéFormé ...

UDF = User Defined Function ...


steph05
Le #5380531
On 16 déc, 13:32, LSteph
Bonjour Carim,

;-)
Voilà une Utile Définition Finalement!

Bon Dimanche

--
lSteph




Désolé ... je sUis DéFormé ...

UDF = User Defined Function ...- Masquer le texte des messages préc édents -


- Afficher le texte des messages précédents -


Merci beaucoup.
Mais si un jour j'ai besoin de faire une fonction avec 2 colonnes en
paramètre, ça peut se faire?
Merci de votre aide


Philippe.R
Le #5380501
Bonjour,
Regarde du côté de la fonction native d'Excel :

=rang()
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"steph05" news:
On 16 déc, 12:32, LSteph
Bonjour,

J'aimerais savoir s'il est possible de faire une fonction avec deux
paramètres.
Bien sûr exemple simpliste:


Function hypoth(x As Single, y As Single) As Single
hypoth = (x ^ 2 + y ^ 2) ^ (1 / 2)
End Function

Public Function ClassementF
Attention selon le sens de classement s'il s'agit de classer (tri)une

fonction n'a pas vocation à déplacer des éléments dans une feuille.
Une fonction renvoie un résultat. Alors c'est peut-être pour cela que tu
ajoutes une sub en dessous

fonction, mais il bugge avant de les lire donc je ne les ai pas écrits


Précisément si tu veux qu'on y voit quelque chose faut tout mettre
et dire ce que tu veux faire avec quoi, parce que là "classement" c'est
pas tout clair au niveau de ce que tu veux utiliser ,ensuite obtenir et
où.

Cordialement.

--
lSteph


Alors voilà l'explication de ce que je veux faire.
Je cherche à faire le classement d'une compétition, mettre 1 à celui
qui a le plus de points, 2 au deuxième ... et mettre la même place si
j'ai des ex-aequo.
J'y arrive, mais comme cette compétition comporte plusieurs manches,
je veux répéter ce classement à chaque manche.
Au lieu de réécrire 4 fois la même chose, j'aimerais paramétrer ma
macro.

Ma fonction entière est:

Public Function ClassementF(ColonneClt)

'En attendant d'arriver à mettre les deux paramètres
ColonneScore = "J"

ligne = Range("C1").End(xlDown).Row
DiffColonne = Range(ColonneScore & "1").Column - Range(ColonneClt &
"1").Column

'Classer selon le cumul
Cells.Select
Selection.Sort Key1:=Range(ColonneScore & "3"),
Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal

' Mettre 1 au rang du premier en donnant comme rang le N° de ligne
moins 2
Range(ColonneClt & "3").Select
ActiveCell.FormulaR1C1 = "=ROW(RC[" & DiffColonne & "])-2"

' Au suivant mettre son N° de ligne -2 s'il est différent du
précédent,sinon mettre comme le précédent
For Each LaCellule In Range(ColonneClt & "4", ColonneClt & ligne)
LaCellule.FormulaR1C1 = "=+IF(RC[" & DiffColonne & "]=R[-1]C[" &
DiffColonne & "],R[-1]C,ROW(RC[-1])-2)"
Next LaCellule

'Collage spécial valeurs
Range(ColonneClt & "3", ColonneClt & ligne).Copy
Range(ColonneClt & "3").PasteSpecial Paste:=xlPasteValues

End Function

Et je l'appelle dans une sub:

Sub Classement()
'Classer selon le cumul: Score=J, Clt=A
ClassementF ("A")
End Sub

Merci beaucoup de m'aider!


Publicité
Poster une réponse
Anonyme