Beug avec redim preserve

Résolu/Fermé
quent - 14 août 2014 à 13:49
 quent - 14 août 2014 à 16:32
bonjour, il y a une erreur que je ne comprends pas :
lorsque j'utilise redim preserve 2 fois, le programme plante la deuxieme fois.
exemple, si je met :

dim tableau() as variante
redim preserve tableau(1 to 2,1 to 2)
redim preserve tableau(1 to 3,1 to 2)

ca beugue a la derniere ligne.

savez-vous pourquoi ?
A voir également:

5 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 14/08/2014 à 13:56
Bonjour,

Vous utilisez ReDim Preserve pour pouvoir créer un tableau dynamique. Il faut savoir que seule la seconde dimension du tableau peux être incrémentée.
Par conséquent :
dim tableau() as Variant
redim preserve tableau(1 to 2,1 to 2)
redim preserve tableau(1 to 2,1 to 3) 


Remarque : Tu peux redimensionner et préserver ton tableau en une fois, si tu connais ces bornes à l'avance.
Ainsi :
Dim tableau() As Variant
ReDim Preserve tableau(1 To 13, 1 To 5)

Cordialement,
Franck
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 août 2014 à 14:00
Bonjour,

vous ne pouvez redimensionner que la derniere dimension:

redim preserve tableau(1 to 2,1 to 2) 

redim preserve tableau(1 to 2,1 to 3)
0
merci beaucoup, dans mon cas j'ai juste besoins d'inverser les dimensions mais imaginons que je veuille changer les deux dimension
par exemple :
dim tableau() as variante
redim preserve tableau (1 to 2,1 to 2)
redim preserve tableau (1 to 3,1 to 3)
comment devrai je faire ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
14 août 2014 à 14:21
Dans ce cas, la seule solution à ma connaissance est de passer par un tableau intermédiaire, d'effacer ton tableau et de le redimensionner.

Comme le montre cet exemple :
Sub test()
Dim tableau() As Variant, Temporaire() As Variant

ReDim Preserve tableau(1 To 2, 1 To 3)
For i = 1 To 2
    For j = 1 To 3
        tableau(i, j) = "Liste " & i & j
    Next j
Next i

ReDim Preserve Temporaire(1 To 2, 1 To 3)
Temporaire = tableau

Erase tableau

ReDim Preserve tableau(1 To 3, 1 To 3)

For i = 1 To 2
    For j = 1 To 3
        tableau(i, j) = Temporaire(i, j)
    Next j
Next i

Erase Temporaire

tableau(3, 1) = "ajout1"
tableau(3, 2) = "ajout2"
tableau(3, 3) = "ajout3"

Debug.Print tableau(1, 2) & " - " & tableau(2, 3) & "- " & tableau(3, 2)
End Sub
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
14 août 2014 à 14:18
Re,

mais imaginons que je veuille changer les deux dimension Pas possible
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ok merci
mais c'est quand meme mal fait...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
14 août 2014 à 14:56
0
desoler, je ne l'avait pas vu. c'est une methode qui doit etre asser longue si on utilise de grands tableaux mais ca marche. merci beaucoup a vous deux !
0