Bonjour à tous, je suis confrontée à un problème qui dure depuis quelques jours maintenant et je ne sais comment le solutionner. jJ remercie par avance les personnes qui voudront bien se pencher sur mon cas, et m'aider à élucider ce soucis.
Voilà, j'ai créé une base de données où j'entre les réponses des individus à un formulaire de 10 questions dans la table Suivi Aidant. (Les variables contenant les réponses aux 10 questions s'appelant SFQ31 SFQ32 SFQ33 [...] SFQ39 SFQ310)
En fonction de leurs réponses, apportées aux dix questions, j'obtiens un score (variable SFPF).
Ce score est calculé de la manière suivante :
Par question,
si la réponse est 1, cela vaut 0 point
si la réponse est 2, 50 points
si la réponse est 3, 100 points
si la réponse est 9, valeur manquante
On fait la somme des points cummulés par question, le tout étant divisé par 10, pour obtenir le score,
Remarque : si une valeur manquante figure parmi les réponses, ou une case n'est pas complétée, on n'exécute aucun calcul.
exemple :
réponses : 1 1 1 1 1 2 2 2 2 2
score : (0 +0 +0 +0 +0 +50 +50 +50 +50 +50)/10 = 25
Voici les codes VBA :
Public Function CalculScore(prmSFQ31 As Variant, prmSFQ32 As Variant, prmSFQ33 As Variant, prmSFQ34 As Variant, prmSFQ35 As Variant, prmSFQ36 As Variant, prmSFQ37 As Variant, prmSFQ38 As Variant, prmSFQ39 As Variant, prmSFQ310 As Variant) As Double
Dim result As Double
Const CALCUL_IMPOSSIBLE As Long = 99999
If IsNull(prmSFQ31) Or IsNull(prmSFQ32) Or IsNull(prmSFQ33) Or IsNull(prmSFQ34) Or IsNull(prmSFQ35) Or IsNull(prmSFQ36) Or IsNull(prmSFQ37) Or IsNull(prmSFQ38) Or IsNull(prmSFQ39) Or IsNull(prmSFQ310) Then
result = CALCUL_IMPOSSIBLE
ElseIf prmSFQ31 = 9 Or prmSFQ32 = 9 Or prmSFQ33 = 9 Or prmSFQ34 = 9 Or prmSFQ35 = 9 Or prmSFQ36 = 9 Or prmSFQ37 = 9 Or prmSFQ38 = 9 Or prmSFQ39 = 9 Or prmSFQ310 = 9 Then
result = CALCUL_IMPOSSIBLE
Else
result = result + CalculScoreQuestion(prmSFQ31)
result = result + CalculScoreQuestion(prmSFQ32)
result = result + CalculScoreQuestion(prmSFQ33)
result = result + CalculScoreQuestion(prmSFQ34)
result = result + CalculScoreQuestion(prmSFQ35)
result = result + CalculScoreQuestion(prmSFQ36)
result = result + CalculScoreQuestion(prmSFQ37)
result = result + CalculScoreQuestion(prmSFQ38)
result = result + CalculScoreQuestion(prmSFQ39)
result = result + CalculScoreQuestion(prmSFQ310)
result = result / 10
End If
CalculScore = result
End Function
-------------------------------------------------------------
Private Function CalculScoreQuestion(prmSFPF As Long) As Double
Select Case prmSFPF
Case 1: result = 0
Case 2: result = 50
Case 3: result = 100
Case Else
'Cas impossible
' Error 5
End Select
CalculScoreQuestion = CalculScoreQuestion + result
End Sub
-----------------------------------------------------------
et la requête SQL :
UPDATE [Suivi Aidant] SET [Suivi Aidant].SFPF = CalculScore([Suivi Aidant].SFQ31,[Suivi Aidant].SFQ32,[Suivi Aidant].SFQ33,[Suivi Aidant].SFQ34,[Suivi Aidant].SFQ35,[Suivi Aidant].SFQ36,[Suivi Aidant].SFQ37,[Suivi Aidant].SFQ38,[Suivi Aidant].SFQ39,[Suivi Aidant].SFQ310);
Mon problème est le suivant : lorsque j'exécute la macro, on me dit
erreur de compilation, type d'argument byref incompatible
En magouillant un peu, j'ai vu qu'avec l'inclussion d'un db as database dans calculscore() le problème disparaissait mais laissait place à un nouveau : une fois sur deux la requête n'est pas possible : nombre d'arguments incorrects (surement à cause de db as database. Et quand bien même elle s'exécuterait, elle trouve un TROISIEME PROBLEME : erreur de conversion de type, alors que mes variables SFQ31 jusqu'à SFQ310 sont définies comme numériques et entiers longs (ce sont cependant des listes déroulantes, le problème vient-il de là?)
et SFPF comme numérique et réel double.
En espérant que quelqu'un voudra bien m'aider à sortir de ce soucis ... merci