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

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
Re : Chargement de données en mémoire & utilisation de "Application.Tranpose"

Hello klin89,

Thanks a lot pour les réponses apportées.
Merci encore de propositions de modifications 😉

A bientôt
El Gringo 123456
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

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