Redim Preserve avec tableau 2 dimensions [Résolu]

Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
- - Dernière réponse : jordane45
Messages postés
25583
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 mai 2019
- 25 sept. 2014 à 09:59
Bonjour,
Je souhaite augmenter la ta taille de mes tableaux (sous Excel).
Je définit les variables : Nom$() et Tél() as double)

Au lancement d'excel, via workbook_open,
je fais :
Redim Nom (1000): Redim Tél(1000,9) qui fonctionne.

Plus tard, j'ai besoin d'augmenter ces dimensions de 500, sans nécessairement ré-initialiser les contenus acquis.
je fais :
Redim Preserve Nom(Ubound(Nom)+ 500) qui semble fonctionner
Redim Preserve Tél(Ubound(Tél)+ 500,9) qui est ignoré

Mon approche est sûrement mauvaise ? Quelle serait mon erreur ?
Merci d'avance, Bab
Afficher la suite 

Votre réponse

5 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
207
0
Merci
Bonjour,
citation (aide VBA)
"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"

Commenter la réponse de ucfoutu
Messages postés
14450
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
22 mai 2019
129
0
Merci
L'aide de Redim est claire, tu ne peux changer que la dernière dimension.

Dans ton cas, je te conseillerais l'usage d'une structure :
Public Type MonType
    Nom as String
    Tel(0 To 9) as Double
End Type

Public MonTab() As MonType

...

MonTab(x).Nom

babu26
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
-
Ton aide a été appréciée.
Je n'avais jamais usé de cette fonctionnalité, mais je compte l'étudier de plus près.
Mon problème est résolu (Cf réponse de 'pijaku')
Merci à toi et à plus, peut-être. Bab
Commenter la réponse de NHenry
Messages postés
12245
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2018
5
0
Merci
Bonjour,

Salut tout le monde,

A tout hasard, que contiennent :
Tél(1, 1), Tél(1, 2), ..., Tél(1, 7), Tél(1, 8), Tél(1, 9)?
babu26
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
-
Salut
EXemple de contenu répétitif
Toto,475485513,321487204,,,,,,,,
Lulu,123456789,234567890,674859612,,,,,,,
Mimi,,,,,,,,,
des noms suivis de 0 à 9 N° de téléphone (sans le 0 initial).

ucfoutu me propose l'utilisation de Type comme
Public Type MonType
Nom as String
Tel(0 To 9) as Double
End Type

Public MonTab() As MonType
...
MonTab(x).Nom

que je n'ai jamais utiliser. Comment initialiser ces variables à partir d'un fichier :
EXemple
Boucle: j=0: if not EOF(1) then
j=j+1
input #1,nomLu : .... Toto -> nom(j)
for i=1 to 9:input#1,telLu: telLu -> Tel(j,i) : next i
goto boucle
end if

EST-correct ?

Merci, et à + Bab
pijaku
Messages postés
12245
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2018
5 -
Bonjour,

Pour le Type (ou structure), jette déjà un oeil par là : http://fauconnier.developpez.com/articles/vba/general/classes/#LIII-B

Sinon, pour ReDim un tableau à deux dimensions, la réponse t'a été donnée par ucfoutu juste en dessous...

Ce que tu essaie :
Dim Tel(1000,9)
'blablabla
ReDim Preserve Tel(1000 + 500, 9)


Ce qu'il faut faire :
Dim Tel()

ReDim Preserve Tel(9, 1000)
MsgBox "Avant redimensionnement : " & vbCrLf & _
"1ère dimension de : " & LBound(Tel, 1) & " à : " & UBound(Tel, 1) & vbCrLf & _
"2ème dimension de : " & LBound(Tel, 2) & " à : " & UBound(Tel, 2)

ReDim Preserve Tel(9, 1000 + 500)
MsgBox "Après redimensionnement : " & vbCrLf & _
"1ère dimension de : " & LBound(Tel, 1) & " à : " & UBound(Tel, 1) & vbCrLf & _
"2ème dimension de : " & LBound(Tel, 2) & " à : " & UBound(Tel, 2)
Commenter la réponse de pijaku
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
207
0
Merci
L'aide VB est claire
Relire NHenry
petit test/demo
 ReDim toto(1000, 9)
MsgBox UBound(toto, 1) & vbCrLf & UBound(toto, 2)
ReDim Preserve toto(1000, UBound(toto, 2) + 3)
MsgBox UBound(toto, 1) & vbCrLf & UBound(toto, 2)
'ne risque par contre pas de marcher (voir l'aide)
ReDim Preserve toto(UBound(toto, 1) + 10, UBound(toto, 2))
Commenter la réponse de ucfoutu
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
0
Merci
Salut

Je n'ai jamais utiliser de Type.

Public Type MonType
Nom as String
Tel(0 To 9) as Double
End Type

Public MonTab() As MonType
...
MonTab(x).Nom

Comment initialiser ces variables à partir d'un fichier :
EXemple de fichier à contenu répétitif
...
Toto,475485513,321487204,,,,,,,,
Lulu,123456789,234567890,674859612,,,,,,,
Mimi,,,,,,,,,
...
EXemple de chargement des variables
Boucle:
j=0
if not EOF(1) then
j=j+1
input #1,nomLu : .... Toto -> nom(j)
for i=1 to 9:input#1,telLu: telLu -> Tel(j,i) : next i
goto boucle
end if

EST-correct ?

Merci, et à + Bab
jordane45
Messages postés
25583
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 mai 2019
311 -
Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
Commenter la réponse de babu26