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

XL 2021 Vos avis SVP: Une fonction TRANSPOSE() à améliorer

p'tit vieux

XLDnaute Occasionnel
Bonjour à tous,
Pour mes codes VBA, j'ai écris une première version de ma fonction Transpose() que je vais mettre à votre disposition dans sa version 1.0.0.
Toutefois, je voudrais votre avis sur l'intérêt de rajouter des options complémentaires à celle-ci.

Dans un premier temps j'ai écris une fonction Transpose() afin de lever la limite des 65536 lignes de la fonction "WorkSheetFunctions.Transpose" d'Excel.
Pour mes besoins j'ai ajouté les possibilités suivantes:
- Choisir la base départ du tableau (Base 0 ou 1)
- Pouvoir convertir un texte/valeur simple dans un tableau 2D T(1,1)

Rien d'exceptionel, mais pratique.

Donc je vous propose de me soumettre vos idées.

Par exemple, j'ai pensé à:
- Si on transmet T(0 to 0, 0 to N) ou T(1 to N, 1 to 1) Transpose() renvoie un tableau 1D T(0 to N) ou T(1 to N) suivant la base choisie
- Transposer ET ne renvoyer que les n premieres lignes
- Transposer ET ne renvoyer de la ligne n° X à n° Y

Voilà pour ces quelques idées.
A votre avis laquelle ou lesquelles de celles-ci ont-elles un intérêt.

Et vous, vos autres idées qui vous paraitraient utiles?
Ensuite suivant vos propositions ….
Je nommerai un 1er Ministre du développement
Mais non! Je publierai une nouvelle version (Pas sérieux ces P'tit Vieux)

Merci pour vos avis et suggestions.

ATTENTION!
Ici il n'est pas question de faire des recherches de texte/valeur ou autre truc du genre.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Oui mais l'important c'est la déclaration de la table résultat.
Dim T2 as variant
Dim T2() as variant

Ça change tout car la 1ère déclaration impacte de 10% la performance car je suppose qu'à chaque fois qu'on référence T2 il se pose la question de savoir ce que c'est alors que dans le 2ème déclaration, il sait d'avance que c'est une table.
 

patricktoulon

XLDnaute Barbatruc
mais pour le tiens c'est un pas de geant
de plus de 510/530 tu repasse à 410/430
à l'échelle c'est énorme
à moins que tu essaie de m'expliquer quelque chose qui est évident pour moi et donc que je n’irais pas regarder
alors c'est quoi le truc?

pour ma version l'externalisation des lbase m'a fait revenir au temps des premières versions ou il y avait pas toutes ces options 394/410 ms
mais j'aimerais bien comprendre pour le tiens
qu'est ce que j'ai bien pu t'inspirer pour gagner quasiment 100 ms

bon ben en tout cas sur le fichier 252
on remarque bien que j'ai eu raison de passer par un case au lieu des if
 

patricktoulon

XLDnaute Barbatruc
testé chez moi ( dim t2 Vs dim t2() ) ca change rien
apres je sais pas j'ai toujours dimensionné moi sauf si c'est dans une classe en public (ce qui n'est pas possible )
ce qui m'a fait gagner c'est bien l’extériorisation de lbase1 et 2 pour x et q


tu varie entre 400/425
et moi je varie entre 394 et 410
quelque fois tu passe en dessous les 400 quand même mais bon difficile avec le timer de juger cette infime différence
dans tout les cas on arrive à des temps d’exécution que l'on avait avec nos premières moutures sans options c'est donc bien géré
 

Dudu2

XLDnaute Barbatruc
testé chez moi ( dim t2 Vs dim t2() ) ca change rien
Ça a forcément un impact puisque tu as détecté l'amélioration de Transpose2D !

Je sais pas comment tu testes, c'est pourtant simple. Dans ton code TransposeXV3:
VB:
'#Const DIM_T2_TABLE = True
#Const DIM_T2_TABLE = False

#If DIM_T2_TABLE Then
    Dim T2() As Variant
#Else
    Dim T2 As Variant
#End If


Code:
#Const DIM_T2_TABLE = True
'#Const DIM_T2_TABLE = False

#If DIM_T2_TABLE Then
    Dim T2() As Variant
#Else
    Dim T2 As Variant
#End If
 

Pièces jointes

  • Benchmark Compare Transpose 5 Options.xlsm
    157.4 KB · Affichages: 1

p'tit vieux

XLDnaute Occasionnel
Bonjour @Dudu2 , @patricktoulon et à tous

J'ai testé le coup du changement de variable avec timer sur un tableau de 10 000 x 100 (1 million)
Avec TIMER, j'ai fait moulte essais en ne changeant QUE la nature de la variable TT vs TT().
CHRONO TT(): 0,34375
CHRONO TT : 0,39844
à chaque fois l'ecart est grosso modo le même quelque soit la taille du tableau le temps est en faveur de T():
- environ 25% pour 100 000
- environ 15% pour 1 million
- environ 15% pour 5 millions

J'ai aussi, voulu tester la factorisation des boucles qui "swap" le tableau TT
La catastrophe . Je ne vous en parle même pas.
Vive la factorisation!
 

Discussions similaires

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