XL 2016 MACRO QUI NE FONCTIONNE PAS CORRECTEMENT

Laurence2626

XLDnaute Nouveau
Bonjour à tous

J'ai un user form dans lequel je calcule des valeurs et selon ses valeurs calculées ou saisies je fait une macro sous conditions.
Ma macro ne fonctionne pas correctement car quelle que soit la valeur calculée, la macro me rapporte toujours les mêmes valeurs soit 0,4% et 0,208%
Est ce que quelqu'un aurait l'amabilité de me dire ce qui ne va pas dans ma macro n'etant pas u ne professionnelle de vba
Sachant que EFF est saisi par l'utilisateur et QA 1 calculé en fonction des valeurs saisies dans l'userform

Sub csa()

Dim eff As String
Dim qa1 As String

eff = Val(TextEFF2019)
qa1 = Val(TextQA1)


If (qa1 < 1) And (eff >= 2000) Then
Range("D76") = "0,60%"
Range("D78") = "0,312%"

ElseIf (qa1 < 1) And (eff < 2000) Then
Range("D76") = "0,40%"
Range("D78") = "0,208%"

ElseIf (qa1 >= 1) And (qa1 < 2) Then
Range("D76") = "0,20%"
Range("D78") = "0,104%"

ElseIf (qa1 >= 2) And (qa1 < 3) Then
Range("D76") = "0,10%"
Range("D78") = "0,052%"

ElseIf (qa1 >= 3) And (qa1 < 5) Then
Range("D76") = "0,05%"
Range("D78") = "0,026%"

ElseIf (qa1 >= 5) Then
Range("D76") = "EXO"
Range("D78") = "EXO"

Else
Exit Sub
End If
End Sub

En esperant avoir été claire dans mes explications.

Bien à vous

Laurence
 

chris

XLDnaute Barbatruc
Bonjour

Les données saisie dans un userform sont du texte donc il faut les convertir en nombre et au passage prévoir que cela peut ne pas être possible si l'utilisateur a effectué une mauvaise saisie et donc gérer l'erreur.

Pour la conversion voir CInt ou Clng si valeurs entières et pour la gestion d'erreur prévoir en amont du calcul une structure WHILE attendant des résultats corrects pour passer à la suite et intégrant un message d'erreur.

Utiliser plutôt Select Case que l'imbrication de IF

PS : éviter les titres de fil en Majuscules qui, sur internet, équivalent à hurler.
 
Dernière édition:

Laurence2626

XLDnaute Nouveau
Merci à tous les deux
J'abuse si je vous demande d’être un peu plus précis. J'ai remplacé string par integer ça ne marche pas non plus.
Chris je dois avouer que tu m'as perdue. Qua1 est une valeur calculé
qa1 = ((CDbl(TextTOT.Value) / (CDbl(TextEFF2019.Value)) * 100))
En mettant cdbl je pensais que automatiquement ça convertissait en nombre, j'ai lu ca sur internet mais j'ai peut être mal compris?

Merci à vous
 

chris

XLDnaute Barbatruc
RE

Sorry j'ai zappé tes lignes Val qui convertissent en numérique

Mais on ne voit pas la ligne qa1 = ((CDbl(TextTOT.Value) / (CDbl(TextEFF2019.Value)) * 100))

Si tu utilises le pas à pas (F8) et regardes la valeur des variables locales, tu vois quelles valeurs ont eff et qa1 et quelles étapes sont appliquées : ceci devrait te permettre de comprendre ce qui ne va pas
 

Laurence2626

XLDnaute Nouveau
RE

Sorry j'ai zappé tes lignes Val qui convertissent en numérique

Mais on ne voit pas la ligne qa1 = ((CDbl(TextTOT.Value) / (CDbl(TextEFF2019.Value)) * 100))

Si tu utilises le pas à pas (F8) et regardes la valeur des variables locales, tu vois quelles valeurs ont eff et qa1 et quelles étapes sont appliquées : ceci devrait te permettre de comprendre ce qui ne va pas
 

Laurence2626

XLDnaute Nouveau
non effectivement qa1 se calcule dans l'userform pas dans la macro
est ce que l'envoi du fichier pourrait aider à voir ce qui ne va pas?
La macro n'est pas en erreur mais j'ai l'impression qu'il ne passe pas par toutes les conditions.
J'ai bien essayé le F8 mais je n'ai pas vu ce qui bloquait, après je débute dans les macros.
La ca fait plusieurs jours que j'essaie sans resultats !
 

chris

XLDnaute Barbatruc
RE

Dans l'editeur VBE : affiche la fenêtre des variables locales ainsi en pas à pas tu vois les lignes qui s'exécutent et les valeurs prises au fur et à mesure par les variables.

Savoir déboguer ainsi est indispensable pour apprendre

On peut également afficher la fenêtre espions pour y tester d'autres valeurs

Je pense qu'il y a une mauvaise articulation de tes 2 procédures : si tu calcules tes variables avant la procédure csa() il faut lui passer les valeurs
call cas (eff, qa1)
et redéfinir csa
Sub csa(var1 as double, var2 as double)
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 949
Membres
101 851
dernier inscrit
vaiata