Chargement de données en mémoire & utilisation de "Application.Tranpose"

elgringo123456

XLDnaute Occasionnel
Supporter XLD
Bonjour,

Je me permets de vous embêter sur le cas suivant : "optimisation" de chargement de données en mémoire provenant de données Excel & redécoupage de ces données en mémoire par paquet dans plusieurs variables pour les redeposer plus tard.

Par exemple, je souhaite extraire dans une variable contenant 5 000 valeurs récupérer un "Range" de 500 valeurs de l'index 400 à 899. Existe-t-il en VBA une façon de dire Variable(400 : 899) => Recuperation en un coup de toutes les valeurs ?

Pour info j'ai mis en pièce jointe un exemple en VBA et la seule solution consiste à defiler les élements un par un pour effectuer un découpage.

L'objectif etant de decouper au plus vite par tranche de 65 536 paquets car Application.Transpose ne peut se faire que par paquet de 65 536.

Merci d'avance de vos idées et suggestions,
Cordialement
El Gringo 123456

PS : attention le fichier en pièce jointe a été allégée (pour des raisons de taille) Sorry
 

Pièces jointes

  • Sample XL Download.xlsm
    17.2 KB · Affichages: 47

klin89

XLDnaute Accro
Re : Chargement de données en mémoire & utilisation de "Application.Tranpose"

Bonsoir elgringo123456, le forum :)

Pour t'aider :
VB:
Option Explicit

Sub Decoupage()
Dim tablo, t(), NbreBloc As Long, j As Long
Const bloc As Long = 10
    tablo = Sheets("Feuil1").Range("a1").CurrentRegion.Value
    If UBound(tablo, 1) Mod bloc = 0 Then
        NbreBloc = UBound(tablo, 1) \ bloc
    Else
        NbreBloc = UBound(tablo, 1) \ bloc + 1
    End If
    ReDim t(1 To NbreBloc, 1 To bloc)
    For j = 1 To UBound(tablo, 1)
        t((j - 1) \ bloc + 1, (j - 1) Mod bloc + 1) = tablo(j, 1)
    Next
    'Restitution en Feuille 2
    'Sheets("Feuil2").Cells(1, "a").Resize(NbreBloc, bloc) = t
    Sheets("Feuil2").Cells(1, "a").Resize(bloc, 1) = Application.Transpose(Application.Index(t, 12, 0))
End Sub
klin89
 

klin89

XLDnaute Accro
Re : Chargement de données en mémoire & utilisation de "Application.Tranpose"

Re elgringo123456, :)

Pour conclure :
VB:
Option Explicit

Sub Copie_par_bloc()
Dim tablo, t(), NbreBloc As Long, j As Long, n As Long
Const bloc As Long = 10    '<- change
    Application.ScreenUpdating = False
    With Sheets("Feuil1")
        tablo = .Range("a1", .Range("a" & Rows.Count).End(xlUp)).Value
    End With
    If UBound(tablo, 1) Mod bloc = 0 Then
        NbreBloc = UBound(tablo, 1) \ bloc
    Else
        NbreBloc = UBound(tablo, 1) \ bloc + 1
    End If
    ReDim t(1 To NbreBloc, 1 To bloc)
    For j = 1 To UBound(tablo, 1)
        t((j - 1) \ bloc + 1, (j - 1) Mod bloc + 1) = tablo(j, 1)
    Next
    'Restitution en Feuille 2
    With Sheets("Feuil2").Cells(1)
        .CurrentRegion.ClearContents
        For j = 1 To UBound(t, 1)
            .Offset(n).Resize(bloc, 1) = Application.Transpose(Application.Index(t, j, 0))
            n = n + bloc
        Next
    End With
    Application.ScreenUpdating = True
End Sub
klin89
 

Discussions similaires