Variable transmis à une fonction modifiée anormalement

cs_marco62118 Messages postés 176 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 1 avril 2013 - 28 août 2007 à 18:06
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 - 28 août 2007 à 19:05
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

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
28 août 2007 à 19:05
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 !).
0