Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro :Transposer une colonne en ligne

  • Initiateur de la discussion Initiateur de la discussion azerty1956
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

azerty1956

XLDnaute Nouveau
salut le forum,

Je suis un débutant en VBA, mes connaissances sont très limitées, ci-dessous je vous explique ce que je souhaite faire en espérant que quelqu'un pourra m'éclairer.

Je souhaite transposer une colonne Z d'une feuille 1 en ligne 1 sur la feuille 2 (à partir de la cellule (1,4) inclus).

Sur la feuille 1 de mon excel :

Dans un premier temps je dois automatiser la création de cette colonne Z qui correspond à la concaténation des colonnes G jusqu'à Q si la condition suivante est respectée : les cellules de la colonne X = Main.

Dans un second temps je veux classer cette colonne afin d'éliminer les doublons un à un (car dans mon cas les concaténations peuvent avoir le même nom).

Sur la feuille 2 de mon excel :

Finalement je souhaite coller les valeurs des concaténations de la colonne Z de la feuille 1 à la feuille 2 en les transposant. (coller dans la feuille 2 à partir de la cellule (1,4) inclus).
 
Re : Macro :Transposer une colonne en ligne

Bonjour



Avec un fichier exemple, la vision de la question serait plus claire.

EDITION: sans fichier mais en utilisant le macro recorder
Code:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 10/03/2009 par VBACrumble
'

Range("Z1:Z" & [Z65536].End(xlUp).Row).NumberFormat = "General"
    Range("Z1").FormulaR1C1 = _
        "=IF(RC[-2]=""Main"",CONCATENATE(RC[-23],RC[-22],RC[-21],RC[-20],RC[-19],RC[-18],RC[-17],RC[-16],RC[-15],RC[-14],RC[-13],RC[-12],RC[-11],RC[-10],RC[-9]),"""")"
    Range("Z1").AutoFill Destination:=Range("Z1:Z12"), Type:=xlFillDefault
    With Range("Z1:Z12")
    .NumberFormat = "@"
    .Value = .Value
    End With
    Range("Z1:Z12").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
        "AC1"), Unique:=True
    Range("AC1:AC9").Copy
    Sheets("Feuil2").Range("Z1").PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
        , Transpose:=True
       ' Application.CutCopyMode = False
End Sub
 
Dernière édition:
Re : Macro :Transposer une colonne en ligne

j'ai déjà utilisé l'enregistreur des macros mais étant très novice en vba je ne vois pas comment faire.
Je vous mets un bout de mon tableau. tout a été fait à la main, et je souhaite automatiser celà.

Je souhaite transposer une colonne Z d'une feuille 1 en ligne 1 sur la feuille 2 (à partir de la cellule (1,4) inclus).

Sur la feuille 1 de mon excel :

Dans un premier temps je dois automatiser la création de cette colonne Z qui correspond à la concaténation des colonnes G jusqu'à Q si la condition suivante est respectée : les cellules de la colonne X = Main.

Dans un second temps je veux classer cette colonne afin d'éliminer les doublons un à un (car dans mon cas les concaténations peuvent avoir le même nom).

Sur la feuille 2 de mon excel :

Finalement je souhaite coller les valeurs des concaténations de la colonne Z de la feuille 1 à la feuille 2 en les transposant. (coller dans la feuille 2 à partir de la cellule (1,4) inclus).

Si vous avez d'autres idées pour générer automatiquement les clés de la feuille 2 à partir de la feuille 1 sans doublons, on peut éviter les étapes que j'ai énoncé précédemment.

NB: ci joint tableaux
 

Pièces jointes

Dernière édition:
Re : Macro :Transposer une colonne en ligne

Je vous ai mis l'esquisse de code que j'ai fait, mais j'ai un problème : les clés correspondent en fait à la concaténation des colonnes G jusqu'à Q si la condition suivante est respectée : les cellules de la colonne X = Main.

Je ne sais pas comment je pourrais introduire dans le code une condition sur le fait de ne « copier/coller transposé » les concaténations que si sur la colonne X il y a écris Main.

Merci d'avance pour l'aide.

Code:
Sub test()
Dim i As Long, NoCol As Integer, laClef As String, tablo As Variant, c As Range

    For i = 2 To Split(Worksheets("feuille1").UsedRange.Address, "$")(4)
        tablo = Range(Cells(i, 1), Cells(i, 17)).Value
        For NoCol = 7 To 17
            laClef = laClef & tablo(1, NoCol) 'je ne comprend pas comment tu définis laClef? pourquoi tu répète le mot laClef 2 fois?
            With Worksheets("feuille2").Range("D1:" & Split(Worksheets("Main Thresh").UsedRange.Address, ":")(2))
     Set c = .Find(laClef)
     If c Is Nothing Then
          'comment on fait pour coller "la clé Colonne en lettre transposé" en ligne sur la feuille 2?
          NoCol = Worksheets("feuille2").Cells(1, Columns.Count).End(xlToLeft).Column + 1
     End If
End With
        Next
        laClef = ""
    Next
End Sub
 
Re : Macro :Transposer une colonne en ligne

Le problème est résolu mais un nouveau problème est apparu les clés que je dois avoir sur la premiere ligne de la feuille 2 correspondent en fait à la concaténation des colonnes G jusqu'à Q de la feuille 1 si la condition suivante est respectée : les cellules de la colonne X ( de la feuille 1)= Main.

Je ne sais pas comment je pourrais introduire dans le code une condition sur le fait de ne « copier/coller transposé » les concaténations que si sur la colonne X de la feuille 1 il y a écris Main.

voila le code :

Sub test67()
Dim PlageSource As Range
Dim FeuilleResultat As Worksheet
Dim NumColonneResultat As Integer
Dim NumLigneResultat As Integer
Dim Cell As Range
Dim Un As Collection
Dim i As Long

' nommer tous les endroits sur lesquels on travaille
Set PlageSource = Worksheets("EMR").Range("Z:Z")
Set FeuilleResultat = Worksheets("Main Thresh")
NumColonneResultat = 256
NumLigneResultat = 1

' creer une liste sans doublons, d'après un tuto de Silkyroad
Set Un = New Collection
On Error Resume Next
'Boucle sur la plage de cellule
For Each Cell In PlageSource
'If Cell <> "" Permet de ne pas prendre en compte les cellules vides
'Un.Add Cell, CStr(Cell) Ajoute le contenu de la cellule dans la collection
'le 2ème argument Cstr(cell) est le TAG de l'élément. Le tag est unique, c'est ca qui évite les doublons
'ici on choisi le contenu de la cellule, transformé en chaine de caractere (par Cstr)
If Cell <> "" Then Un.Add Cell, CStr(Cell)
Next Cell
On Error GoTo 0

'Boucle sur les éléments de la collection
'les écrire dans feuille2, en chagneant de colonne à chaque fois
For i = 2 To Un.Count
FeuilleResultat.Cells(NumLigneResultat, 2 + i) = CStr(Un(i).Value)
Next i

Set Un = Nothing
End Sub


Merci d'avance
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Résolu(e)
Microsoft 365 transposer
Réponses
6
Affichages
189
Réponses
7
Affichages
293
Réponses
8
Affichages
655
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…