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 :

Macro copier/coller transposer


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    cadre
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : cadre
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Macro copier/coller transposer
    Bonjour à tous,

    J'ai besoin de votre aide pour la création d'une macro permettant de copier/coller transposer un nombre de lignes indéfini. Après plusieurs tentatives je n'y arrive toujours pas...

    Rien de mieux qu'un exemple pour illustrer mon besoin que vous trouverez en pièce jointe (Feuil1 est la base initiale et Feuil2 le résultat attendu)

    Merci d'avance de votre aide !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    Une façon de faire:
    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
    Option Explicit
     
    Sub CopieTranspose()
        Dim wshA As Worksheet, wshB As Worksheet
        Dim kRA As Long, kCA As Long, kRB As Long
        Set wshA = ThisWorkbook.Worksheets("Feuil1")
        Set wshB = ThisWorkbook.Worksheets("Feuil2")
        wshB.Cells.Clear
        wshA.Range("A1:I1").Copy wshB.Range("A1:I1")
        wshB.Range("J1") = "Mois"
        wshB.Range("K1") = "Volume"
        kRA = 2
        kRB = 2
        With wshA
            While .Cells(kRA, 1) <> ""
                .Range(.Cells(kRA, 1), .Cells(kRA, 9)).Copy wshB.Range(wshB.Cells(kRB, 1), wshB.Cells(kRB + 11, 1))
                .Range(.Cells(1, 10), .Cells(1, 21)).Copy
                wshB.Cells(kRB, 10).PasteSpecial Transpose:=True
                .Range(.Cells(kRA, 10), .Cells(kRA, 21)).Copy
                wshB.Cells(kRB, 11).PasteSpecial Transpose:=True
                kRA = kRA + 1
                kRB = kRB + 12
            Wend
        End With
    End Sub
    Cordialement.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    cadre
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : cadre
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci Eric !

    Ci-dessous mon code (qui ressemble au votre). Cela fonctionne mais le temps de traitement est assez long (presque 10min). Mon fichier de base comporte plus de 10000 lignes, pensez-vous que cela est lié ?

    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
    30
    31
    32
    33
    Sub mise_en_forme()
     
        Dim n As Long, i As Long
            n = 1
            i = 1
     
        Application.ScreenUpdating = False
     
        Sheets.Add.Name = "BDD"
        For i = 2 To (WorksheetFunction.CountA(Worksheets("Feuil1").Range("A:A")))
            Worksheets("Feuil1").Select
            Range(Cells(i, 1), Cells(i, 9)).Copy
            Worksheets("BDD").Select
            Range(Cells(n, 1), Cells(n + 11, 1)).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            ActiveSheet.Paste
     
            Worksheets("Feuil1").Select
            Range(Cells(1, 10), Cells(1, 22)).Copy
            Worksheets("BDD").Select
            Cells(n, 10).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
     
     
            Worksheets("Feuil1").Select
            Range(Cells(i, 10), Cells(i, 22)).Copy
            Worksheets("BDD").Select
            Cells(n, 11).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
     
            n = n + 12
        Next
     
        Application.ScreenUpdating = True
     
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Voir ce que donne ceci (non testé):
    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
    Sub mise_en_forme()
        Dim n As Long, i As Long
        n = 1
        i = 1
        Application.ScreenUpdating = False
        Sheets.Add.Name = "BDD"
        Worksheets("BDD").Select
        With Worksheets("Feuil1")
            For i = 2 To WorksheetFunction.CountA(.Range("A:A"))
                .Range(.Cells(i, 1), .Cells(i, 9)).Copy
                Range(Cells(n, 1), Cells(n + 11, 1)).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                .Range(.Cells(1, 10), .Cells(1, 22)).Copy
                Cells(n, 10).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
                .Range(.Cells(i, 10), .Cells(i, 22)).Copy
                Cells(n, 11).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
                n = n + 12
            Next
        End With
        Application.ScreenUpdating = True
    End Sub
    Cordialement.

    P.S. ajouter Application.Calculation = xlCalculationManual au début et Application.Calculation = xlCalculationAutomatic à la fin.

  5. #5
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 569
    Points : 1 006
    Points
    1 006
    Par défaut
    Bonjour,

    Une proposition en PJ.

    Sur mon PC 10 000 lignes en 3 secondes.

    Teste et dis-nous.

    PS; j'ai mis des données bidons à la suite de tes lignes.
    Fichiers attachés Fichiers attachés
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    cadre
    Inscrit en
    Août 2022
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : cadre
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2022
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup Alex ! Ca marche parfaitement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro copier-coller
    Par pucelo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2008, 19h49
  2. [A-00] macro copier coller
    Par nadege46 dans le forum IHM
    Réponses: 1
    Dernier message: 14/10/2008, 21h41
  3. Macro copier/coller avec tri
    Par Lechette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/03/2008, 12h44
  4. Macro copier coller première cellule vide
    Par jul85 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/02/2008, 17h06
  5. Macro copier/coller colonne- insérer nouvelle colonne
    Par rembliec dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/11/2007, 16h32

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