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

Conversion range 2d vres array 1d rapidité

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 !

Hoareau

XLDnaute Occasionnel
Bonjour

Je voudrais savoir, s'l y a un moyen plus rapide de convertir un range en tableau 1 D, que la macro ci-dessous.

merci




Sub DeuxD_Array_Convert_UN_D_Array_2()
Dim tblo_Un_D()
Dim C As Range

Set A = [A1:E8]

For Each C In A

tot = tot + 1

For Z = 1 To tot
ReDim Preserve tblo_Un_D(tot)
tblo_Un_D(tot) = C.Value

Cells(25, 5) = UBound(tblo_Un_D)
Cells(25, 10).Resize(, UBound(tblo_Un_D) + 1) = tblo_Un_D
Next
Next


End Sub
 
Re : Conversion range 2d vres array 1d rapidité

Bonjour ,

Comme ceci sans les variables et boucles inutiles.

Et en connaissant le type de données stockées dans ce tableau , le variant peut être transformé en long pour des entiers, en double pour des décimaux ou même en string pour bien des cas ici

Dim tblo_Un_D() As Variant


Code:
Sub DeuxD_Array_Convert_UN_D_Array_2()
Dim tblo_Un_D() As Variant
Dim C As Range


ReDim tblo_Un_D(0)
For Each C In [A1:E8]
 
 ReDim Preserve tblo_Un_D(UBound(tblo_Un_D) + 1)
 
 tblo_Un_D(UBound(tblo_Un_D)) = C.Value
 Cells(25, 5) = UBound(tblo_Un_D)
 Cells(25, 10).Resize(, UBound(tblo_Un_D) + 1) = tblo_Un_D

Next


End Sub
 
Re : Conversion range 2d vres array 1d rapidité

Bonjour Hoareau, camarchepas 🙂
Si on connait la zone a transférer on peux gagner du temps (5 colonnes * 8 lignes = 40 valeurs).
En mettant le "collage" du tableau en dehors de la boucle on en gagne aussi.
VB:
Sub DeuxD_Array_Convert_UN_D_Array_3()
Dim C As Range, i As Long
Dim tblo_Un_D(1 To 40) As Variant
For Each C In [A1:E8]
    i = i + 1
    tblo_Un_D(i) = C.Value
Next
Cells(25, 5) = UBound(tblo_Un_D)
Cells(25, 10).Resize(, UBound(tblo_Un_D)) = tblo_Un_D
End Sub


Cordialement
 
Re : Conversion range 2d vres array 1d rapidité

Re moi Hoareau, Bonjour Efgé

En tenant compte de ta remarque très pertinente voici donc le code proposé rectifié dans le cas ou la zone est variable.


Code:
Sub DeuxD_Array_Convert_UN_D_Array_2()
Dim tblo_Un_D() As Variant
Dim C As Range

ReDim tblo_Un_D(0)

For Each C In [A1:E8]
 
 ReDim Preserve tblo_Un_D(UBound(tblo_Un_D) + 1)
 tblo_Un_D(UBound(tblo_Un_D)) = C.Value

Next

Cells(25, 5) = UBound(tblo_Un_D)
Cells(25, 10).Resize(, UBound(tblo_Un_D) + 1) = tblo_Un_D

End Sub
 
Re : Conversion range 2d vres array 1d rapidité

Merci pour vos deux solutions

Référence effectivement relatives, modifiées en conséquence

Ma solution 20 s pour 320 valeurs pour essai

solution de camarchepas , - d'une seconde

tblo_Un_D(UBound(tblo_Un_D)) = C.Value > pas compris cette partie

ReDim tblo_Un_D(0) >>> pourqoi il faut faire une première redimension du tableau
 
Re : Conversion range 2d vres array 1d rapidité

Hoareau ,

Super de chercher à comprendre,

Donc :

tblo_Un_D(UBound(tblo_Un_D)) = C.Value

équivaux à charger le dernier élément puisque ubound donne la borne maxi du tableau, fraichement créé par le redim juste au dessus.

Le 1° redimensionnement évite un problème lié à la fonction ubound qui plante lorsque le tableau est vide.

L'autre solution employée souvent est de gérer les erreurs , mais c'est bien moins propre.

Merci pour les chiffres , en effet super chrono pour un code très léger
 
- 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

Réponses
5
Affichages
912
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
293
Réponses
15
Affichages
786
Réponses
4
Affichages
734
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…