Macro qui transpose un tableau

Bonjour,
je suis une vraie débutante en macro dans excel.
j'ai le tableau suivant :

test 1 test 2 ................................... test 12
personne testée 1 51 26 47
personne testée 2 22 104 17
personne testée 3 74 20 61
personne testée 4 60 93 54

je dois faire une macro me permettant de mettre les lignes a la place des colonnes et les colonnes a la place des lignes (transposée).
et j'y arrive pas, est ce que qn pourrait m'aider?
merci d'avance
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  • Votes
  • Date
  • Date décroissante
  1.  

    Sub TRANSPOSITION()
    Range("A1:M20").Select
    Selection.Copy
    Sheets("Feuil2").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, TRANSPOSE:=True
    End Sub


    Il s'agit d'une copie suivie d'un collage spécial transposé.

    Pas vérifié, mais ça ne devrait pas marcher, le copiage spécial ne pouvant pas se faire sur partie de la zone copiée. Je pense qu'il faut un peu chiader en collant hors de la zone, puis en supprimant ensuite la zone copiée. Cela se fait facilement par enregistrement automatique …

     
    1. Contributeur
      Bonjour Arrial,

      Oui, tu as raison on ne peux pas copier et coller sur la même zone c'est pour celà que j'ai proposé dans mon post de copier depuis la feuille courante et de coller dans une autre feuille .

      A+

      Cordialement,
  2. Contributeur
    Bonjour,

    Voici un exemple de macro qui copie la plage A1:M20 de la feuille courante et colle la transposée dans la feuille "Feuil2" :
    Sub TRANSPOSITION()
        Range("A1:M20").Select
        Selection.Copy
        Sheets("Feuil2").Select
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, TRANSPOSE:=True
    End Sub
    


    A+
    1. Bonjour,

      moi, j'ai un souci avec ce code, c'est que VBA ne valide pas mon code
      Operation:=x1None, il me dit Erreur de compilation et attendu expression

      voici mon code :

      Sub transpose_dans_tableau()
      Sheets("Formulaire").Select
      Range("B2:B28").Select
      Selections.Copy

      Sheets("Bases de données").Select
      valeurA3 = Range("A3").Value
      If valeurA3 = "" Then
      Range("A3").Select
      Else
      Range("A2").Select
      Selection.End(x1Down).Select
      ligne_active_base = ActiveCell.Row
      Range("A" & ligne_active_base + 1).Select
      End If
      ligne_active_base = ActiveCell.Row
      Range("A" & ligne_active_base).Select
      Selection.PasteSpecialPaste = x1PasteallExceptBorders
      Operation:=x1None,SkipBlanks:=False, TRANSPOSE:=True
      Sheets("Formulaire").Select
      Range("B2:B28").Select
      Selection.ClearContents
      Range("B2").Select
      Sheets("Bases de données").Select
      Range("A2").Select
      End Sub

      Aidez moi
      1. Contributeur
        Bonjour,

        J'ai relevé quelques erreurs de syntaxe.
        Attention les constantes Excel commencent par xl... la lettre L pas le chiffre 1
        Ensuite dans la ligne en erreur il manque un espace entre PasteSpecial et Paste et des virgules et := à la place de =
        Enfin, quand la ligne est trop longue en VBA on peut continuer l'instruction sur la ligne suivante mais en finissant la ligne précédente par Espace souligné ( _)

        Voila un code qui est syntaxiquement correct (je n'ai analysé que la syntaxe pas le contenu)

        Sub transpose_dans_tableau()
        Sheets("Formulaire").Select
        Range("B2:B28").Select
        Selection.Copy
        Sheets("Bases de données").Select
        valeurA3 = Range("A3").Value
        If valeurA3 = "" Then
            Range("A3").Select
        Else
            Range("A2").Select
            Selection.End(xlDown).Select
            ligne_active_base = ActiveCell.Row
            Range("A" & ligne_active_base + 1).Select
        End If
        ligne_active_base = ActiveCell.Row
        Range("A" & ligne_active_base).Select
        Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        Sheets("Formulaire").Select
        Range("B2:B28").Select
        Selection.ClearContents
        Range("B2").Select
        Sheets("Bases de données").Select
        Range("A2").Select
        End Sub


        A+
    2. j'ai été un peu long, ta syntaxe m'a l'air pas mal, mais maintenant, il me mets un pop-up avec écrit dessus 400.
      d'où peut bien venir l'erreur.
      1. Contributeur
        Bonjour,

        C'est curieux car je viens de retester mon code, il fonctionne.
        Qu'elle est la ligne qui pose problème ?

        A+