Tableaux dans VBA : Dépassement de capacité

Xanthar

XLDnaute Nouveau
Bonjour à tous,

Voici mon problème (Excel 2003 pour Windows XP) :

Je veux créer une matrice dans VBA pour reproduire k tableaux de i lignes et de j colonne sur h feuilles.

Premièrement, j'insère les "dit" tableaux dans la matrice C() (première partie du code). (ça fonctionne, car j'ai essayé de les imprimer dans des cellules et ça fonctionne).

Deuxièmement, (et c'est là que ça plante) je veux créer une matrice M() qui sera le résultat d'opérations sur C(). Par contre, lorsque je mets mon nombre de tableaux plus grand que 3 (k), ça me dit "Dépassement de capacité". Mes opérations sont sur des milliards.

Code:
Dim C() As Double
Dim M() As Double
Dim h, k, i, j As Double

ReDim C(4, 12, 16, 9)
ReDim M(4, 12, 16, 9)

'réclamations, couts et membres par région

For h = 1 To 1
If h = 1 Then
MySheet = "RJTL"
ElseIf h = 2 Then
MySheet = "RITL"
ElseIf h = 3 Then
MySheet = "OBRJTL"
ElseIf h = 4 Then
MySheet = "OBRITL"
End If

For k = 1 To 12
For i = 1 To 16
For j = 1 To 9

If k = 4 Then
C(h, k, i, j) = 0
Else
C(h, k, i, j) = Worksheets(MySheet).Cells(i + 7 + k * 45, j + 1).Value
End If

Next j
Next i
Next k
Next h

'***

'rates par région
'h = type de soins
'k = # région

For h = 1 To 1
For k = 1 To 4
For i = 1 To 16
For j = 1 To 3

If i = 15 Then
M(h, k, i, j) = 0
Else
If j = 3 Then
M(h, k, i, j) = ((C(h, k, i, j - 2) + C(h, k, i, j - 1)) / 9) / C(h, k, i, j + 6)
Else
M(h, k, i, j) = (C(h, k, i, j) / 9) / C(h, k, i, j + 6) '///*** ça plante ici ***///
End If
End If

Next j
Next i
Next k
Next h

'***

J'espère que j'ai été assez clair.

Merci d'avance

Xanthar
 
C

Compte Supprimé 979

Guest
Re : Tableaux dans VBA : Dépassement de capacité

Bonsoir Xanthar et bienvenue sur le forum ;)

Je pense que ton problème vient tout simplement du type de tes variables

Double, type de données
Type de données stockant sur 64 bits les nombres à virgule flottante en double précision compris entre -1,79769313486231E308 et -4,94065645841247E-324 pour les valeurs négatives, et entre 4,94065645841247E-324 et 1,79769313486232E308 pour les valeurs positives. Dans Visual Basic, le signe dièse (#) est le caractère de déclaration du type Double.

Mieux vaudrait, je pense, utilisé le type :
Long, type de données
Nombre entier codé sur 4 octets et dont la valeur est comprise entre -2 147 483 648 et 2 147 483 647. Dans Visual Basic, le signe et commercial (&) est le caractère de déclaration du type Long.

A+
 

Xanthar

XLDnaute Nouveau
Re : Tableaux dans VBA : Dépassement de capacité

Merci Bruno,

Le type Long n'est pas pour les entiers ? Je n'ai pas seulement des entiers dans mes tableaux... Le pire, c'est que ça ne plante pas quand je mets moins que 3 tableaux (k<=3). Bizarre...

merci

Xanthar
 

Xanthar

XLDnaute Nouveau
Re : Tableaux dans VBA : Dépassement de capacité

Ok je suis stupide :p

Je viens de me rendre compte de mon erreur... "Erreur bête de programmation"

Désolé de vous avoir dérangé

Le problème est que je mettais le tableau 4 à 0 dans le C(), alors il fallait je le mette à 0 dans le M() aussi.

Le fait de parler ici m'a fait réalisez j'imagine :p

Ça n'aura pas servi à rien par contre, car j'ai découvert ce forum qui va m'être probablement encore utile

Merci

faut-il que je change le titre du message ?
 

Cousinhub

XLDnaute Barbatruc
Re : Tableaux dans VBA : Dépassement de capacité

Bonjour,

attention dans la déclaration de tes variables :

Code:
Dim h, k, i, j As Double

ainsi écrit, seul j est en Double...

la bonne syntaxe :

Code:
Dim h As Double, k As Double, i As Double, j As Double

si tu veux qu'ils soient tous déclarés en Double...

Bon Dimanche
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote