Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction avec 2 paramètres

13 réponses
Avatar
steph05
Bonjour,

J'aimerais savoir s'il est possible de faire une fonction avec deux
param=E8tres.
Parce que j'ai essay=E9 mais ma syntaxe ne doit pas =EAtre correcte parce
que =E7a bugge.

J'ai =E9crit:

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 =E9crits
dans ce message)

Comment dois-je faire?

Merci de votre aide
St=E9phanie

10 réponses

1 2
Avatar
Carim
Bonjour,

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

et ... quelle est ta UDF ...?
Avatar
steph05
On 16 déc, 12:21, Carim wrote:
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

Avatar
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

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


Avatar
LSteph
:o)) ???
Union des Démocrates Français

On 16 déc, 12:21, Carim wrote:
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







Avatar
steph05
On 16 déc, 12:32, LSteph wrote:
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!


Avatar
Carim
Désolé ... je sUis DéFormé ...

UDF = User Defined Function ...
Avatar
LSteph
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 wrote:
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!




Avatar
LSteph
Bonjour Carim,

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

Bon Dimanche

--
lSteph

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

UDF = User Defined Function ...


Avatar
steph05
On 16 déc, 13:32, LSteph wrote:
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


Avatar
Philippe.R
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" a écrit dans le message de
news:
On 16 déc, 12:32, LSteph wrote:
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!


1 2