Redim preserve Tableau() [Résolu]

Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011
- - Dernière réponse : jeanjeandada
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011
- 17 juin 2008 à 10:15
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..)






 
Afficher la suite 

7 réponses

Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
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
Commenter la réponse de PCPT
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
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)
Commenter la réponse de cs_Jack
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011
0
Merci
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
Commenter la réponse de jeanjeandada
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
    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
Commenter la réponse de PCPT
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011
0
Merci
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
Commenter la réponse de jeanjeandada
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
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 !
Commenter la réponse de PCPT
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
20 novembre 2011
0
Merci
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 !

++
Commenter la réponse de jeanjeandada