Fonction vba excel
Fermé
dani7777
Messages postés
2
Date d'inscription
mardi 24 novembre 2009
Statut
Membre
Dernière intervention
24 novembre 2009
-
24 nov. 2009 à 13:59
dani7777 - 25 nov. 2009 à 16:51
dani7777 - 25 nov. 2009 à 16:51
A voir également:
- Fonction vba excel
- Fonction si et excel - Guide
- Liste déroulante excel - Guide
- Fonction moyenne excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
5 réponses
Bidouilleu_R
Messages postés
1181
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
12 juillet 2012
295
24 nov. 2009 à 15:23
24 nov. 2009 à 15:23
Bonjour,
Sans trop modifier ta macro....
tu mélanges l'entrée et la sortie.... !!!!
ce que je mets en gras représente le fond du problème.
Public Function Coeff (ByVal target As Range) As double
' ici coeff renvoie un double un chiffre à virgule ...ce dont tu as besoin
dim Poubelle as double
poubelle=target.value
' tu testes poubelle
puis
coeff=... ' valeur de sortie après le passage dans select case
et donc disparition de activecell.value
puis
end function
mais pour que tu t'y retrouves
.....
Sans trop modifier ta macro....
tu mélanges l'entrée et la sortie.... !!!!
ce que je mets en gras représente le fond du problème.
Public Function Coeff (ByVal target As Range) As double
' ici coeff renvoie un double un chiffre à virgule ...ce dont tu as besoin
dim Poubelle as double
poubelle=target.value
' tu testes poubelle
puis
coeff=... ' valeur de sortie après le passage dans select case
et donc disparition de activecell.value
puis
end function
mais pour que tu t'y retrouves
.....
Sub test2() y = Coeff(Range("c30")) End Sub Public Function Coeff(ByVal target As Range) As Double Application.Volatile Coeff = target.Value Select Case Coeff Case 0 To 1000000 ActiveCell.Value = 1 Case 1000000 To 1500000 ActiveCell.Value = 1.2 Case 1000000 To 1500000 ActiveCell.Value = 1.3 Case 1500000 To 2000000 ActiveCell.Value = 1.4 Case 2000000 To 2500000 ActiveCell.Value = 1.5 Case 2500000 To 3000000 ActiveCell.Value = 1.6 Case 3500000 To 4000000 ActiveCell.Value = 1.7 Case 4000000 To 4500000 ActiveCell.Value = 1.8 Case 4500000 To 5000000 ActiveCell.Value = 1.9 Case Else ActiveCell.Value = 2 End Select End Function
dani7777
Messages postés
2
Date d'inscription
mardi 24 novembre 2009
Statut
Membre
Dernière intervention
24 novembre 2009
24 nov. 2009 à 16:37
24 nov. 2009 à 16:37
grand merci bidouilleur !
ton aide est appréciée,
j'ai créé un module dans lequel j'ai copié la sub test2 et la fonction coeff. le module est accepté,
et la fonction apparait dans le menu.
mais j'obtiens un message de reference circulaire puis la cellule affiche #value quand je selectionne une cellule contenant une valeur numerique au hasard pour tester. ?
j'ai coché puis décoché la case iteration dans le menu options au cas ou, mais ce n'est pas ça.
Qu'en penses tu ? vraiment merci
ps: est ce que je peux coder case < 1000000 au lieu de case 0 to 1000000 'our inclure des chiffres negatifs ?
dani
ton aide est appréciée,
j'ai créé un module dans lequel j'ai copié la sub test2 et la fonction coeff. le module est accepté,
et la fonction apparait dans le menu.
mais j'obtiens un message de reference circulaire puis la cellule affiche #value quand je selectionne une cellule contenant une valeur numerique au hasard pour tester. ?
j'ai coché puis décoché la case iteration dans le menu options au cas ou, mais ce n'est pas ça.
Qu'en penses tu ? vraiment merci
ps: est ce que je peux coder case < 1000000 au lieu de case 0 to 1000000 'our inclure des chiffres negatifs ?
dani
Bidouilleu_R
Messages postés
1181
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
12 juillet 2012
295
24 nov. 2009 à 17:57
24 nov. 2009 à 17:57
au post 2 j'ai dis ... et tu n'as pas tout lu..
puis
coeff=... ' valeur de sortie après le passage dans select case
et donc disparition de activecell.value
puis
end function
la fonction marche comme ça
puis
coeff=... ' valeur de sortie après le passage dans select case
et donc disparition de activecell.value
puis
end function
la fonction marche comme ça
Public Function Coeff(ByVal target As Range) As Double Application.Volatile Dim dummy As Double dummy = target.Value Select Case Coeff Case Is > 0 < 1000001 ' supérieure à 0 est inférieur à 100001 Coeff = 1 Case 1000000 To 1500000 Coeff = 1.2 Case 1000000 To 1500000 Coeff = 1.3 Case 1500000 To 2000000 Coeff = 1.4 Case 2000000 To 2500000 Coeff = 1.5 Case 2500000 To 3000000 Coeff = 1.6 Case 3500000 To 4000000 Coeff = 1.7 Case 4000000 To 4500000 Coeff = 1.8 Case 4500000 To 5000000 Coeff = 1.9 Case Else Coeff = 2 End Select End Function
cette fois ci ça marche!, on y est presque mais le résultat est toujours 1, quelquesoit le chiffre testé.
j'ai corrigé les montants pour qu'ils ne se mélangent pas
j'ai compris de case me donne toujours le premier coeff.
en testant 3 700 000 par exemple, je devrais avoir 1.6 mystere
aurais tu la gentillesse de me préciser le role de sub test2 ? est ce que cela permet de récupérer l'argument
de la cellule testée ou au contraire d'afficher le résultat dans la cellule de la fonction ?
merci de ta patience...et de ton aide car je réalise que ces codes ne s'improvisent pas et sont un vrai métier
Dani
j'ai corrigé les montants pour qu'ils ne se mélangent pas
j'ai compris de case me donne toujours le premier coeff.
en testant 3 700 000 par exemple, je devrais avoir 1.6 mystere
aurais tu la gentillesse de me préciser le role de sub test2 ? est ce que cela permet de récupérer l'argument
de la cellule testée ou au contraire d'afficher le résultat dans la cellule de la fonction ?
merci de ta patience...et de ton aide car je réalise que ces codes ne s'improvisent pas et sont un vrai métier
Dani
oups, j'ai omis de mettre le code
Sub test2()
y = Coeff(Range("c30"))
End Sub
Public Function Coeff(ByVal target As Range) As Double
Application.Volatile
Dim dummy As Double
dummy = target.Value
Select Case Coeff
Case Is > 0 < 1000000
Coeff = 1
Case 1000001 To 1500000
Coeff = 1.2
Case 1500001 To 2000000
Coeff = 1.3
Case 2000001 To 2500000
Coeff = 1.4
Case 2500001 To 3000000
Coeff = 1.5
Case 3500001 To 4000000
Coeff = 1.6
Case 4000001 To 4500000
Coeff = 1.7
Case 4500001 To 5000000
Coeff = 1.8
Case Else
Coeff = 2
End Select
End Function
Sub test2()
y = Coeff(Range("c30"))
End Sub
Public Function Coeff(ByVal target As Range) As Double
Application.Volatile
Dim dummy As Double
dummy = target.Value
Select Case Coeff
Case Is > 0 < 1000000
Coeff = 1
Case 1000001 To 1500000
Coeff = 1.2
Case 1500001 To 2000000
Coeff = 1.3
Case 2000001 To 2500000
Coeff = 1.4
Case 2500001 To 3000000
Coeff = 1.5
Case 3500001 To 4000000
Coeff = 1.6
Case 4000001 To 4500000
Coeff = 1.7
Case 4500001 To 5000000
Coeff = 1.8
Case Else
Coeff = 2
End Select
End Function
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 257
25 nov. 2009 à 13:26
25 nov. 2009 à 13:26
Bonjour,
ce n'est pas Select Case Coeff que tu veux mais Select Case Target.value
il manque un séparateur dans Case Is > 0 < 1000000, et tu peux raccourcir un peu en utilisant <=
eric
PS: tes coeff ont changé entre ta 1ère et la dernière demande...
ce n'est pas Select Case Coeff que tu veux mais Select Case Target.value
il manque un séparateur dans Case Is > 0 < 1000000, et tu peux raccourcir un peu en utilisant <=
Function Coeff(valeur As Double) As Double Select Case valeur Case Is <= 0 Coeff = 0 Case Is <= 1000000 Coeff = 1 Case Is <= 1500000 Coeff = 1.2 Case Is <= 2000000 Coeff = 1.3 Case Is <= 2500000 Coeff = 1.4 Case Is <= 3000000 Coeff = 1.5 Case Is <= 4000000 Coeff = 1.6 Case Is <= 4500000 Coeff = 1.7 Case Is <= 5000000 Coeff = 1.8 Case Else Coeff = 2 End Select End Function
eric
PS: tes coeff ont changé entre ta 1ère et la dernière demande...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bidouilleu_R
Messages postés
1181
Date d'inscription
mardi 27 mai 2008
Statut
Membre
Dernière intervention
12 juillet 2012
295
25 nov. 2009 à 14:40
25 nov. 2009 à 14:40
c'est juste,
j'avais pas vérifié tous les cas ça m'apprendra!!!
mais ceci dit, personnellement je ne gèrerai pas cela dans la macro, car pour modifier il faut
revenir dans la macro.
Merci à eriic et à dani7777
pour le suivi et promis la prochaine fois je teste : )
j'avais pas vérifié tous les cas ça m'apprendra!!!
mais ceci dit, personnellement je ne gèrerai pas cela dans la macro, car pour modifier il faut
revenir dans la macro.
Merci à eriic et à dani7777
pour le suivi et promis la prochaine fois je teste : )
rien de tel que des neurones qui fonctionnent !
merci à vous deux, c'est gentil, généreux et utile.
une dernière chose pour clore cette discussion,
Comment remplacer les chiffres des coefficients par une cellule ?
et dans ce cas, la fonction recalcule t elle quand je change la valeur
de la cellule ou dois je recompiler ?
merci
bon après midi
Dani
merci à vous deux, c'est gentil, généreux et utile.
une dernière chose pour clore cette discussion,
Comment remplacer les chiffres des coefficients par une cellule ?
et dans ce cas, la fonction recalcule t elle quand je change la valeur
de la cellule ou dois je recompiler ?
merci
bon après midi
Dani
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
31
>
dani7777
25 nov. 2009 à 16:11
25 nov. 2009 à 16:11
bonjour,
j'ai suivi de loin cette discution et pour remplacer les coeffs par des valeurs de cellules:
j'ai suivi de loin cette discution et pour remplacer les coeffs par des valeurs de cellules:
Case Is <= 0 Coeff = [A1] Case Is <= 1000000 Coeff = [A2]et ainsi de suite , on peut aussi écrire Range("A1").value ...
dani7777
>
pou pouille
Messages postés
207
Date d'inscription
mardi 20 octobre 2009
Statut
Membre
Dernière intervention
20 juillet 2012
25 nov. 2009 à 16:51
25 nov. 2009 à 16:51
Merci avec un grand M
pou pouille
c'est parti !
vive comment ça marche !
pou pouille
c'est parti !
vive comment ça marche !