Variable transmis à une fonction modifiée anormalement

Signaler
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
bonjour à tous
petite bizarrie, est ce normal???

Public Sub AjouteListe(Mot As String, Optional Points As Byte, Optional indav As Byte, Optional nbrelet As Byte, Optional sens As Byte)

NbreSolution = NbreSolution + 1 'comptabilise les solutions
ReDim Preserve Solutions(1 To 5, 1 To NbreSolution)
Solutions(1, NbreSolution) = Mot '1mot
Solutions(2, NbreSolution) = CalculPoint(Mot, indav, sens)
Solutions(3, NbreSolution) = indav 'indice
Solutions(4, NbreSolution) = nbrelet 'nbre let
Solutions(5, NbreSolution) = 1 'sens 1horizon 15 vertical

End Sub

Public Function CalculPoint(Mot As String, ind As Byte, sens As Byte) As Byte
Dim i As Byte
Dim multipli As Byte
Dim Ptlet As Byte, PtMot As Byte, PtMotCroisé As Byte
multipli = 1
For i = 1 To Len(Mot)
Ptlet = tab_point_let(Asc(Mid(Mot, i, 1)))
If sens = 15 Then
PtMotCroisé = PtMotCroisé + (Plateau(ind).Pt_Mot_Av_H) + (Plateau(ind).Pt_Mot_Ap_H)
Else
PtMotCroisé = PtMotCroisé + (Plateau(ind).Pt_Mot_Av_V) + (Plateau(ind).Pt_Mot_Ap_V)
End If
If PtMotCroisé > 0 Then PtMotCroisé = (PtMotCroisé + (Ptlet * Plateau(ind).Bon)) * (Plateau(ind).MotMultipli)
CalculPoint = CalculPoint + PtMotCroisé
PtMotCroisé = 0
multipli = multipli * (Plateau(ind).MotMultipli)
PtMot = PtMot + (Ptlet * Plateau(ind).Bon)
ind = ind + sens
Next i
CalculPoint = (PtMot * multipli)
End Function

la fonction calcul fait évolué l'indice du début de mot jusqu'à la fin du mot
donc une fois le calcul effectué l'indav est augmenté de 5 par exemple ce qui modifie la valeur de solution(3,nbresolution) qui récupère la dernière valeur de l'ind calculé la fonction calcul, alors que normalement la fonction calcul ne renvois pas l'indice mais un nbre de points, deplus si j'ai bien compris par défaut c'est Byref qui est employé donc pas de modification de la valeur de la variable d'origine!!

merci pour vos éclairement

1 réponse

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
107
lol c'est tout le contraire : ByRef = par référence => pointeur envoyé à la fonction qui en profite pour modifier directement la variable !

C'est pour cà qu'il est toujours dangeureux de ne pas préciser comment on veut passer les paramètres : ByVal (pas de modif) ou ByRef (modif des variables !).