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

utiliser application.Transpose entre deux array tableau deux dimensions bidimension

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 !

Charly88

XLDnaute Occasionnel
Bonjour,

Est-il possible d'utiliser la fonction Application.transpose pour transposer une array1 à une array2 (à 2 dimensions) ?

Je suis à peu près sûr d'avoir déjà cherché à faire ça, d'avoir conclu que c'était impossible et qu'il fallait passer par une double boucle mais je préfère en avoir le cœur net.
Si c'est bien le cas, je me dis que je pourrais me créer une fonction ad hoc que je pourrais promener de prog en prog.


P.S : désolé pour le titre mais j'essaye d'y coller les mots-clés, c'est un vrai cauchemar de chercher des infos sur les arrays sur le net, certaines infos / questions sont répétées des milliers de fois, les trucs plus précis sont noyés.
 
Re : utiliser application.Transpose entre deux array tableau deux dimensions bidimens

Bonjour Pierrot,
Je ne vois pas vraiment à quoi tu penses. Suivant ta piste j'ai tenté de pré-dimensionner mon tableau, sans succès.

Pour l'expliquer plus concrètement, de la même manière que l'on transférer un tableau / array à un autre array ainsi :
Tab2 = Tab1
Avec Tab2 sans dimension déclarées mais Tab1 qui a 2 dimensions, les 2 étant Variant, je voudrais savoir s'il est possible de faire :
Tab2 = Application.Transpose(Tab1)

Ecrit comme ça, je me prends un Type mismatch...
 
Re : utiliser application.Transpose entre deux array tableau deux dimensions bidimens

Re,

comprends rien... ceci fonctionne chez moi...
Code:
Dim t() As Variant, t2() As Variant
t = Range("A1:B3").Value
t2 = Application.Transpose(t)
 
Re : utiliser application.Transpose entre deux array tableau deux dimensions bidimens

J'y perds totalement mon latin, j'ai repris ton exemple Pierrot, ajouté une ligne sur la 2è dimension, etc, ça passe.
Je me suis dit que cela venait de la création par Range mais j'ai bien l'impression de faire la même chose.
L'un de vous aurait-il la patience de jeter un oeil à ce bout de code ?

Code:
Public Sub CompaZ()
Dim TabSourceN() As Variant
Dim TabSourceM() As Variant
Dim TabCompaZ() As Variant

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Init
LigTit = 1
ColDon = 1

TabTitreDoc = Application.Range("Titre_Rap" & TipDoc)
DerCol = UBound(TabTitreDoc, 2)


'Pompe N
With Workbooks(Wb_CompaZ).Worksheets(BDD_Z_N)
     If .FilterMode Then .ShowAllData
     DerLig = .Cells(SDerLig, ColDon).End(xlUp).Row
     If DerLig <= LigTit Then DerLig = LigTit + 1
     TabSourceN = .Range(.Cells(LigTit + 1, ColDon), .Cells(DerLig, DerCol)).Value 'N'inclut pas la ligne de titre
     ReDim Preserve TabSourceN(UBound(TabSourceN, 1), UBound(TabSourceN, 2) + 1) 'Colonne supplémentaire pour marquer vérifié
End With


TabCompaZ = Application.Transpose(TabSourceN) '<= Type mismatch
 
Re : utiliser application.Transpose entre deux array tableau deux dimensions bidimens

Re,

peut être en modifiant le "redim" ainsi...
Code:
ReDim Preserve t(LBound(TabSourceN, 1) To UBound(TabSourceN, 1), _
    LBound(TabSourceN, 2) To UBound(TabSourceN, 2) + 1)

non testé... et pour cause.....
 
Re : utiliser application.Transpose entre deux array tableau deux dimensions bidimens

Merci Pierrot, j'ai tenté mais sans résultat. Mais je n'étais pas au bout de mes surprises, je sens que vous allez aimer : 264

Le même code fonctionne si je remplace ma variable DerLig (qui indique 400 lignes) par 264 :
Code:
TabSourceN = .Range(.Cells(LigTit + 1, ColDon), .Cells(264, DerCol)).Value 'N'inclut pas la ligne de titre
End With

TabCompaZ = Application.Transpose(TabSourceN) '= Aucun problème.
D'où ça vient ? J'ai repensé à la barrière des 65 000 lignes connue sur cette fonction que l'on a d'excel 97 parce que, après avoir contourné mon problème plus haut faute de solution, j'ai ensuite eu un autre plantage, à la toute fin, sur une ligne que j'ai déjà utilisée 20 fois déjà en d'autres cas:
Code:
.Cells(LigTit + 1, ColDon).Resize(UBound(TabCompaZ, 2), UBound(TabCompaZ, 1)).FormulaLocal = Application.Transpose(TabCompaZ)

Or, si je réduis au préalable à 264 la taille de la 2è dimension, ça passe :
Code:
ReDim Preserve TabCompaZ(UBound(TabCompaZ, 1), 264)
.Cells(LigTit + 1, ColDon).Resize(UBound(TabCompaZ, 2), UBound(TabCompaZ, 1)).FormulaLocal = Application.Transpose(TabCompaZ)

Je n'y comprends rien.
Ou plus précisément, je comprends que les 264 correspondent aux colonnes tout comme la limite des 65536 sont les lignes ante-.xlsx mais ce que je ne comprends pas, c'est comment je ne m'y suis jamais confronté jusqu'ici, c'est improbable.

Du coup, j'ai vérifié un autre prog/fichier où j'ai cette même ligne :
Code:
.Range(.Cells(2, 1), .Cells(UBound(TabBdd, 2) + 1, UBound(TabBdd, 1))).FormulaLocal = Application.Transpose(TabBdd())
UBound(TabBdd, 2) = 26 000 lignes et pas un problème pour livrer sur la feuille. Les options sont les mêmes, ce sont des variants, le contenu est similaires (texte, chiffre, date, pas de formules)...


Ma conclusion un peu bas du front serait donc : mon fichier excel a-t-il la vérole ?
 
Re : utiliser application.Transpose entre deux array tableau deux dimensions bidimens

Déjà essayé, mais merci, une fois de plus, pour ton aide Pierrot. Je sais bien que travailler hors fichier n'est pas confortable.

Pour ceux intéressés par le sujet, en creusant, je suis tombé sur une réponse récente de Roger2327 (mais sur la limite connue de 65 K), avec une petite fonction remplaçant le transpose :
https://www.excel-downloads.com/thr...e-mismatch-avec-un-array-range-resolu.211808/
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…