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:

patricktoulon

XLDnaute Barbatruc
Je ne sais pas les captures ne me parlent pas
mais si tu veux allons y
faut pas prendre l’écriture raccourci dans la fen^tre espion ou variable locale pour ce qui est
c'est simple si c’était vrai fait un simple msgbox t2(1)devrait fonctionner
l'erreur est claire me semble t-il non?
1734114950170.png


1734114826903.png
 

Dudu2

XLDnaute Barbatruc
Et encore de la polémique inutile... mais qui fait que @patricktoulon a quelque chose à dire.
fait le test avec la petite sub tu verra que j'ai raison
Ton test n'a rien de révélateur de ce que fait WorksheetFunction.Transpose() puisqu'il n'est pas correct pour montrer la réduction de dimension qui se fait lorsque la 2ème dimension est unitaire (pas la 1ère comme dans ton pseudo-test)
 

p'tit vieux

XLDnaute Occasionnel
@p'tit vieux,
Si tu veux transposer une Range Multi-Areas, il faut transposer chacune des Areas séparément puis les réunir avec Union().
Oui c'est ce que je fais dans mes applis. Mais pour ici je ne pense pas que ce soit intéressant.
A charge pour l'utilisateur de faire le job de l'Union ou de boucler sur ses Areas.
Enfin c'est que je pense le mieux.
 

p'tit vieux

XLDnaute Occasionnel
Bon, les gars, pour moi cette affaire est close avec fichier du Post #212 que @p'tit vieux pourrait mettre en solution pour en finir. Sauf si quelqu'un trouve un bug ce qui est toujours possible.

Pour les polémiques basées sur du pipo, je ne réponds plus.

Pour moi idem.
Merci @Dudu2 et à tout les autres qui ont participé à ce sujet.
Je vais le poster demain.
 

patricktoulon

XLDnaute Barbatruc
@p'tit vieux,
Si tu veux transposer une Range Multi-Areas, il faut transposer chacune des Areas séparément puis les réunir avec Union().
ben non
ou tu a vu que l'on pouvait faire un Union() avec des variables tableaux toi ??????
union attentant des arguments range

@p'tit vieux ça ne s'adressait pas à toi
mais je vous laisse je ne voudrais pas polémiquer
vous m'avez l'air bien parti
et j'en ai un peu marre de répéter sans cesse
amusez vous bien

juste pour info @Dudu2 dim t(0 to N,0 to 0) c'est déjà un dim 1 car la 2d dimension n'est pas dimensionnée
y a pas besoins de convertir ou transposer
0 to 0 n'est pris en compte que pour la première dimension si il y a a plusieurs
allez je vous laisse bye!
 

Dudu2

XLDnaute Barbatruc
ou tu a vu que l'on pouvait faire un Union() avec des variables tableaux toi ??????
Oui enfin, il se débrouille à placer les tables en Ranges et à les Unioner.

juste pour info @Dudu2 dim t(0 to N,0 to 0) c'est déjà un dim 1 car la 2d dimension n'est pas dimensionnée
y a pas besoins de convertir ou transposer
C'est faux !
Ce n'est pas parce que c'est 0 que ça veut dire qu'il n'y a rien.
Les 0 c'est juste des bornes de la 2ème dimension.
Ça pourrait être Dim t(0 to N, 0 to 0) ou Dim t(0 to N, -3 to -3) ou Dim t(0 to N, 10 to 10)

1734116437984.png
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
en même temps c'est évident à comprendre ,transpose travaille en base 1 et tu lui envoie un tableau avec une base et count 0 dans la dim2 il va pas te la rendre il ne prendra que le lbound 0 de la dim1 si son count n'est pas a zero bien sur
transpose transforme pas en dim 1 il te rend pas la 2 c'est tout a cause de la limite base 1
c'est pas tout à fait la même chose
il y a eu un article d'ailleurs la dessus sur MSC mais il date un peu

il parle aussi du path (pour les version en dessous 2016) LLA qui permet d'aller un peu plus loin avec des tableaux avec des valeurs string importantes

il parlait de la modif aussi a faire sur 2016 dans le registre ce qui revient à la même chose que le patch pour les versions antérieures

pour les versions suivantes je sais pas

sur 2021 au boulot c'est moi qui l'ai fait

si tu retrouve ce truc ça devrait t’intéresser
 

Dudu2

XLDnaute Barbatruc
En effet, il y a 2 choses différentes.
  1. Dans ces 3 cas:
    -Dim t(0 to N, 0 to 0)
    -Dim t(0 to N, -3 to -3)
    -Dim t(0 to N, 10 to 10)
    La 2ème dimension est unitaire donc WorksheetFunction.Transpose va supprimer la 2ème dimension.

  2. WorksheetFunction.Transpose retourne toujours des LBound à 1
    Donc, après son exécution:, on aura pour les 3 cas précédents.
    - T(1 to N+1)
1734120968770.png
 

patricktoulon

XLDnaute Barbatruc
et oui par ce que transpose n'a pas changé d'un iota depuis 2003 alors que l'on peut avoir des base négatives ou zero

je me souvient plus si avec 2003 j'ai eu un jour besoins de bases négatives je ne sais donc pas depuis quand c'est possible
d'ailleurs il n'y a pas que la fonction transpose qui déraille sur ce coup la
c'est d'ailleurs aussi pour ça que redim preserve a été limité a la 2d dimension seulement
 

p'tit vieux

XLDnaute Occasionnel
@patricktoulon
Si c'est juste pour faire de la philosophie pourquoi pas.
Mais tu ne crois pas que tu te fais juste plaisir.
Concrètement ça ne fait pas avancer le "scmiliblic".
La fonction Transpose créée propose des fonctionnalités propres utilisables pour Excel et ses Ranges mais, pourquo, pas dans le cadre d'autres utilisations.
A toi et à chacun de voir comment et où utiliser ces fonctionnalités.
C'est comme si tu reprochais à Excel ou plein d'autres logiciels de proposer des fonctionnalités que toi tu n'utilises pas où qui ne te paraissent pas "logique" (à toi).
Faut pas que tu cherches plus loin.
Conclusion:
Transpose a ses fonctions, ses capacités, ses limites.
Elles ont été définies par la question du post et les réflexions des participants.
Elles ne te servent peut être pas à toi maïs a d'autres oui dans d'autres cadres que du Range ou des Redim.

La seule chose est fait elle ce qu'on lui demande bien et aussi vite que possible ?
Le reste c'est du blabla ... Sauf à trouver des bugs ou proposer une/des améliorations fonctionnelles (supplémentaires ?)

Voilà le très humble avis d'un ... P'tit vieux 🤕
 

Discussions similaires

Statistiques des forums

Discussions
315 059
Messages
2 115 802
Membres
112 586
dernier inscrit
Yobabefa