Redim Preserve avec tableau 2 dimensions [Résolu]

babu26 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 22 sept. 2014 à 19:32 - Dernière réponse : jordane45 20582 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention
- 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 

9 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 22 sept. 2014 à 19:42
0
Utile
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
NHenry 14133 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 22 avril 2018 Dernière intervention - 22 sept. 2014 à 19:43
0
Utile
1
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 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 25 sept. 2014 à 09:42
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
pijaku 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention - 23 sept. 2014 à 09:18
0
Utile
2
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 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 25 sept. 2014 à 08:25
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 12205 Messages postés jeudi 15 mai 2008Date d'inscriptionModérateurStatut 13 septembre 2017 Dernière intervention - 25 sept. 2014 à 09:00
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 23 sept. 2014 à 11:36
0
Utile
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
babu26 44 Messages postés samedi 8 juin 2013Date d'inscription 21 janvier 2015 Dernière intervention - 25 sept. 2014 à 08:35
0
Utile
1
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 20582 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 25 sept. 2014 à 09:59
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

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.