XL 2010 Réorganisation de données

jean123

XLDnaute Occasionnel
Bonjour a tous


j'ai un classeur dans lequel j'ai 8 onglet:
SP1
SP2
SP3
SP4
SP5
CCP

pour chaque onglet SP j'ai une colonne DATE (A) , une colonne NUMERO (B) et des données de la colonne POSITION1 à POSITION 143 (C:EO)

Pour l'onglet CPP j'ai une colonne DATE (C) , une colonne NUMERO (B) et des étiquettes de colonne POSITION1 à POSITION 143 (D:EP)

j'aimerai pouvoir copier coller les données POSITION les onglets SP1 àSP5 dans l'onglet CCP selon deux condition qui sont la DATE et NUMERO

Indépendamment des onglets précédemment cité j'ai 2 autre onglet

TBC
TBLF

Pour l'onglet TBC j'ai une colonne DATE (A) et des données de la colonne POSITION1 à POSITION 143 (C:EN)

Pour l'onglet TBLF j'ai une colonne DATE (A) et et des étiquettes de colonne POSITION1 à POSITION 143 (H:ET)

j'aimerai pouvoir copier coller les données POSITION de l'onglet TBC dans l'onglet TBLF selon la condition DATE

Dans le classeur d'origine chaque onglet contient environ 40 000 ligne de données

Quelqu'un peut m'aider ?
 

Pièces jointes

  • TRIE.xlsx
    123.3 KB · Affichages: 50

jean123

XLDnaute Occasionnel
j'ai fait des recherches sur les différents forum mais rien répondant a ma demande (le plus souvent selon qu’une condition et ou entre 2 onglets) je ne suis pas assez calé en vba pour adapter les macro (j'arrive a faire que des chose très très simple)

Si quelqu'un peut m'aider (traiter ça manuellement prendrai un temps fou)
 

klin89

XLDnaute Accro
Bonjour le forum, :)

Comme par enchantement, je peux à nouveau me connecter au forum aujourd'hui 07 août 2017
soit après 7 semaines d'inaccessibilité.

Dans la feuille CPP, on dirait que les numéros en colonne B sont répartis de façon aléatoire
Pour résoudre ton problème, tu peux utiliser un dictionnaire, l'association de la date et du numéro des différentes feuilles SP* constituant la clé du dictionnaire
L'item associé sera la ligne associée à cette date et ce numéro
A l'aide de la méthode exists, tu pourras alors ventiler tes différentes lignes dans la feuille CPP

klin89
 
Dernière édition:

sousou

XLDnaute Barbatruc
Bonjour à tous
Tout d'abord regarde le fichier joint et la feuille cpp2 après avoir lancer la macro test, et dis mois si j'ai compris ce que tu cherches à faire
 

Pièces jointes

  • Copie de TRIE.xlsm
    137.4 KB · Affichages: 39

jean123

XLDnaute Occasionnel
bonjour a tous, je vous remercie de l'attention que vous portez a mon problème.
Étant a l’étrange je n'ai pas pu répondre au différentes questions plus tôt.

Sousou j'ai testé ta macro ce n'est pas tout a fait ça. en fait ce que je souhaite (comme la bien résumé Klin89) c'est ventiler les différentes lignes des feuilles SP dans la feuille CPP par date et par numero
et de même entre la feuille TBC et TBLF

Klin89 je suis sur que c'est surement la bonne méthode a appliquer, malheureusement je ne saurait la mettre en pratique.
 

klin89

XLDnaute Accro
Bonsoir à tous, :)

Feuille CPP, pour les dates du 1er mai 2017, on ne ventile que les données des feuilles SP2 SP3 et SP4

On est bien d'accord, les dates des feuilles SP1 et SP5 n'ont pas été oubliées dans la feuille CPP

num.PNG


klin89
 
Dernière édition:

klin89

XLDnaute Accro
Re :)

En feuille CPP, on retrouve aussi les dates suivantes en double, est-ce normal :cool:
num1.PNG

Sinon sans ces lignes en double, essaie ceci :
VB:
Option Explicit
Sub test()
Dim a, b(), n As Long, i As Long, j As Long, txt As String
Dim dico As Object, ws As Worksheet
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    a = Sheets("CPP").Range("b1").CurrentRegion.Value
    For i = 2 To UBound(a, 1)
        txt = Join$(Array(a(i, 2), a(i, 1)), Chr(2))
        n = n + 1
        dico(txt) = n
    Next
    ReDim b(1 To dico.Count, 1 To UBound(a, 2) - 2)
    For Each ws In Worksheets([{"SP1","SP2","SP3","SP4","SP5"}])
        a = ws.Range("a1").CurrentRegion.Value
        For i = 2 To UBound(a, 1)
            txt = Join$(Array(a(i, 1), a(i, 2)), Chr(2))
            If dico.exists(txt) Then
                For j = 3 To UBound(a, 2)
                    b(dico(txt), j - 2) = a(i, j)
                Next
            End If
        Next
    Next
    Application.ScreenUpdating = False
    With Sheets("CPP").Range("b1")
        .CurrentRegion.Offset(1, 2).ClearContents
        .Offset(1, 2).Resize(UBound(b, 1), UBound(b, 2)).Value = b
    End With
    Set dico = Nothing
    Application.ScreenUpdating = True
End Sub
klin89
 

jean123

XLDnaute Occasionnel
bonjour je n'ai pas eu la possibilité de revenir vers vous auparavant et je m'en excuse
Klin89 ça marche nickel un grand merci à toi mais pourrait tu y faire une petite modif stp
si je n'ai pas de date correspondante que ça puisse ventiler les donnés quand même
 

Discussions similaires

Réponses
1
Affichages
386
Réponses
5
Affichages
258

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T