Transposé d'un tableau

Résolu
cs_Talere Messages postés 102 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 14 février 2013 - 20 avril 2007 à 11:45
cs_Talere Messages postés 102 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 14 février 2013 - 20 avril 2007 à 12:02
Bonjour,

Je suis à la recherche d'une focntion rapide me permettant d'executer la transposé d'une matrice de valeurs.

Le contexte est le suivant :
   - Via ADODB et Access, je récupère un recordset pré formaté que je souhaiterais mettre tel quel dans une feuille Excel.

Le code est le suivant (je l'ai simplifié) :
With RS
    .Open "SELECT * FROM EC_Excel", Ma_Cnx, adOpenKeyset, adLockReadOnly
    If  .RecordCount = 0 Then err.raise "Il n'y a aucun EC renseigné"
    With Doc_XL.Sheets(4)
        .Range(.Cells(2, 1), .Cells(RS_OF.RecordCount + 1, RS.Fields.Count)) = RS.GetRows
    End With
    .Close
End With

Tout fonctionne très bien sauf que les ligne sont à la place des colonnes et vice-versa !!!

La raison pour laquelle j'en suis arrivé là, c'est que le nombre important d'enregistrement faisait qu'Excel mettait un temps fou à executer mon code d'origine (plusieurs minutes à cause des 1700 enregistrement). Ce nouveau code me permet d'avoir le résultat quasi instantanément, temps qui sera plus long si je transpose moi-même la matrice de valeurs. Je voulais savoir si il y avait une fonction qui existerait.

D'avance, merci.

TALERE

1 réponse

cs_Talere Messages postés 102 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 14 février 2013
20 avril 2007 à 12:02
C'est bon ... en fait la fonction de transposition est très rapide :

Private Function Transpose(matrice As Variant) As Variant
Dim Mat_Temp() As Variant
Dim i, j As Long
ReDim Mat_Temp(LBound(matrice, 2) To UBound(matrice, 2), LBound(matrice, 1) To UBound(matrice, 1))
For i = LBound(matrice, 2) To UBound(matrice, 2)
    For j = LBound(matrice, 1) To UBound(matrice, 1)
        Mat_Temp(i, j) = matrice(j, i)
    Next j
Next i
Transpose = Mat_Temp
End Function

En esperant que ça aidera quelqu'un ...

TALERE
3
Rejoignez-nous