Redim Preserve avec tableau 2 dimensions [Résolu]

Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
- 22 sept. 2014 à 19:32 - Dernière réponse :
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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

9 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 22 sept. 2014 à 19:42
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
14299
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 22 sept. 2014 à 19:43
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

Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
- 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
Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
2 novembre 2018
- 23 sept. 2014 à 09:18
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)?
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Dernière intervention
21 janvier 2015
- 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
Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
2 novembre 2018
- 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
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 23 sept. 2014 à 11:36
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
Dernière intervention
21 janvier 2015
- 25 sept. 2014 à 08:35
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
Messages postés
23253
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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.