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

  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
    0
    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)
      0
      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 ?
        0
        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
          0
      2. Re,

        mais imaginons que je veuille changer les deux dimension Pas possible
        0