Report données en lignes vers colonnes avec après recherche multicritère

nberte

XLDnaute Nouveau
Bonjour à tous,

J'ai cherché sur le forum mais je n'arrive pas à trouver ce qui pourrait vraiment convenir à mon problème...je suis désolée si ma demande est redondante et je suis preneuse pour les liens.

Ce que je souhaite faire c'est épurer la liste de l'onglet "état" pour l'avoir sous la forme de l'onglet "état réduit".

J'ai donc une liste où le n° client et le code produit peuvent être identiques pour plusieurs lignes mais il y a différents code format et taille de lot. Je voudrais donc dans mon "état réduit" avoir une seule ligne par n°client et code produit avec toutes les infos de format et taille de lot dans les colonnes à la suite.

Bon dis comme ça, ce n'est vraiment pas clair mais j'ai mis des belles couleurs pour essayer que ça soit le plus clair possible ;)

Macro ou formule, tout me va mais par contre je ne peux pas faire les formules matricielles avec ma version de (bip!).

Merci beaucoup de votre aide, j'ai 15 000 lignes à traiter et autant dire qu'à la main, j'y suis encore dans 100 ans :)

Nadia
 

Pièces jointes

  • analyse_etat.xls
    14.5 KB · Affichages: 55

nberte

XLDnaute Nouveau
Re : Report données en lignes vers colonnes avec après recherche multicritère

Bonjour Joss56,

Merci de ton retour rapide (et pardon de ne pas avoir répondu plus tôt!).

J'avais effectivement pensé à un TCD mais l'état réduit sous la forme que j'ai indiqué me servira après pour faire des analyses précises. Il faut que je puisse garder les infos sous cette forme (lignes par n° client et code produit) et pas avec un menu déroulant pour sélectionner une ref.

Est ce que c'est faisable en formule ou macro ?

Je suis désolée mais ça dépasse LAAAARGEMENT mes pauvres connaissances excel :eek:

Merci de ton aide.

Nadia
 

klin89

XLDnaute Accro
Re : Report données en lignes vers colonnes avec après recherche multicritère

Bonsoir nberte, joss56, le forum :)

Il y a des incohérences dans le résultat souhaité.
Situation identique pour les clients 02137 et 03365 et restitution différente.
Tu ressors 2 fois le même code format pour le client 02137 et non pour le client 03365.

Je ne saisis pas non plus la logique de la structure du tableau qui doit être restitué :p

klin89
 

nberte

XLDnaute Nouveau
Re : Report données en lignes vers colonnes avec après recherche multicritère

Bonjour vous deux,

Alors effectivement je l'ai fait à la mano rapidement pour vous montrer d'où les erreurs.

Pour le client 02137 tu as raison, j'aurais dû mettre "non" dans la colonne autre format (comme pour client 03365)

En fait pour chaque couple client/produit je cherche à connaitre tous les formats possibles et ce qu'il y a eu comme type de lot (petit, gros ou les deux indépendamment du format).

Donc en gros, la macro doit lire les lignes par couple client/produit et restituer les différents formats en colonne à la suite (ce qui implique qu'il faut peut être ajouter des colonne au fur et à mesure) puis remplir les colonnes de tailles de lot.

J'avais gardé la trame de l'état initial en pensant que ce serait plus simple avec colonne A = client, colonne B = produit et le reste ensuite, ça me va parfaitement (voir fichier).

J'en profite pour ajouter une petite demande : au lieu d'avoir juste l'info de la taille du lot, est ce que c'est possible d'avoir le nombre de lots en fonction de la taille (colonne I et J dans mon exemple sachant que 1 ligne = 1 lot)

Encore désolée que ça soit si peu clair.

Merci en tout cas de prendre le temps de regarder.
Nadia
 

Pièces jointes

  • analyse_etat2.xls
    23 KB · Affichages: 70

Modeste

XLDnaute Barbatruc
Re : Report données en lignes vers colonnes avec après recherche multicritère

Bonjour le fil :)

Je ne sais pas si nberte repassera par ici ... Je ne sais pas non plus ce que donnera la piste en pièce jointe sur le volume qu'elle évoquait. Il conviendra donc de tester sur des volumes moindres et les augmenter ensuite progressivement.
Je suis parti du principe que les 6 colonnes prévues pour les "Code format" seront suffisantes.

J'ai enregistré le fichier au format .xlsm (puisque Excel 2007 renseigné)

nberte nous dira ... (pour exécuter la macro, ouvrir le fichier, appuyer sur Alt+F8, sélectionner la macro ListerFormats, puis Exécuter, prendre une grande inspiration, croiser les doigts, réciter une neuvaine à Sainte-Rita, prévenir la caserne de pompiers la plus proche, convoquer un exorciste, ... toute autre mesure conservatoire étant la bienvenue :rolleyes:)
 

Pièces jointes

  • analyse_etat (nberte).xlsm
    17.9 KB · Affichages: 59

klin89

XLDnaute Accro
Re : Report données en lignes vers colonnes avec après recherche multicritère

Bonsoir Nadia, le forum
Salut Modeste :)

A tester avec le fichier du post #5
Restitution en Feuil1.
VB:
Option Explicit

Sub test()
Dim a, b(), i As Long, maxcol As Long, n As Long, w(), x, pos
Const ub As Byte = 2
    With Sheets("Etat").Cells(1).CurrentRegion
        a = .Value
        x = Filter(.Parent.Evaluate("transpose(if(countif(offset(" & .Columns(4).Address & _
                        ",,,row(1:" & .Rows.Count & "))," & .Columns(4).Address & ")=1, " & _
                        .Columns(4).Address & ",char(2)))"), Chr(2), 0)
        ReDim b(1 To UBound(a, 1), 1 To 3)
        n = 1: b(n, 1) = a(1, 1): b(n, 2) = a(1, 3)
        With CreateObject("Scripting.Dictionary")
            .CompareMode = 1
            For i = 2 To UBound(a, 1)
                If Not .exists(a(i, 1)) Then
                    n = n + 1: ReDim w(1 To 2)
                    w(1) = n
                    Set w(2) = CreateObject("Scripting.Dictionary")
                    w(2).CompareMode = 1
                    w(2)(a(i, 2)) = Empty
                    b(n, 1) = a(i, 1): b(n, 2) = a(i, 3): b(n, 3) = a(i, 2)
                    .Item(a(i, 1)) = w
                Else
                    w = .Item(a(i, 1))
                    If Not w(2).exists(a(i, 2)) Then
                        w(2)(a(i, 2)) = Empty
                        If UBound(b, 2) < ub + w(2).Count Then
                            ReDim Preserve b(1 To UBound(b, 1), 1 To ub + w(2).Count)
                        End If
                        b(w(1), ub + w(2).Count) = a(i, 2)
                    End If
                    .Item(a(i, 1)) = w
                End If
            Next
            maxcol = UBound(b, 2)
            ReDim Preserve b(1 To UBound(b, 1), 1 To UBound(b, 2) + UBound(x))
            For i = 3 To maxcol: b(1, i) = "Code format": Next
            For i = 1 To UBound(x): b(1, maxcol + i) = "Nombre " & x(i): Next
            For i = 2 To UBound(a, 1)
                w = .Item(a(i, 1))
                pos = Application.Match(a(i, 4), x, 0)
                b(w(1), maxcol + pos - 1) = b(w(1), maxcol + pos - 1) + 1
            Next
        End With
    End With
    'Restitution et mise en forme
    With Sheets("Feuil1").Cells(1)
        .CurrentRegion.Clear
        .Parent.Columns(1).Resize(, maxcol).NumberFormat = "@"
        .Resize(n, UBound(b, 2)).Value = b
        With .CurrentRegion
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            With .Rows(1)
                .HorizontalAlignment = xlCenter
                .BorderAround Weight:=xlThin
                .Interior.ColorIndex = 22
                With .Offset(, 2).Resize(, .Columns.Count - 2 - UBound(x))
                    .Interior.ColorIndex = 38
                End With
                With .Offset(, maxcol).Resize(, .Columns.Count - maxcol)
                    .Interior.ColorIndex = 36
                End With
            End With
            .Columns.ColumnWidth = 13
        End With
        .Parent.Activate
    End With
End Sub
klin89
 

nberte

XLDnaute Nouveau
Re : Report données en lignes vers colonnes avec après recherche multicritère

Bonjour à tous,

Merci de votre aide, j'ai réussi à traiter mes nombreuses lignes sans trop de dommages collatéraux et sans prières ;)

A bientôt.

Bravo pour ce forum !

Nadia
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 961
Membres
103 066
dernier inscrit
bobfils