Redim Preserve

  • Initiateur de la discussion Popeye
  • Date de début
P

Popeye

Guest
Bonjour,

Lors de l'execution de ce morceau de programme excel me ressort le message d'erreur 'erreur d'execution 9' indice en dehors de plage.

Code:
sub click
Dim Tablo() as long
Dim tableau() as param
call RemplissageTableau(Tablo)
end sub

sub RemplissageTableau(tablo() as long)
dim k as integer
ncelrecup = 0 'UBound(TCelas, 1)
k = ncelrecup + Tableau(i).NombreCelas
(->) ReDim Preserve TCelas( k - 1, 2) As Long
end sub

j'ajoute que tableau() est un tableau de param qui sont des données personnalisées et que tableau(i).nombrecelas renvoie un entier. De toute manière le problème ne vien pas de la mais de (->)

le code me semble bon, mais de toute évidence il l'est pas lol quelqu'un pourrait il m'aider?
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Il ne faut pas oublier une chose avec redim preserve

Voilà ce que dit l'aide vba

Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner que la dernière dimension du tableau. Vous ne pouvez en aucun cas modifier le nombre de dimensions. Par exemple, si votre tableau n'a qu'une dimension, vous pouvez la modifier puisqu'il s'agit de la dernière et seule dimension. Toutefois, si le tableau compte plusieurs dimensions, seule la taille de la dernière dimension est modifiable si vous souhaitez préserver le contenu du tableau. L'exemple suivant montre comment augmenter la taille de la dernière dimension d'un tableau dynamique sans effacer les données qu'il contient :

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

De même, le mot clé Preserve ne permet de redimensionner un tableau qu'en modifiant la limite supérieure ; toute modification de la limite inférieure provoque une erreur.

Et là j'ai l'impression que tu veux changer la première dimension de ton tableau

Bon courage
 

DSA

XLDnaute Junior
Bonjour,

Une première chose, le Redim Preserve ne permet de ne redimensionner que la dernière dimension. Dans ton cas, tu essaye de redimensionner la première => cela bloque. je te conseille de passer par un tableau pivot, c'est un peu plus lourd.... De plus, au vue de tes déclaration de variable, je crains que ta variable Tableau ne soit pas visible par ta sub RemplisageTableau => met là plutôt dans la partie déclaration....

J'espère que cela peux t'aider

A+

DSA
 

Hervé

XLDnaute Barbatruc
Bonjour

L'instruction redim preserve modifie la taille d'un tableau sans perdre les valeurs, mais tu ne peux modifier que la derniere dimensions, et non la premiere comme dans ton cas.

De plus tu ne peux associer un redim preserve à une déclaration de type , en somme ton code devrait ressembler à ceci :

dim TCelas () as long
ReDim Preserve TCelas( 2, k - 1)

Je fais confiance au pro du forum pour venir me mettre une grande baffe si j'ai dit une bétise :)

salut
 

Statistiques des forums

Discussions
312 238
Messages
2 086 491
Membres
103 234
dernier inscrit
matteo75654548