Redim preserve Tableau() [Résolu]

Signaler
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011
-
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011
-
Slt tout le monde,


Voilà j'ai un tableau qui contient des valeurs.
Mais j'aimerais le redimensionner pour pouvoir rajouter de la place pour mettre des valeurs en plus : le code Redim preserve permet de le faire
exemple :

Dim tableau() As Integer
ReDim tableau(5 - 1) As Integer
Dim go As Integer



For go = 1 To 5
    tableau(RentreValeur) = go
    RentreValeur = RentreValeur + 1
Next go



ReDim Preserve tableau(3 - 1) As Integer
Dim plop As Integer
Dim tre As Integer



For plop = 1 To 3
    tableau(tre) = plop
    tre = tre + 1
Next plop




'MsgBox "fin : " & UBound(tableau)

Le Ubound(tableau) m'afficher "2"
Pourtant auparavant mon tableau avait 4 valeurs ..

Qui pourrait m'aider svp
(j'ai regardé le tutorial avt..)






 

7 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut
ubound te retourne la dernière case du tableau....
(cf F1)

donc :
ReDim Preserve tableau(3 - 1) As Integer
ton tableau va donc de 0 à "3-1" donc 2

0
1
2
tu as 3 enregistrement,
LBound va retourner 0
UBound va retourner 2

ps : bien choisi tes noms de variables, très clair !
ps : à quoi bon faire un redim preserve si tu écrases les valeurs
ps : le redim et le redim preserve se font sans besoin de préciser le type

tout ceci est accessible dans ton aide VBA, F1

++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
Salut
Bizarre ton code :
Dans la première partie, tu dimensionnes ton tableau avec 
  ReDim tableau(5 - 1)
   5 - 1 = 4, ton tableau est donc dimensionné de 0 à 4

Puis tu écris 1 dans Tableau(0), 2 dans Tableau(1), ... 5 dans Tableau(4)
avec ta pemière boucle For-Next

Et juste après, tu redimensionnes ton tableau à avec
   ReDim Preserve tableau(3 - 1)
    3 - 1 = 2, ton tableau est donc dimensionné de 0 à 2
Ce qui veut dire que tu perds les éléments que tu à entré précédemment.

Normal donc que UBound te réponde 2.
Normal qu'il renvoie 4 auparavant.
Mais ton code ne sert pas à grand chose ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011

Yep, RE

ok à la fin de mon code mon tableau fait 3 places.
Je croyais que Redim preserve conservai les valeurs du tableau tout en modifiant la taille du tableau.
En faite il faut faire ceci :

Dim tableau() As Integer
ReDim tableau(5 - 1) As Integer
Dim go As Integer, x as integer, y as integer
x=1
y=5



For go = x To 5
    tableau(RentreValeur) = go
    RentreValeur = RentreValeur + 1
Next go





dim u as integer, v as integer,nb_place as integer
u=3
v=1
Ubound(tableau)=nb_place
ReDim Preserve tableau(nb_place + (u - v)) As Integer
Dim plop As Integer
Dim tre As Integer



For plop = 1 To 3
    tableau(nb_place+tre) = plop
    tre = tre + 1
Next plop

ce code est-il correcte ? Je veux dire est-ce comme ça qu'il faut faire pour ne pas "écraser" mon tableau et garder les valeurs du tableau avt de faire à nouveau le Redim Preserve

Merci et à TouTe
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
    Dim i As Integer
    Dim Max1 As Integer
    
    Dim tableau() As Integer
    Max1 = 5

'   redimensionne de 1 à
5
    ReDim tableau(1 To Max1)
    

'   boucle de 1 à 5
    For i = 1 To Max1
        tableau(i) = i * 10
    Next i

    
    
    Dim Max2 As Integer
    Max2 = 8

'   redimensionne de 1 à 8 en
conservant les valeurs existantes de 1 à 5
    ReDim Preserve tableau(1 To Max2)

'   boucle de 6 à
8
    For i = Max1 + 1 To Max2
        tableau(i) = i * 10
    Next i
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011

OK d'ac !

mais pour info. le type de code (faire des addition dans le tableau pour le dimensionnement) est correct ?  :                       ReDim Preserve tableau(nb_place + (u - v)) As Integer
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
si les calculs ont un sens, oui

mais utilise cette satanée touche F1, la doc sur les DIM REDIM et REDIM PRESERVE est vraiment très bien faite !
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011

OKay

Bon jvais essayé de me débrouiller comme un grand maintenat avec cette satanée touche F1 
^^
Merci pour ton aides, ca me servira pour la compréhension !

++