Redim Preserve avec tableau 2 dimensions [Résolu]

Signaler
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
-
Messages postés
29782
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2020
-
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

5 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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"

Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
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

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
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
13
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)?
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
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
13
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)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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))
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015

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
Messages postés
29782
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 octobre 2020
338
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