A voir également:
- Utiliser une fonction sous vba en excel
- Excel fonction si et - Guide
- Liste déroulante excel - Guide
- Utiliser chromecast - Guide
- Déplacer une colonne excel - Guide
- Calculer une moyenne sur excel - Guide
12 réponses
Bonjour
Ta fonction doit rendre une valeur, c'est celle qui sera affichée dans la cellule ou tu as mis =gestion(127)
Pour rendre une valeur, tu dois mettre quelque part dans ta fonction
gestion = quelque chose
C'est ce quelque chose qui apparaîtra dans ta cellule
Ta fonction doit rendre une valeur, c'est celle qui sera affichée dans la cellule ou tu as mis =gestion(127)
Pour rendre une valeur, tu dois mettre quelque part dans ta fonction
gestion = quelque chose
C'est ce quelque chose qui apparaîtra dans ta cellule
lenrok
Messages postés
1437
Date d'inscription
mardi 22 juillet 2003
Statut
Membre
Dernière intervention
12 décembre 2009
376
3 janv. 2008 à 18:07
3 janv. 2008 à 18:07
Bonjour marie,
Va sur les liens suivants :
https://vb.developpez.com/
https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/
Tu devrais ton bonheur...
Va sur les liens suivants :
https://vb.developpez.com/
https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/
Tu devrais ton bonheur...
merci à toi!!
En fait ,j'ai cherché et j'ai trouvé que je dois enregistrer ma fonction dans un module comme ça elle devient une fonction personnalisée le probleme est que losque j'appelle la fonction dans excel ça marche pas erreur valeur!!
la fonction est la suivante :
Function gestion(N As Integer) As double
Dim i As Integer
Dim s As Double
Dim max As Double
Dim datecheance As Range
Dim datevalo As Range
'N = 127
s = 0
max = 0
Set datevalo = Range("B2")
Set datecheance = Range("B128")
For i = 1 To N
If max < Range("C2").Offset(i - 1) Then
max = Range("C2").Offset(i - 1)
End If
Range("E2").Offset(i - 1) = max
If Range("E2").Offset(i - 1) >= 1050 And Range("E2").Offset(i - 1) <= 1100 Then
Range("F2").Offset(i - 1) = 0.5 * (Range("E2").Offset(i - 1) + 1050)
ElseIf Range("E2").Offset(i) >= 1100 And Range("E2").Offset(i - 1) <= 1150 Then
Range("F2").Offset(i - 1) = 0.5 * (Range("E2").Offset(i - 1) + 1100)
ElseIf Range("E2").Offset(i - 1) >= 1150 Then
Range("F2").Offset(i - 1) = 0.5 * (Range("E2").Offset(i - 1) + 1150)
Else
Range("F2").Offset(i - 1) = 0.5 * (Range("E2").Offset(i - 1) + 1000)
End If
s = s + Range("F2").Offset(i - 1)
Range("G2").Offset(i - 1) = s
Range("h2").Offset(i - 1) = Exp((datecheance - datevalo.Offset(i - 1)) / 365)
Range("i2").Offset(i - 1) = Range("h2").Offset(i - 1) * Range("G2").Offset(i - 1) / Range("A2").Offset(i - 1)
Next i
ActiveSheet.Range("i2:i9").Clear
End Function
dans excel j'ai mis" =gestion(127) "mais ça marche pas
quelqu'un peut m'aider???
merci d'avance
marie
En fait ,j'ai cherché et j'ai trouvé que je dois enregistrer ma fonction dans un module comme ça elle devient une fonction personnalisée le probleme est que losque j'appelle la fonction dans excel ça marche pas erreur valeur!!
la fonction est la suivante :
Function gestion(N As Integer) As double
Dim i As Integer
Dim s As Double
Dim max As Double
Dim datecheance As Range
Dim datevalo As Range
'N = 127
s = 0
max = 0
Set datevalo = Range("B2")
Set datecheance = Range("B128")
For i = 1 To N
If max < Range("C2").Offset(i - 1) Then
max = Range("C2").Offset(i - 1)
End If
Range("E2").Offset(i - 1) = max
If Range("E2").Offset(i - 1) >= 1050 And Range("E2").Offset(i - 1) <= 1100 Then
Range("F2").Offset(i - 1) = 0.5 * (Range("E2").Offset(i - 1) + 1050)
ElseIf Range("E2").Offset(i) >= 1100 And Range("E2").Offset(i - 1) <= 1150 Then
Range("F2").Offset(i - 1) = 0.5 * (Range("E2").Offset(i - 1) + 1100)
ElseIf Range("E2").Offset(i - 1) >= 1150 Then
Range("F2").Offset(i - 1) = 0.5 * (Range("E2").Offset(i - 1) + 1150)
Else
Range("F2").Offset(i - 1) = 0.5 * (Range("E2").Offset(i - 1) + 1000)
End If
s = s + Range("F2").Offset(i - 1)
Range("G2").Offset(i - 1) = s
Range("h2").Offset(i - 1) = Exp((datecheance - datevalo.Offset(i - 1)) / 365)
Range("i2").Offset(i - 1) = Range("h2").Offset(i - 1) * Range("G2").Offset(i - 1) / Range("A2").Offset(i - 1)
Next i
ActiveSheet.Range("i2:i9").Clear
End Function
dans excel j'ai mis" =gestion(127) "mais ça marche pas
quelqu'un peut m'aider???
merci d'avance
marie
en fait j'ai une serie des dates (colonne A)et des vL (colonne B)
à la fin ma fonction va me donner une colone de N valeurs apres calcule de max entre ces vl dans chaque ligne et apres calcul de VLT puis la somme et la moyenne !!!!
je sais pas si c'est juste d'utiliser le boucle for qui sert à calculer la valeur de chaque cellule de colonne recherché!!!
c'est possible d'avoir plusieurs valeurs avec une fonction personnalisée!!!
merci d'avance pour votre aide
à la fin ma fonction va me donner une colone de N valeurs apres calcule de max entre ces vl dans chaque ligne et apres calcul de VLT puis la somme et la moyenne !!!!
je sais pas si c'est juste d'utiliser le boucle for qui sert à calculer la valeur de chaque cellule de colonne recherché!!!
c'est possible d'avoir plusieurs valeurs avec une fonction personnalisée!!!
merci d'avance pour votre aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lenrok
Messages postés
1437
Date d'inscription
mardi 22 juillet 2003
Statut
Membre
Dernière intervention
12 décembre 2009
376
4 janv. 2008 à 18:44
4 janv. 2008 à 18:44
Bonjour marie,
Tu écris : 'N = 127
Pourquoi as-tu mis une apostrohe devant N ? C'est normal ?
Tu écris : 'N = 127
Pourquoi as-tu mis une apostrohe devant N ? C'est normal ?
j'ai mis appostrophe pour dire que c'est une commentaire à fin que vba ne prends pas compte de cette valeur!!!
lenrok
Messages postés
1437
Date d'inscription
mardi 22 juillet 2003
Statut
Membre
Dernière intervention
12 décembre 2009
376
4 janv. 2008 à 18:54
4 janv. 2008 à 18:54
Bonjour marie,
OK pour moi, j'utilise plus le language C...
Pas trop de similitude au niveau des écritures codes....
Par contre, tu devrais avoir une fenêtre de debugage.As-tu mis ta variable dedans, et tu travailles en mode pas à pas.
Cela, va te permetrre de voir l'évolution de ta bouche : For i = 1 To N jusqu'au Next i
OK pour moi, j'utilise plus le language C...
Pas trop de similitude au niveau des écritures codes....
Par contre, tu devrais avoir une fenêtre de debugage.As-tu mis ta variable dedans, et tu travailles en mode pas à pas.
Cela, va te permetrre de voir l'évolution de ta bouche : For i = 1 To N jusqu'au Next i
merci à toi
je pense que je dois travailler avec les tableaux car j'ai N valeur a chercher et apparament les fonctions personnalisées envoient qu'une seule valeur !!!
je sais pas ,,,??? c'est juste ou j'ai tort??
je pense que je dois travailler avec les tableaux car j'ai N valeur a chercher et apparament les fonctions personnalisées envoient qu'une seule valeur !!!
je sais pas ,,,??? c'est juste ou j'ai tort??
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 711
4 janv. 2008 à 18:58
4 janv. 2008 à 18:58
bonjour
En fait tu n'as pas écris une fonction personnalisée mais une procédure macro qui ne fourni aucun résultat mais va modifier des cellules bien précises.
Tu ferais mieux de voir si tu peux lancer ta macro de manière événementielle, par exemple lorsque ta valeur 127 change.
En fait tu n'as pas écris une fonction personnalisée mais une procédure macro qui ne fourni aucun résultat mais va modifier des cellules bien précises.
Tu ferais mieux de voir si tu peux lancer ta macro de manière événementielle, par exemple lorsque ta valeur 127 change.
est ce que je peux mettre les 127 valeurs que j'ai dans un tableau ? j'arrive pas à identifier les variables d'entrer dans la fonction
j'ai essayé ça mais ça marche pas!!!
function gestion(tab1(127)as date , tab2 (127) as string )as tab(127)as string
pour dire que ma fonction va me donner un tableau de 127 variables (nombres réels)
quelqu'un pourrais me guider??
merci
j'ai essayé ça mais ça marche pas!!!
function gestion(tab1(127)as date , tab2 (127) as string )as tab(127)as string
pour dire que ma fonction va me donner un tableau de 127 variables (nombres réels)
quelqu'un pourrais me guider??
merci
Utilisateur anonyme
4 janv. 2008 à 21:03
4 janv. 2008 à 21:03
Bonjour,
Quelques observations !
La déclaration suivante est douteuse :
Le mot [ max ] est un mot réservé.
La déclaration suivante est incomplète :
La méthode offset possède 2 dimensions !
Perso je ne l'ai jamais utilisé de façon implicite
a une dimension, je recommande l'utilisation de :
Offset( i - 1, 0 )
Pour retourner une valeur, celle-ci doit être affecté !
La fonction est déclaré comme suit :
Par analogie, il faut lire : [ Dim Gestion As Double ]
d'où le besoin de faire l'affectation !
J'ai bien testé le code, mais celui-ci tombe dans une
boucle récursive, lors de l'instruction :
En fait je suis un peu d'accord avec gbinforme, cette fonction devrait
plutôt être une procédure évènementielle.
Lupin
Quelques observations !
La déclaration suivante est douteuse :
Dim max As Double
Le mot [ max ] est un mot réservé.
La déclaration suivante est incomplète :
If max < Range("C2").Offset(i - 1) Then
La méthode offset possède 2 dimensions !
Perso je ne l'ai jamais utilisé de façon implicite
a une dimension, je recommande l'utilisation de :
Offset( i - 1, 0 )
Pour retourner une valeur, celle-ci doit être affecté !
La fonction est déclaré comme suit :
Function gestion(N As Integer) As double
Par analogie, il faut lire : [ Dim Gestion As Double ]
d'où le besoin de faire l'affectation !
... Range("i2").Offset(i - 1) = Range("h2").Offset(i - 1) * Range("G2").Offset(i - 1) / Range("A2").Offset(i - 1) Next i ActiveSheet.Range("i2:i9").Clear Gestion = s End Function
J'ai bien testé le code, mais celui-ci tombe dans une
boucle récursive, lors de l'instruction :
Range("E2").Offset(i - 1,0) = Ce_max
En fait je suis un peu d'accord avec gbinforme, cette fonction devrait
plutôt être une procédure évènementielle.
Lupin
Utilisateur anonyme
4 janv. 2008 à 21:15
4 janv. 2008 à 21:15
re :
À placer derrière la feuille visé !
attention, le code n'est pas testé, n'ayant pas de données.
Lupin
À placer derrière la feuille visé !
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim Resultat As Double If (Target.Address = "$A$1") Then If ((Target > 0) And (Target < 250)) Then Resultat = Gestion(Target.Value) End If End If End Sub ' Function Gestion(N As Integer) As Double Dim i As Integer Dim s As Double Dim CeMax As Double Dim datecheance As Range Dim datevalo As Range s = 0 CeMax = 0 Set datevalo = Range("B2") Set datecheance = Range("B128") For i = 1 To N If CeMax < Range("C2").Offset(i - 1, 0) Then CeMax = Range("C2").Offset(i - 1, 0) End If Range("E2").Offset(i - 1, 0) = CeMax If Range("E2").Offset(i - 1, 0) >= 1050 And Range("E2").Offset(i - 1, 0) <= 1100 Then Range("F2").Offset(i - 1, 0) = 0.5 * (Range("E2").Offset(i - 1, 0) + 1050) ElseIf Range("E2").Offset(i, 0) >= 1100 And Range("E2").Offset(i - 1, 0) <= 1150 Then Range("F2").Offset(i - 1, 0) = 0.5 * (Range("E2").Offset(i - 1, 0) + 1100) ElseIf Range("E2").Offset(i - 1, 0) >= 1150 Then Range("F2").Offset(i - 1, 0) = 0.5 * (Range("E2").Offset(i - 1, 0) + 1150) Else Range("F2").Offset(i - 1, 0) = 0.5 * (Range("E2").Offset(i - 1, 0) + 1000) End If s = s + Range("F2").Offset(i - 1, 0) Range("G2").Offset(i - 1, 0) = s Range("h2").Offset(i - 1, 0) = Exp((datecheance - datevalo.Offset(i - 1, 0)) / 365) If (Range("A2").Offset(i - 1, 0).Value > 0) Then Range("i2").Offset(i - 1, 0) = Range("h2").Offset(i - 1, 0) * Range("G2").Offset(i - 1, 0) / Range("A2").Offset(i - 1, 0) Else Range("i2").Offset(i - 1, 0).Value = 0 End If Next i ActiveSheet.Range("i2:i9").Clear Gestion = s End Function '
attention, le code n'est pas testé, n'ayant pas de données.
Lupin
salut à vous j'ai une petite remarque à ajouter sur cette fonction
je pense qu'en plus de tout ca tu dois déclarer ta fonction comme une fonction public comme cela : Public Function Gestion ( N as Integer) as Double
par ce que sous VBA tout est classe : la feuille Excel est une classe alors si tu veux que cette classe pourra utiliser cette fonction ( autrement dit avoir un nouveau comportement ou une nouvelle méthode) tu dois enregistrer cette fonction dans un module standard et déclarer cette fonction comme Public
Cordialement yassine
je pense qu'en plus de tout ca tu dois déclarer ta fonction comme une fonction public comme cela : Public Function Gestion ( N as Integer) as Double
par ce que sous VBA tout est classe : la feuille Excel est une classe alors si tu veux que cette classe pourra utiliser cette fonction ( autrement dit avoir un nouveau comportement ou une nouvelle méthode) tu dois enregistrer cette fonction dans un module standard et déclarer cette fonction comme Public
Cordialement yassine