Macro transposé avec conditions

etienne33

XLDnaute Nouveau
Bonjour à tous,

Je viens vers vous car j'ai besoin de vos connaissances.

Je travaille actuellement sur un fichier que je reçois sous la forme de la "feuill1".
J'ai besoin de transposé ces données pour en faire un tableau exploitable pour faire un publipostage.

Le problème est que mon fichier fait plus de 1500 lignes et le faire en manuel prends un temps fou...

En "Feuill2", vous trouverez le format final que je souhaite avoir.

En gros les données doivent remontées par mois (1,2,3,4,....) et par type de données (données 1,2 et 3).

Je ne sais pas si je suis très clair, la pièce jointe sera peut être plus parlante.

Merci d'avance pour vos réponses.
 

Pièces jointes

  • Exemple.xlsx
    10.4 KB · Affichages: 60
  • Exemple.xlsx
    10.4 KB · Affichages: 62
  • Exemple.xlsx
    10.4 KB · Affichages: 61

Modeste

XLDnaute Barbatruc
Re : Macro transposé avec conditions

Bonjour etienne33,

Un essai en pièce jointe: le code est dans un module standard. Tu ne précisais pas si les données de base étaient systématiquement sur 12 lignes, à chaque fois.
Je suis parti du principe que oui ... si pas, ça ne fonctionnera pas; c'est aussi simple que ça :p

Teste d'abord avec les données que tu avais fournies, puis avec un jeu un peu plus conséquent et, si tout se passe bien, avec l'ensemble des données ... et puis dis-nous.

J'ai déposé une version du fichier en .xls Si tu utilises exclusivement de l'Excel 2007 et au-delà, réenregistre le classeur en .xlsm
 

Pièces jointes

  • Transposer Tableau (etienne33).xls
    42 KB · Affichages: 43

etienne33

XLDnaute Nouveau
Re : Macro transposé avec conditions

Bonjour Modeste et merci de ta réponse,

Effectivement, je n'ai pas précisé mais oui les données se basent toujours sur 12 lignes.

J'ai fais des tests et ta macro fonctionne parfaitement, je n'ai pas encore trouvé d'anomalie.

Cependant, est-il possible d'avoir un petit explicatif du code que tu as créé que j'essaye de comprendre le fonctionnement ?

Je risque d'être amené à agrandir la zone de gauche "groupe, nom, code, etc...." si tu peux m'expliquer comment la modifier.
 

Modeste

XLDnaute Barbatruc
Re : Macro transposé avec conditions

Re-bonjour,

Dis-nous si les commentaires ajoutés dans le code ci-dessous te suffisent:
VB:
Sub transfert()
Dim monTablo()
With Sheets("Feuil1")
    derlig = .[A10000].End(xlUp).Row 'repérer la dernière cellule non-vide en colonne A
    ReDim monTablo(((derlig - 1) / 12) - 1, 38) 'on réserve un tableau à deux dimensions
    'dimension 1=nbre de blocs de 12 ... dimension 2=nbre de colonnes du tableau "final"
    ligne% = 0: colonne% = 0 'on initialise 3 variables
    For lig = 2 To derlig Step 12 'de la ligne 2 à la dernière ligne, par pas de 12
        monTablo(ligne, colonne) = .Cells(lig, 1) 'copier le groupe
        monTablo(ligne, colonne + 1) = .Cells(lig, 2) 'copier le code
        monTablo(ligne, colonne + 2) = .Cells(lig, 3) 'copier le nom
        For i = 0 To 11 'petite boucle pour copier ...
            monTablo(ligne, colonne + 3 + i) = .Cells(lig + i, 5) 'les 12 données 1
            monTablo(ligne, colonne + 15 + i) = .Cells(lig + i, 6) 'les 12 données 2
            monTablo(ligne, colonne + 27 + i) = .Cells(lig + i, 7) 'les 12 données 3
        Next i
        ligne = ligne + 1
        colonne = 0
    Next lig
End With
With Sheets("Feuil2")
    'on efface, en feuil2, les données sous la ligne de titres
    .[A2].Resize(.[A2].CurrentRegion.Rows.Count, .[A2].CurrentRegion.Columns.Count).ClearContents
    'on "colle" le contenu du tableau dans une plage de cellules de la bonne dimension
    .[A2].Resize(((derlig - 1) / 12), 39) = monTablo
End With
End Sub
Note: j'en ai profité pour supprimer une variable ('col') qui n'était pas utilisée.
 

Discussions similaires

Statistiques des forums

Discussions
312 571
Messages
2 089 805
Membres
104 276
dernier inscrit
helenevellocet