Optimisation de formule ou macro pour le calcul d'une clé avec condition
Bonjour à Tous,
J’ai besoin de votre aide pour une optimisation de calcul ou de formule
Je cherche une valeur X, c’est une clé
Pour la calculer on doit faire une série de gymnastique, mais on arrive à un résultat
Mais je n’arrive pas automatiser le tout
Là où je perds du temps, durant le parcours, je dois m’arrêter pour faire « une différence d’un résultat avec la dizaine supérieure sachant que si le résultat est égal a 10 la clé prend la valeur 0 »
Voilà là je bug, je ne sais pas encore optimiser cela donc je le fais en 2 étapes
Sur le fichier Excel j’explique mes étapes de calculs pour arriver au résultat de la clé
Qui pourrait m’optimiser cela s’il vous plait ?
En vous remerciant
Bonjour Samexel,
Comme le classeur est ".xlb", avec une petite fonction VBA
Function GetKey(Cel As Range)
Dim Result As String, sVal As String, sVal5 As String
Dim SomPair As Integer, SomImpair As Integer, TotalSom As Integer
Dim CalX As Integer, Ind As Integer
' Valeur de l'étape 5
sVal5 = Mid(Cel, 11, 12)
' Valeur à traiter pourle calcul
sVal = Mid(sVal5, 3, 10)
' Chiffres de rang pair
For Ind = 10 To 1 Step -2
SomPair = SomPair + Val(Mid(sVal, Ind, 1))
Next Ind
SomPair = SomPair * 3
' Chiffres de rang impair
For Ind = 9 To 2 Step -2
SomImpair = SomImpair + Val(Mid(sVal, Ind, 1))
Next Ind
' Total des sommes
TotalSom = SomPair + SomImpair
' Calcul de X
CalX = Round((TotalSom / 10), 0) * 10
CalX = CalX - TotalSom
' Résultat
Result = sVal5 & CalX
GetKey = Result
End Function@+
bonjour à tous,
formule pour la colonne AW
=SI(MOD(AV3;10)=0;0;10-MOD(AV3;10))
la formule pour AW marche tres bien, un grand merci
pour la fonction VBA , ell est supersonique
Re,
C'est juste le problème d'arrondi et le test si pas égal à 10
Function GetKey(Cel As Range)
Dim Result As String, sVal As String, sVal5 As String
Dim SomPair As Integer, SomImpair As Integer, TotalSom As Integer
Dim CalX As Integer, Ind As Integer
' Valeur de l'étape 5
sVal5 = Mid(Cel, 11, 12)
' Valeur à traiter pourle calcul
sVal = Mid(sVal5, 3, 10)
' Chiffres de rang pair
For Ind = 10 To 1 Step -2
SomPair = SomPair + Val(Mid(sVal, Ind, 1))
Next Ind
SomPair = SomPair * 3
' Chiffres de rang impair
For Ind = 9 To 2 Step -2
SomImpair = SomImpair + Val(Mid(sVal, Ind, 1))
Next Ind
' Total des sommes
TotalSom = SomPair + SomImpair
' Calcul de X avec arrondi supérieur
CalX = Application.WorksheetFunction.RoundUp((TotalSom / 10), 0) * 10
CalX = CalX - TotalSom
' Vérifier que CalX n'est pas égal à 10, sinon 0
If CalX = 10 Then CalX = 0
' Résultat
Result = sVal5 & CalX
GetKey = Result
End Functionca devrait être mieux
@+
Ma - gni - fique ,
c'est top, terrifiante d’efficacité,
vous ne pouvez imaginer l’épine du pieds que vous m'enlevez, c'est un cactus meme
Merci infiniment, pour tout et pour la dispo et la réponse rapide
passez une bonne soirée, et un bon weekend
merci a H2SO4 aussi, ah H2SO4 ca me rappelle les années Fac c'etait juste smeno ou mnef, avec en labo des 80286 et les canettes de coca qu'on passaient au vortex, que le temps passe vite...
je vous souhaite a tous de bonne fêtes,
prenez soin de vous et de vos proches, en valeur absolue il n'y a que ca de vrais
encore merci, un grand merci
Sam