Résolu 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,
 
Ce fil a été résolu! Aller à la solution…

Fichiers joints

Robert

XLDnaute Barbatruc
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 :
 
Ce message a été identifié comme étant une solution!

Fichiers joints

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 ?
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Patouli, Robert

•>patouli
Déclare en Long plutôt qu'en Integer
Donc partout ou tu vois As Integer remplace par As Long
Exemple
Remplace
Dim I As Integer
par
Dim I As Long
etc...
 
Ce message a été identifié comme étant une solution!

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas