Beug avec redim preserve

Résolu
quent -  
 quent -
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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  3. quent
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    mais imaginons que je veuille changer les deux dimension Pas possible
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. quent
     
    ok merci
    mais c'est quand meme mal fait...
    0
    1. quent
       
      desoler, je ne l'avait pas vu. c'est une methode qui doit etre asser longue si on utilise de grands tableaux mais ca marche. merci beaucoup a vous deux !
      0