Beug avec redim preserve

Résolu
bonjour, il y a une erreur que je ne comprends pas :
lorsque j'utilise redim preserve 2 fois, le programme plante la deuxieme fois.
exemple, si je met :

dim tableau() as variante
redim preserve tableau(1 to 2,1 to 2)
redim preserve tableau(1 to 3,1 to 2)

ca beugue a la derniere ligne.

savez-vous pourquoi ?

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Bonjour,

    Vous utilisez ReDim Preserve pour pouvoir créer un tableau dynamique. Il faut savoir que seule la seconde dimension du tableau peux être incrémentée.
    Par conséquent :
    dim tableau() as Variant
    redim preserve tableau(1 to 2,1 to 2)
    redim preserve tableau(1 to 2,1 to 3) 


    Remarque : Tu peux redimensionner et préserver ton tableau en une fois, si tu connais ces bornes à l'avance.
    Ainsi :
    Dim tableau() As Variant
    ReDim Preserve tableau(1 To 13, 1 To 5)

    Cordialement,
    Franck
    1. Bonjour,

      vous ne pouvez redimensionner que la derniere dimension:

      redim preserve tableau(1 to 2,1 to 2) 

      redim preserve tableau(1 to 2,1 to 3)
      1. merci beaucoup, dans mon cas j'ai juste besoins d'inverser les dimensions mais imaginons que je veuille changer les deux dimension
        par exemple :
        dim tableau() as variante
        redim preserve tableau (1 to 2,1 to 2)
        redim preserve tableau (1 to 3,1 to 3)
        comment devrai je faire ?
        1. Modérateur
          Dans ce cas, la seule solution à ma connaissance est de passer par un tableau intermédiaire, d'effacer ton tableau et de le redimensionner.

          Comme le montre cet exemple :
          Sub test()
          Dim tableau() As Variant, Temporaire() As Variant
          
          ReDim Preserve tableau(1 To 2, 1 To 3)
          For i = 1 To 2
              For j = 1 To 3
                  tableau(i, j) = "Liste " & i & j
              Next j
          Next i
          
          ReDim Preserve Temporaire(1 To 2, 1 To 3)
          Temporaire = tableau
          
          Erase tableau
          
          ReDim Preserve tableau(1 To 3, 1 To 3)
          
          For i = 1 To 2
              For j = 1 To 3
                  tableau(i, j) = Temporaire(i, j)
              Next j
          Next i
          
          Erase Temporaire
          
          tableau(3, 1) = "ajout1"
          tableau(3, 2) = "ajout2"
          tableau(3, 3) = "ajout3"
          
          Debug.Print tableau(1, 2) & " - " & tableau(2, 3) & "- " & tableau(3, 2)
          End Sub
      2. Re,

        mais imaginons que je veuille changer les deux dimension Pas possible