Bonjour,
Suite à une question posé sur le forum, j'ai posté une réponse (qui n'était pas la bonne d'ailleurs).
Dans la macro réponse, j'ai fais face à un dépassement de capacité qui a lieu lorsque le résultat d'une multiplication est supérieur à 32767 soit le Max d'un Integer.
Voici 2 exemples, le 1er (CouleurAléatoire) sans erreur, l'autre (CouleurAléatoireV2) avec erreur code 6:
Est-ce que cette erreur est connu et surtout, avez-vous aussi cette erreur où c'est uniquement moi qu'il ai ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Sub TestFonction() Dim R8 As Byte, V8 As Byte, B8 As Byte, RVB24 As Long RVB24 = CouleurAléatoire RVB24 = CouleurAléatoireV2 End Sub 'Fonction permettant de sortir 3 valeurs ByRef (Byte) RVB en 3 x 8 bit et/ou 1 valeur (Long) 1 x 24 bit Public Function CouleurAléatoire(Optional ByRef SortieRouge As Byte, Optional ByRef SortieVert As Byte, Optional ByRef SortieBleu As Byte) As Long Randomize SortieRouge = CByte(Int(Rnd * (255 + 1))) SortieVert = CByte(Int(Rnd * (255 + 1))) SortieBleu = CByte(Int(Rnd * (255 + 1))) CouleurAléatoire = (SortieRouge + SortieVert * CLng(256) + SortieBleu * CLng(65536)) End Function Public Function CouleurAléatoireV2(Optional ByRef SortieRouge As Byte, Optional ByRef SortieVert As Byte, Optional ByRef SortieBleu As Byte) As Long Randomize SortieRouge = CByte(Int(Rnd * (255 + 1))) SortieVert = CByte(Int(Rnd * (255 + 1))) SortieBleu = CByte(Int(Rnd * (255 + 1))) CouleurAléatoireV2 = SortieRouge + SortieVert * 256 + SortieBleu * 65536 End Function
On dirai que le VBA transtype mal le résultat de SortieVert * 256 comme si le résultat était stocké temporairement dans une variable de type Integer. Le fait de mettre des parenthèses et de forcer le résultat en type long avec Clng(SortieVert * 256) semble ne rien changer dutout.
P.S.: Je me suis trompé de sous-forum, il aurai fallu poster dans Général VBA plutôt. Si un modérateur pouvait transporter cette discussion dans Général VBA, ça serait pas mal. Merci.
Partager