C
Compte Supprimé 979
Guest
Bonjour à toutes et à tous,
Petite question du jour pour les pros
En VBA quel est le plus rapide :
1) calculer un résultat avec une formule matricielle et un evaluate()
2) remplir un tableau à 2 dimension et faire les calculs sur ce tableau ?
Voici le code actuel, ou j'utilise pour le moment les 2
Merci d'avance pour vos réponse
A+
Petite question du jour pour les pros
En VBA quel est le plus rapide :
1) calculer un résultat avec une formule matricielle et un evaluate()
2) remplir un tableau à 2 dimension et faire les calculs sur ce tableau ?
Voici le code actuel, ou j'utilise pour le moment les 2
Code:
Public Function MtFRA_FMA(NomFeuille As String) Dim DLig As Long, sForm As String, Ind As Long, Tblo() As Variant
Dim Result As Double, TxFRA As Double, TxFMA As Double
' Recalculer à chaque modification
Application.Volatile
' Initialiser les variables
Result = 0: sForm = ""
' Dernière ligne de la feuille détail
DLig = ThisWorkbook.Sheets("Détail").Range("A" & Rows.Count).End(xlUp).Row
' En cas d'erreur
On Error Resume Next
' # Modification du 20/05/2015
' montant des FRA calculé sur MOe Production
If InStr(1, UCase(VParam("Préfixe_eOTP")), "SO") > 0 Then
' Définir le tableau
ReDim Tblo(DLig - 1, 11)
Tblo = ThisWorkbook.Sheets("Détail").Range("A2:K" & DLig).Value
' Parcourir le tableau pour calculer les FRA/FMA
For Ind = LBound(Tblo) To UBound(Tblo)
If InStr(1, "I302,I303,I306,I304,I310,I305,I311,E302", Tblo(Ind, 4)) > 0 Then
Result = Result + (Tblo(Ind, 10) * Tblo(Ind, 11))
End If
Next Ind
GoTo Suite
End If
' Sinon, selon la prise ne compte du type de Main d'oeuvre
If UCase(VParam("CalculTxFRAFMA")) = "NON" Then
' Préparer la formule
sForm = "=SUMPRODUCT((Détail!A$2:A$" & DLig & "=""" & NomFeuille & """)"
sForm = sForm & "*(LEFT(Détail!E$2:E$" & DLig & ",2)= ""MO"")"
sForm = sForm & "*(Détail!J$2:J$" & DLig & ")*(Détail!K$2:K$" & DLig & "))"
' Calculer el résultat de la formule
Result = Application.Evaluate(sForm)
Else
' Préparer la formule
sForm = "=SUMPRODUCT((Détail!A$2:A$" & DLig & "=""" & NomFeuille & """)"
sForm = sForm & "*(Détail!E$2:E$" & DLig & "= ""MOI"")"
sForm = sForm & "*(Détail!J$2:J$" & DLig & ")*(Détail!K$2:K$" & DLig & "))"
' Calculer le résultat de la formule
Result = Application.Evaluate(sForm)
End If
Suite:
' Récupérer les 2 taux
TxFRA = VParam("TauxFRA"): TxFMA = VParam("TauxFMA")
' Calculer le montant
MtFRA_FMA = (Result * TxFRA) + (Result * TxFMA)
' Rétablir la gestion d'erreur
On Error GoTo 0
End Function
Merci d'avance pour vos réponse
A+