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 :

VBA- "Transposition" tableau vers colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut [Résolu] VBA- "Transposition" tableau vers colonne
    Bonjour/soir à tous.
    Jeune utilisateur de VBA, je développe (du moins j'essaie) une macro qui doit permettre, à partir d'un tableau, de transposer l'ensemble des contenus des lignes dans une même colonne.
    J'ajoute un exemple visuel:

    A B C D
    a a a
    b
    c c

    devrait me donner (je le place dans une 2e feuille):

    A B C D
    a
    a
    a
    b
    c
    c

    Pour se faire, j'ai écrit ceci:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Option Base 1
    Option Explicit
     
    Sub TRANSPOSITION()
     
    ... (pour l'essentiel:)
    Dim i As Long, j As Long
    Dim nbcol As Integer, nblot As Long
    Dim departcopiee As String, departreçu As String
     
    nbcol = 10              'nbr de colonnes max/ligne tableau intial
    nblot = 10000          'nbr de ligne max tableau initial
     
    departcopiee = "A4"     'cellule où commence l'extraction
    departreçu = "A5"        '1ere cellule de réception
     
      For j = 0 To nbcol - 1
       For i = 0 To nblot
        Sheets("Feuil4").Select
        Range(departcopiee).Offset(i, j).Copy
        Sheets("Feuil5").Select
        Range(departreçu).Offset(j + (i * j), 0).Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:= _
        xlNone, SkipBlanks:=True, transpose:=True
       Next i
      Next j
     
    End Sub

    Mon problème^^:
    ça mouline ça mouline, et après ça affiche bien dans une colonne, mais dans un ordre douteux etc. Visiblement ça recolle où ça a déjà été collé etc

    Je vous avouerai ne pas avoir bien compris ce qui se passait, surement un problème des indices i et j du offset.

    Je ne m'en sors pas, je me tourne donc vers vous, en espérant avoir été le plus clair possible.
    Merci d'avance à ceux qui voudront bien me donner un coup de pousse!!

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    effectivement il y avait un problème d'indexage

    J'ai juste ajouté une variable L pour indiquer sur quel ligne écrire et simplifié la copie.

    je te laisse regarder

    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
    18
    19
    20
    21
    22
    23
    Sub TRANSPOSITION()
     
    '... (pour l'essentiel:)
    Dim i As Long, j As Long
    Dim nbcol As Integer, nblot As Long
    Dim departcopiee As String, departreçu As String
    Dim L As Long
     
    nbcol = 10              'nbr de colonnes max/ligne tableau intial
    nblot = 10000          'nbr de ligne max tableau initial
    L = 0
    departcopiee = "A4"     'cellule où commence l'extraction
    departreçu = "A5"        '1ere cellule de réception
     
      For j = 0 To nbcol - 1
       For i = 0 To nblot
         if Sheets("Feuil4").Offset(i, j)<>"" then _
          Sheets("Feuil4").Offset(i, j).Copy Sheets("Feuil5").Range(departreçu).Offset(L, 0)
        L = L + 1
       Next i
      Next j
     
    End Sub
    Edit : Attention si tout est complet 10*10000 = 100000 lignes, pour excel 2003 c'est maximum 65536

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    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
    18
    19
    20
    21
    Dim LastLig As Long, NewLig As Long, i As Long
    Dim LastCol As Integer
    Dim Tablo()
    With Sheets("Feuil4")
       LastLig = .Cells(Rows.Count, "A").End(xlUp).Row
       For i = 4 To LastLig
          LastCol = .Cells(i, Columns.Count).End(xlToLeft).Column
          ReDim Tablo(1 To LastCol)
          If LastCol = 1 Then
             Tablo(1) = .Range("A" & i)
          Else
             Tablo = Application.Transpose(.Range(.Cells(i, 1), .Cells(i, LastCol)))
          End If
          With Sheets("Feuil5")
             NewLig = .Cells(Rows.Count, "A").End(xlUp).Row + 1
             NewLig = IIf(NewLig < 5, 5, NewLig)
             .Range("A" & NewLig & ":A" & NewLig + LastCol - 1) = Tablo
          End With
          Erase Tablo
       Next i
    End With

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut
    Merci pour vos réponses rapides!
    Je m'y penche tout à l'heure dans la soirée.

    (A priori un petit truc qui cloche chez zyhack par contre, la version de Mercatog étant... "otpimisée" disons ^^)

Discussions similaires

  1. Trouver le code VBA de la moyenne d'une colonne d'un tableau
    Par Valérie32 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/06/2008, 12h37
  2. transposition d'un tableau de colonnes en lignes
    Par Prissou dans le forum VBA Word
    Réponses: 5
    Dernier message: 16/06/2007, 19h29
  3. [VBA-E]copie spéciale d'un tableau vers un autre
    Par gojira dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2006, 16h21

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