Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 redim array ne marche pas

thenesol

XLDnaute Junior
bonjour à tous

j'ai un array "tablo1" dont je ne voudrais garder que les 100 premières lignes

mais le code suivant ne le modifie pas, c'est à dire qu'il a toujours ses 8000 lignes
pourquoi ?

ReDim Preserve tablo1(1 To 100, 1 To ncol)

merci...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Thenesol,
Avec "Redim Preserve", on ne peut modifier que la dernière dimension. Dans votre cas vous ne pouvez redimensionner que le nombre de colonnes.
Si vous utilisez le mot clé "preserve", vous pouvez redimensionner uniquement la dernière dimension du tableau et que vous ne pouvez pas modifier le nombre de dimensions du tout.
Le plus simple est peut être de transférer les 100 première ligne du tablo1 dans un tablo2.
 

patricktoulon

XLDnaute Barbatruc
Bonjour
c'est sans compter sur les idées farfelues à la patricktoulon
pour le coup je fait une macro redim_PreserveRow

demonstration
VB:
Sub test()
    Dim Tablo

    Tablo = Range("A1:CV25000").Value

    MsgBox "avant " & vbCrLf & "mon tableau a " & UBound(Tablo) & " lignes et " & UBound(Tablo, 2) & " colonnes "

    Redim_preserveRow Tablo, 1, 100

    MsgBox "apres " & vbCrLf & "mon tableau a " & UBound(Tablo) & " lignes et " & UBound(Tablo, 2) & " colonnes "
End Sub

Sub Redim_preserveRow(ByRef Tablo, minLig, MaxLig)
    Dim L
    L = Evaluate("ROW(" & minLig & ":" & MaxLig & ")")

    Tablo = Application.Index(Tablo, L, 0)
End Sub
 

patricktoulon

XLDnaute Barbatruc
ben c'est justement le truc
alors si tu me dis que ca ne marche pas c'est que tu a un soucis

et pour info un array n'a pas de colonne il a des items
il faut savoir ;
c'est un array de x items ou une variable tableau 2 dimensions que tu veux redimer
 

thenesol

XLDnaute Junior
voila un extrait du code :
Redim_preserveRow
ne conserve que la 1ere colonne


 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
@patrick,
Si l'array en question est strictement interne au VBA et non la copie d'un range, alors je n'ai pas trouvé comment votre fonction peut marcher.
Voir PJ. Je remplit un array 100*4 et je restitue un array 10*4, les deux restitutions sont les mêmes.
Où est le piège ?
 

Pièces jointes

  • Patrick.xlsm
    18.5 KB · Affichages: 3

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…