Bonjour Patrice,

Citation Envoyé par Patrice740 Voir le message
Désolé, mais c'est pas tout à fait exact, ReDim n'est pas une instruction de déclaration.
Je suis d'accord avec la première partie de ta réponse, mais pas avec la seconde.

Ce n'est pas tout à fait exact: Tu as raison, on peut utiliser Redim sur un Dim, mais uniquement à la condition que le Dim concerne un tableau sans dimension, éventuellement typé, ou un variant.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Sub Test()
  Dim t '
  Dim u()
  ReDim t(5)
  ReDim u(5)
End Sub

ReDim n'est pas une instruction de déclaration: Si! ReDim est une instruction de déclaration ET, en même temps, une instruction d'exécution. Si l'on observe l'image suivante, on verra que les variables t et u existent dès l'entrée dans la fonction et sont déclarées de manière identique comme des tableaux de variant, alors même que dim u() est inexistant. C'est la preuve que Redim u(5) a bien déclaré la variable et en quelque sorte "contient" un Dim u() implicite. Redim est donc bien une instruction de déclaration.

Nom : 2020-09-25_160323.png
Affichages : 281
Taille : 5,7 Ko


Elle est, en plus, une instruction d'exécution qui modifiera les dimensions de u au moment de l'exécution de la ligne Redim...

Nom : 2020-09-26_162912.png
Affichages : 277
Taille : 9,9 Ko


On notera également que, si l'on peut redimensionner un tableau sans le retyper (il garde le type du dim de départ), on ne peut pas modifier le type du tableau lors du redimensionnement lorsqu'il est déclaré comme un tableau par un Dim ( par exemple, Dim t() ).

Nom : 2020-09-26_185529.png
Affichages : 271
Taille : 5,5 Ko

Nom : 2020-09-26_185601.png
Affichages : 264
Taille : 9,6 Ko


Pour pouvoir modifier à volonté le type du tableau lors du redimensionnement, il faut qu'il ait été déclaré comme Variant

Nom : 2020-09-26_190126.png
Affichages : 286
Taille : 6,9 Ko