ReDim Preserve

Bonsoir,

J'essaie de modifier dynamiquement un tableau. Il se remplit au fur et à mesure si une condition est respectée à chaque tour de boucle. Ainsi j'utilisais ReDim, mais quand sa taille changeait, les données précédentes étaient perdues. Mais avec ReDim Preserve, le compilateur me parle d'indice hors sélection ! Juste avec un Preserveen plus...

Voici le code pour éclairer tout ça :

(dans un UserForm, je crée une listbox dans lequel apparaissent les noms des personnes du groupe choisi dans la combobox "premier")

Private Sub groupe_Change()
Dim listeNom() As String
Dim j As Integer
j = 0
'remplissage des noms des personnes de ce groupe
For i = 1 To nbNoms     'défini avant
    If Cells(i + 2, 1) = premier Then
        j = j + 1
        ReDim Preserve listeNom(j, 2)
        listeNom(j, 1) = Cells(i + 2, 2)
        listeNom(j, 2) = Cells(i + 2, 3)
    End If
Next i
nomGroupe.Visible = True     'ListBox nomGroupe
nomGroupe.list = listeNom
End sub

Merci pour votre aide !

Bonsoir,

Une explication.

Preserve : Mot clé utilisé pour conserver les données d'un tableau préexistant dont vous modifiez la taille de la dernière dimension.

A+

Ah ok merci !! Et du coup il n'y a pas moyen de changer une autre dimension tout en gardant le tableau ?

Si la réponse est non, pour ceux qui rencontreraient le même problème que moi, je l'ai contourné en recopiant le tableau après coup. Mais bon ça utilise pas mal de calcul ET de mémoire d'utiliser ainsi deux tableaux...

Bonjour

Une solution inverser ton tableau

Ce qui donnerait pour toi

Private Sub groupe_Change()
Dim listeNom() As String
Dim j As Integer
  j = 0

  'remplissage des noms des personnes de ce groupe
  For i = 1 To nbnoms     'défini avant
    If Cells(i + 2, 1) = premier Then
      j = j + 1
      ReDim Preserve listeNom(1 To 2, 1 To j)
      listeNom(1, j) = Cells(i + 2, 2)
      listeNom(2, j) = Cells(i + 2, 3)
    End If
  Next i
  nomGroupe.Visible = True     'ListBox nomGroupe
  nomGroupe.ColumnCount = 2
  nomGroupe.List = Application.Transpose(listeNom)
End Sub

Ah c'est vraiment sympa cette écriture ça fait gagner quelques lignes !

Merci ! =)

Rechercher des sujets similaires à "redim preserve"