Transposer une colonne de 745 chiffres en lignes de 24 chiffres

Bonjour,

Tout est dit dans le titre,

N'étant pas doué en VBA, j'ai créé une macro avec l'enregistrement automatique d'excel

J'ai copié cette macro en changeant les plages et les cellules.

Mais il me faut recopier 31 fois cette macro, j'ai donc penser aux boucles, mais là, je ne sais pas faire.

C'est donc ma demande .

Merci d'avance pour vos réponses

20sub-macro1.docx (10.47 Ko)

Bonjour,

Un petit fichier d'accompagnement aurait été le bienvenu

Je vois que tu veux recopier 31 fois ce bout de code en l'adoptant à chacune des 31 situations

Range("Q3").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= False, Transpose:=True
    Range("C26:C49").Select
    Selection.Copy

Evidemment une boucle fera l'affaire mais faut-il encore savoir où faire "tourner" cette boucle

A+

Bonjour,

une proposition :

Sub LouReeD()
    lig = 3
    For bcl = 0 To 30
        Range("C" & 2 + (24 * bcl) & ":C" & (24 * (bcl + 1)) + 1).Copy
        Range("Q" & lig).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
        lig = lig + 1
    Next bcl
End Sub

première boucle on a bien "C 2+ (24*0) : C 24 *( 0+1) + 1" = "C2:C25"
deuxième boucle on a bien "C 2 +(24*1):C 24*(1+1)+1" = "C26:C49" etc...

Avec Q3 qui passe à Q4 etc

@ bientôt

LouReeD

Encore moi LouReed,

Et oui il faut lire à fond ce que l'on nous écrit
Je n'avais pas vu qu'il y avait la relation que tu as utilisée entre les différentes boucles
Bravo !

Au plaiisir

Jacky

Après je vous avoue que sans fichier c'est "pénible" !
Un code sur du Word alors qu'on peut aisément l'écrire directement ici, et le message sans fichier fichier...

@ bientôt

LouReeD

A LouReed

Super, cela fonctionne à merveille, oui désolé pour le fichier, je le joint pour que tu puisse voir le résultat?

Et merci beaucoup

23classeur1.xlsx (59.58 Ko)

Hello tout le monde,

Une variante....à tester..

Option Explicit
 Dim tb, ntb()
 Dim i&, j&, n&, k&

Sub Transpose()
 Application.ScreenUpdating = False
   With Sheets("Janv") 'feuille à adapter
    tb = .Range("C2:C745") ' plage à adapter
     n = UBound(tb, 1) / 24

     ReDim ntb(1 To n, 1 To 24)
       k = 0
       For i = 1 To UBound(tb, 1) Step 24
         For j = 1 To 24
          ntb(k + 1, j) = tb(i + j - 1, 1)
         Next j
        k = k + 1
       Next i
      .Range("Q3").CurrentRegion.Offset(1, 0).ClearContents
      .Range("Q3").Resize(UBound(ntb, 1), 24) = ntb
    End With
   Erase tb: Erase ntb: MsgBox "Transposition effectuée", vbInformation
End Sub
23claudius91.xlsm (82.93 Ko)

Cordialement,

Juste pour info, sur les versions plus récentes d'office (2024/365) :

=ORGA.LIGNES(C2:C745; 24)

Sinon, en VBA avec un grand nombre de lignes la proposition de @xorsankukai sera plus efficace que les copier/coller de l'enregistreur de macros dont @LooReeD a dû s'inspirer faute de fichier.

Bonne journée.

Bonsoir,

En général je me contente de répondre à la question...

Comment faire pour les 31 boucles.

Maintenant le travail en mémoire sous VBA est à privilégier pour la rapidité du au fait qu'il n'y a que deux accès au lieu des 62 !

Après pour un non initié les variables avec des noms compréhensibles, c'est bien aussi

Et pour finir, le demandeur est sous 2007 à priori

Et vraiment pour finir, un gibier excel avec le bout de code c'est mieux, bien qu'ici c'est simple à comprendre.

@ bientôt

LouReeD

Bonjour à tous

Très simple aussi à faire avec PowerQuery à partir de 2010...

let
    Source = Excel.CurrentWorkbook(){[Name="Janv"]}[Content],
    #"Colonnes supprimées" = Table.RemoveColumns(Source,{"JOUR - DATE - HEURE"}),
    #"Type modifié" = Table.TransformColumnTypes(#"Colonnes supprimées",{{"N°", Int64.Type}, {"Watt", Int64.Type}}),
    #"Lignes groupées" = Table.Group(#"Type modifié", {"N°"}, {{"Tabl",each Table.AddIndexColumn(_,"Idx",1,1),type table}}),
    #"Tabl développé" = Table.ExpandTableColumn(#"Lignes groupées", "Tabl", {"Watt", "Idx"}, {"Watt", "Idx"}),
    #"Colonne dynamique" = Table.Pivot(Table.TransformColumnTypes(#"Tabl développé", {{"N°", type text}}, "fr-FR"), List.Distinct(Table.TransformColumnTypes(#"Tabl développé", {{"N°", type text}}, "fr-FR")[#"N°"]), "N°", "Watt"),
    #"Colonnes supprimées1" = Table.RemoveColumns(#"Colonne dynamique",{"Idx"})
in
    #"Colonnes supprimées1"
Rechercher des sujets similaires à "transposer colonne 745 chiffres lignes"