Incrément de la taille d'une matrice avec Redim Preserve

Bonsoir,

voila ce que je cherche à faire :

J'ai un vecteur colone de données ordonnées. Je veux à partir de ce vecteur en créer un second plus court qui ne contiendrait qu'une occurence par donnée individuelle dans le premier : c'est à dire pour être plus clair, un vecteur sans doublon.

Comme je ne connais pas le nombre d'éléments individuels dans le premier, je ne peux pas donner dès le début sa taille définitive à mon second vecteur.

Sauf que j'obtients systématiquement une erreur à la commande ReDim Preserve

Data : 1er vecteur avec doublons,

MatVect : résultat souhaité

L'erreur affichée est la 9, Subscript out of Range.

Je sais que je peux procéder différemment en comptant d'abord le nombre d'éléments individuels dans la première et en dimensionant la seconde à partir du résultat, ou en donnant une dimension énorme à la seconde puis en la redimensionant à la fin à partir d'un compteur du nombre de "cellules" non vides mais je suis curieux de connaitre pourquoi mon code actuel ne fonctionne pas.

Je pensais au début que cela venait du fait qu'au départ je défini MatVect comme une matrice (1,1) mais j'ai testé en partant à une dimension plus élevée : même problème.

ReDim MatVect(1 To 1, 1 To 1)
MatVect(1, 1) = Data(1, 1)
a = 1
For i = 2 To UBound(Data, 1)
    If Data(i, 1) <> MatVect(a, 1) Then
        ReDim Preserve MatVect(1 To a + 1, 1 To 1)
        MatVect(a + 1, 1) = Data(i, 1)
        a = a + 1
    End If
Next i

Merci d'avance,

Cordialement,

L.

Bonjour

On ne peut que modifier le dernier indice d'un tableau

J'aurais fait comme-ça

Option Explicit

Sub test()
Dim MatVect
Dim Data
Dim I As Integer
Dim K As Integer

  Data = Range("A1:A36")    ' Zone avec des doublons
  ReDim MatVect(1 To 1, 1 To 1)
  MatVect(1, 1) = Data(1, 1)

  For I = 2 To UBound(Data)                       ' Indice 1 contient le nombre d'élèment
    For K = 1 To UBound(MatVect, 2)               ' Indice 2 contiendra le nombre d'élément
      If MatVect(1, K) = Data(I, 1) Then Exit For ' Idendique on sort
    Next K
    If K > UBound(MatVect, 2) Then                ' Pas identique
      ReDim Preserve MatVect(1 To 1, 1 To K)      ' On rajoute 1 à la 2ème dimension
      MatVect(1, K) = Data(I, 1)                  ' On note la avleur
    End If
  Next I
  Range("B1").Resize(UBound(MatVect, 2), 1) = Application.Transpose(MatVect)
End Sub

Encore une bonne chose à savoir.

Je choisirai surement la solution par transposé également oui.

Merci beaucoup

Rechercher des sujets similaires à "increment taille matrice redim preserve"