Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

erreur: type d'argument byref incompatible

Excel.Deb

XLDnaute Nouveau
Bonjour,
Je souhaite réaliser une macro qui effectue la somme arithmétique avec coefficient et retourne le résultat dans une cellule déterminée.
cependant,le débogeur me sort l'erreur type d'argument byref incompatible.
voici le code:
Function minimiser_dm(i As Integer, m As Integer) As Integer
Dim duree As Variant
Dim dm As Long

dm = 0

For i = 1 To m
dm = dm + (m - i + 1) * Cells(i, 4)
Next i

duree(1, 2) = dm

End Function
Sub macro_somme()

Call minimiser_dm(i, m)

End Sub
Merci de bien vouloir détecter la faille
 

Dranreb

XLDnaute Barbatruc
Votre variable duree n'est pas dimensionnée comme un tableau alors vous ne pouvez pas spécifier d'indices.
Vraiment incompréhensible ce que vous voulez faire.
Ne pourriez vous joindre un tout petit exemple de résultat attendu sur un petit nombre de données, uniquement ce qui intervient dans le calcul ?
 
Dernière édition:

Excel.Deb

XLDnaute Nouveau
oui,dans le fichier que je vais joindre,je voudrais calculer la formule indiquée pour déterminer dm,avec m le nombre total de références et ti sont données dans la colonne D.
 

Pièces jointes

  • spt (1).xls
    106.5 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Bonjour.
La fonction calculant la formule en encadré s'écrirait comme ça :
VB:
Option Explicit
Function dm(ByVal R As Range, Optional ByVal m As Long) As Double
   Dim t(), S As Double, i As Long
   If R.Rows.Count = 1 Then ReDim t(1 To 1, 1 To 1): t(1, 1) = R.Value Else t = R.Value
   If m = 0 Then m = UBound(t, 1)
   For i = 1 To m: S = S + (m - i + 1) * t(i, 1): Next i
   dm = S / m
   End Function
Je déteste utiliser des noms de variables ne commençant pas par une majuscule. Mais puisque les matheux font comme ça …
Écrite dans une cellule cette formule renvoie 2,96770751 :
Code:
=dm($D$2:$D$182)
 
Dernière édition:

Excel.Deb

XLDnaute Nouveau
c'est un code qui marche à merveille,merci Dranreb!
dernière question:si je souhaite implémenter cette fonction dans une macro,au moment du call dm( , ) quels seront les arguments à écrire tant qu'ils ont été appelés par valeur?
 

Dranreb

XLDnaute Barbatruc
Il ne faut pas utiliser Call dm, il faut affecter à une variable ou à une propriété = dm(ActiveSheet.[D2: D182], m)
Le m est facultatif: s'il n'est pas précisé c'est le nombre de lignes de la plage qui est assumé.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…