IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

fonction perso remplacant la fonction "Transpose" de excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de GESCOM2000
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 107
    Par défaut fonction perso remplacant la fonction "Transpose" de excel
    Bonjour
    Quelqu'un as déjà essayer de remplacer la fonction "Transpose" par une fonction perso plus rapide dans VB?

    =>Application.Transpose(Tablo) sans passer par du range,resize,cells,row....ou Sheets("Feuil").Cells(1, 100).Resize(UBound(Tablo, 1), 50).Value = Tablo

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Par défaut, un tableau est en pour ainsi dire en "ligne", ce qu'il est possible de voir avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Sub Test1()
     
        Dim Tbl() As Integer
        Dim I As Integer
     
        For I = 1 To 100
     
            ReDim Preserve Tbl(1 To I)
            Tbl(I) = I
     
        Next I
     
        Range(Cells(1, 1), Cells(UBound(Tbl), 1)) = Tbl() 'en colonne A
        Range(Cells(1, 1), Cells(1, UBound(Tbl))) = Tbl() 'en ligne 1
     
    End Sub
    Là, tu as soit la possibilité d'utiliser la fonction Transpose(), soit de réinventer la roue avec une fonction perso. Transpose() étant compilée, elle sera plus rapide !
    Si tu ne veux pas utiliser la fonction Transpose() et non plus de fonction perso, il te faut dimensionner ton tableau de façon à ce que les valeurs soit en colonne, ce que fait le code ci-dessous mais c'est moins souple puisque ça nécessite le dimensionnement préalable car dans un tableau, seule la dernière dimension peut être dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Sub Test2()
     
        Dim Tbl(1 To 100, 1 To 1) As Integer
        Dim I As Integer
     
        For I = 1 To 100
     
            Tbl(I, 1) = I
     
        Next I
     
        Range(Cells(1, 1), Cells(UBound(Tbl), 1)) = Tbl() 'en colonne A
     
    End Sub

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo