Redim preserve Tableau() [Résolu]

jeanjeandada
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Dernière intervention
20 novembre 2011
- 16 juin 2008 à 09:59 - Dernière réponse : jeanjeandada
Messages postés
152
Date d'inscription
lundi 21 avril 2008
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 

Votre réponse

7 réponses

PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 16 juin 2008 à 10:14
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
cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
- 16 juin 2008 à 10:18
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
jeanjeandada
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Dernière intervention
20 novembre 2011
- 16 juin 2008 à 15:42
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
PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 16 juin 2008 à 16:07
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
jeanjeandada
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Dernière intervention
20 novembre 2011
- 16 juin 2008 à 17:17
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
PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 16 juin 2008 à 17:30
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
jeanjeandada
Messages postés
152
Date d'inscription
lundi 21 avril 2008
Dernière intervention
20 novembre 2011
- 17 juin 2008 à 10:15
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.