XL 2010 Comment modifier lignes en colonnes

patouli

XLDnaute Nouveau
Bonjour à vous,

et merci d'avance pour l'aide que vous pourrez m'apporter,
mon souci est une extraction dont les dates ressortent en lignes et que je dois passer en colonnes,
j'ai bien tenté "transpose" mais je ne dois pas bien l'utiliser car l'ensemble des lignes passent en colonnes,
dans le fichier joint, la feuille 1 est une partie de mon extraction et dans la feuille 2, ce que je souhaite obtenir comme affichage,

Merci par avance,
 

Pièces jointes

  • format planning.xlsx
    12.2 KB · Affichages: 14

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Patouli, bonjour le forum,

En pièce jointe ton fichier modifié. Dans la ligne 1 de l'onglet planning j'ai rajouté les dates du 17 mars au 31 décembre 2020... Clique sur le bouton Planning de l'onglet EXTRACTION.

Le code :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim R As Range 'déclare la variable R (Recherche)
Dim COL As Integer 'déclare la variable COL (COLonne)
Dim DS As Long 'déclare la variable DS (Date Source)
Dim TEST As Boolean 'déclare la variable TEST

Set OS = Worksheets("EXTRACTION") 'définit l'onglet source OS
Set OD = Worksheets("planning") 'définit l'onglet destination OD
OD.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 1)) = "" 'aimente le dictionnaire D avec les valeurs en colonne 1 de TV (le matricule)
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments J du tableau temporaire TMP
    LI = OD.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1 'définit la ligne LI (première ligne vide de la colonne A de l'onglet OD)
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If TV(I, 1) = TMP(J) Then 'condition 1 : si la donnée ligne I colonne 1 de TV est égale à l'élément J de TMP
            If TEST = False Then 'condition 2 : si TEST est [faux]
                OD.Cells(LI, "A").Value = TV(I, 1) 'renvoie le matricule dans la cellule ligne LI colonne A de l'onglet OD
                OD.Cells(LI, "B").Value = TV(I, 2) 'renvoie le nom dans la cellule ligne LI colonne B de l'onglet OD
                OD.Cells(LI, "C").Value = TV(I, 3) 'renvoie le prénom dans la cellule ligne LI colonne C de l'onglet OD
                OD.Cells(LI, "D").Value = TV(I, 6) 'renvoie la dir dans la cellule ligne LI colonne D de l'onglet OD
                OD.Cells(LI, "E").Value = TV(I, 7) 'renvoie la section dans la cellule ligne LI colonne E de l'onglet OD
                TEST = True 'définit la variable TEST
            End If 'fin de la condition 2
            If TV(I, 5) <> "" Then 'condition 3 : si l'événement planning n'est pas vide
                DS = CLng(DateSerial(Year(TV(I, 4)), Month(TV(I, 4)), Day(TV(I, 4)))) 'définit la date de la source DS (en entier long)
                'définit la recherche R (recherche la date DS dans la ligne 1 de l'onglet destination)
                Set R = OD.Rows(1).Find(CDate(DS), , xlFormulas, xlWhole)
                If Not R Is Nothing Then 'condition 4 : si au moins une occurrence est trouvée
                    COL = R.Column 'définit la variable COL, colonne de la première occurrence trouvée
                    OD.Cells(LI, COL).Value = TV(I, 5) 'renvoie l'événement planning dans la cellule ligne LI colonne COL de l'onglet OD
                End If 'fin de la condition 4
            End If 'fin de la condition 3
        End If 'fin de la condition 1
    Next I 'prochaine ligne de la boucle 2
TEST = False 'redéfinit la variable TEST
Next J 'prochain élément de la boucle 1
OD.Activate 'active l'onglet destination OD
End Sub

Le fichier :
 

Pièces jointes

  • Patouli_XD_v01.xlsm
    31 KB · Affichages: 7

patouli

XLDnaute Nouveau
pardon Robert de revenir vers toi,
mon fichier fait 36000 lignes et j'ai un message d'erreur qui renvoie à :

For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)

peux-tu m'aider ?
 

Discussions similaires

Statistiques des forums

Discussions
312 046
Messages
2 084 839
Membres
102 686
dernier inscrit
Franck6950