Création d'une fonction

  • Initiateur de la discussion Initiateur de la discussion Sebwan
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

Sebwan

Guest
Bonjour le forum,

Après avoir crée quelques macro VBA, j'aimerais construire une fonction, et je rencontre quelques problèmes (quelle dimension utilisée,...). L'idée est de partie de 2 vecteurs de nombres (mis en lignes ou en colonnes), afin d'en calculer une valeur actuelle...Mais je ne sais pas:

*quelle dimension utilisée pour les vecteurs
*comment aller rechercher l'élément i du vecteur
*comment aller rechercher la longueur de mes vecteurs (longueur variable, mais identique entre les 2 variables)...

Voici mon début de programmation (avec quelques erreurs...)
Function actu(tabl As Range, vale As Range)

a = Length(tabl)
somm = 0
taux1 = 1 / (1 + tabl(1))
valeur1 = vale(1)

For j = 1 To a

If j = 1 Then
taux1 = tabl(1)
valeur1 = vale(1)
somm = valeur1 / taux1
tauxjmoins1 = taux1

Else
tauxj = tauxjmoins1 * tabl(j)
somm = somm + vale(j) / tauxj
tauxjmoins1 = tauxj
End If
Next
End Function


Merci d'avance!
 
Dernière modification par un modérateur:
Re : Création d'une fonction

bonjour Sebwan, Bruno, job,

voici un essai :
Code:
Public Function actu(zone1 As Range, zone2 As Range) As Double
Dim i As Integer, j As Integer, tmp As Double
'zone1 et zone2 doivent être des données sous formes de colonnes
Set zone1 = zone1.Resize(zone1.Rows.Count, 1)
Set zone2 = zone2.Resize(zone2.Rows.Count, 1)
'si zone1 et zone2 ne font pas la même taille, quitter la fonction
If zone1.Cells.Count <> zone2.Cells.Count Then Exit Function
For i = 1 To zone1.Cells.Count
    tmp = 1
    For j = 1 To i
        tmp = tmp * (1 + zone2(j))
    Next j
    actu = actu + zone1(i) / tmp
Next i
End Function
a+
 
Re : Création d'une fonction

Re, salut mromain, tu es rapide 🙂

Ma solution (avec des plages dynamiques nommées dans la feuille) :

Code:
Function Actu(taux As Range, vale As Range) As Double
Dim prod As Double, i As Long
prod = 1
For i = 1 To taux.Count
prod = prod * (1 + taux.Cells(i, 1))
Actu = Actu + vale.Cells(i, 1) / prod
Next
End Function

Edit : peut-être peut-on se passer de VBA, avec une formule générale dans la feuille (quelque soit la dimension des vecteurs) ?

A+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
374
D
Réponses
4
Affichages
1 K
R
Réponses
3
Affichages
4 K
R
O
Réponses
2
Affichages
1 K
olivier91620
O
P
  • Question Question
Réponses
1
Affichages
3 K
Patrosso
P
A
  • Résolu(e)
Réponses
5
Affichages
931
L
  • Question Question
Réponses
4
Affichages
1 K
louloubru
L
J
Réponses
3
Affichages
1 K
Jean pascal
J
O
Réponses
4
Affichages
2 K
othmane_007_007
O
V
  • Question Question
Réponses
5
Affichages
1 K
Vero2782
V
Retour