Macro qui transpose un tableau

delub -  
pilas31 Messages postés 1878 Statut Contributeur -
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

  1. arrial Messages postés 1803 Date d'inscription   Statut Membre Dernière intervention   251
     
     

    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
    1. pilas31 Messages postés 1878 Statut Contributeur 648
       
      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,
      0
  2. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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+
    0
  3. christ69fr
     
    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
    0
    1. pilas31 Messages postés 1878 Statut Contributeur 648
       
      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+
      0
  4. christ69fr
     
    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.
    0
    1. pilas31 Messages postés 1878 Statut Contributeur 648
       
      Bonjour,

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

      A+
      0