Reclasser une base horizontalement avec doublons

g.dioni

XLDnaute Nouveau
Bonjour,

Je viens de m'inscrire ici, site où j'ai toujours pu trouver une réponse à un soucis sur excel, mais là, je sèche, car je sens que j'ai du mal à orienter mes recherches sur le forum.

Bref, le cadre est le suivant : j'ai 3 colonnes de plusieurs milliers de lignes. 1 ère colonne, des références de produits (1A - 1B - 2A - etc....), 2ième colonne les quatités (10 - 20 - 30 - etc....), et 3ième colonne les prix pour chaque référence.

Le soucis, est que l'on va avoir des doublons dans la 1ere colonne, car certaines références, sont vendues par 10, par 20, ou autre, avec du coup, un tarif différent.

Ce que j'aimerai, c'est avoir les doublons horizontalement, donc par exemple, au lieu d'avoir :
- référence 1A - quantité 10 - prix 15
- référence 1A - quantité 20 - prix 12

J'aimerai obtenir ça :
- référence 1A - quantité 10 - prix 15 - quantité 20 - prix 12

Je ne sais pas du tout vers quelle formule me tourner, la recherche V me paraissant limite pour ça...

Merci d'avance de m'aiguiller dans mes recherches !
 

R@chid

XLDnaute Barbatruc
Re : Reclasser une base horizontalement avec doublons

Bonjour et Bienvenu sur XLD,
un fichier exemple sans données confidentielles peut nous aider @ t'aider,
Aller en mode avancé ==> Gérer les pièces jointes
@ te relire
 

g.dioni

XLDnaute Nouveau
Re : Reclasser une base horizontalement avec doublons

Merci de l'accueil.

Voici mon fichier d'exemple. J espère qu'il est assez clair. Petite précision : un produit n'aura jamais 2 types d "unité".
 

Pièces jointes

  • Exemple XLD.xlsx
    8.2 KB · Affichages: 34
  • Exemple XLD.xlsx
    8.2 KB · Affichages: 36
  • Exemple XLD.xlsx
    8.2 KB · Affichages: 37

g.dioni

XLDnaute Nouveau
Re : Reclasser une base horizontalement avec doublons

Merci beaucoup ! C'est parfait... Sauf que je dois être suffisamment peu expérimenté pour ne pas savoir l'exploiter...

Du coup quand je copie/colle les données de mon tarif (= même colonnes que le petit tableau à gauche, mais sur 5913 lignes), le tableau avec les formules ne bouge pas. J'ai du loupé un truc je pense... J'ai pensé à changé les plages (définies de A6:A11 dans ton exemple) en A6:A5913, mais ne suffit pas visiblement.

Aurais tu une idée ? c'est frustrant d'être si proche du but ^^
 

g.dioni

XLDnaute Nouveau
Re : Reclasser une base horizontalement avec doublons

Oui oui j'ai parfaitement vu ça dans tes explications sur le document. J'ai même cherché à en savoir plus sur cette combinaison, donc ce sont des formules matricielles...chose que je ne connais absolument pas.

On est d'accord : j'ai ouvert ton document, j'ai pris les 4 colonnes de 5913 lignes sur mon document pro et collé ces dernières à la même place que mon petit tableau de gauche sur l'exemple. Ensuite je vais sur la colonne jaune, j effectue la combinaison ctrl+maj+entrée, je la tire, mais les colonnes en dessous restent vides... Donc je change la plage (en remplaçant A6:A11 qui se réfère à l'exemple, par A6:A5913), mais malgré cela, aucun changement en vue... Je suis sur que j'ai loupé une évidence !
 

g.dioni

XLDnaute Nouveau
Re : Reclasser une base horizontalement avec doublons

J'ai rien dis... En effet c était vraiment une évidence. D'abord je modifie ma plage dans ta formule, ensuite je valide par ctrl + maj + entrée... C'est toujours bon ces moments ^^

En tous cas, merci beaucoup de ton aide !
 

g.dioni

XLDnaute Nouveau
Re : Reclasser une base horizontalement avec doublons

Resalut ! Enfait j'ai un gros soucis, j'ai donc rajouté mes 5000 références, mais la vitesse de calcul dépasse l'entendement... Par exemple 5 minutes, pour tirer la formule sur 10 petites lignes... C'est normal ?

Je suis en multithread, et calcul manuel.
 

R@chid

XLDnaute Barbatruc
Re : Reclasser une base horizontalement avec doublons

Bonjour,
les formules matricielles ralentirent le fonctionnement du fichier donc il faut passe soit par du VBA ob bien une colonne Intermediaire et une formule classique...
@ toi de choisir, et pour le VBA je ne peux pas t'aider mais peut être un expert va surement passer par la
@ micalement
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Reclasser une base horizontalement avec doublons

Bonsoir à tous,
un essai via VBA.
Code:
Sub Transposer()
Dim dico As Object, Pl As Range, T(), T2(), c, Tclé, Titem
Dim DerLig As Long, ligne As Long, i As Long, j As Long, n As Long
Application.ScreenUpdating = False
Range("F2:M10000").ClearContents
Set Pl = [A1].CurrentRegion.Offset(1)
Set Pl = Pl.Resize(Pl.Rows.Count - 1, Pl.Columns.Count)
T() = Pl.Columns(1).Value
Set dico = CreateObject("scripting.dictionary")
For Each c In T
    dico(c) = dico(c) + 1
Next c

Tclé = dico.keys
Titem = dico.items

For i = 0 To dico.Count - 1
    DerLig = Range("F" & Rows.Count).End(xlUp).Row + 1
    ligne = 2
    ReDim T2(1 To Titem(i) * 2)
    For j = LBound(T2) To UBound(T2) Step 2
        T2(j) = Cells(ligne + n, 3)
        T2(j + 1) = Cells(ligne + n, 4)
        n = n + 1
    Next j
    Range("F" & DerLig) = Tclé(i)
    Range("G" & DerLig) = Cells(ligne + n - 1, 2).Value
    Range("H" & DerLig).Resize(1, UBound(T2)) = T2
    Application.ScreenUpdating = True
Next i
End Sub
A+
 

Pièces jointes

  • Exemple XLD.xls
    37.5 KB · Affichages: 36
  • Exemple XLD.xls
    37.5 KB · Affichages: 32
  • Exemple XLD.xls
    37.5 KB · Affichages: 34

david84

XLDnaute Barbatruc
Re : Reclasser une base horizontalement avec doublons

Re
Application.ScreenUpdating = True doit être placé avant le End Sub
Code:
Sub Transposer()
Dim dico As Object, Pl As Range, T(), T2(), c, Tclé, Titem
Dim DerLig As Long, ligne As Long, i As Long, j As Long, n As Long
Application.ScreenUpdating = False
Range("F2:M10000").ClearContents
Set Pl = [A1].CurrentRegion.Offset(1)
Set Pl = Pl.Resize(Pl.Rows.Count - 1, Pl.Columns.Count)
T() = Pl.Columns(1).Value
Set dico = CreateObject("scripting.dictionary")
For Each c In T
    dico(c) = dico(c) + 1
Next c

Tclé = dico.keys
Titem = dico.items

For i = 0 To dico.Count - 1
    DerLig = Range("F" & Rows.Count).End(xlUp).Row + 1
    ligne = 2
    ReDim T2(1 To Titem(i) * 2)
    For j = LBound(T2) To UBound(T2) Step 2
        T2(j) = Cells(ligne + n, 3)
        T2(j + 1) = Cells(ligne + n, 4)
        n = n + 1
    Next j
    Range("F" & DerLig) = Tclé(i)
    Range("G" & DerLig) = Cells(ligne + n - 1, 2).Value
    Range("H" & DerLig).Resize(1, UBound(T2)) = T2
Next i
Application.ScreenUpdating = True
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 682
Messages
2 090 891
Membres
104 689
dernier inscrit
phlentier