Classer et regrouper des données

gerzouille

XLDnaute Nouveau
Bonjour,

Je souhaiterais regrouper sous un critère les différentes valeurs qui le composent tout en n'en faisant qu'une cellule.

Pour être plus imagé je joint le fichier avec le résultat fait à la main.

Je n'arrive pas à cela avec un croisé dynamique.

Merci de votre aide
 

Pièces jointes

  • Bordereaux d'envoi.xls
    30.5 KB · Affichages: 53

david84

XLDnaute Barbatruc
Re : Classer et regrouper des données

Bonjour,
sélectionner A20:J20 rentrer la formule valider en matriciel :
Code:
=TRANSPOSE(INDEX($E$1:$E$15;PETITE.VALEUR(SI(EQUIV($E$2:$E$15;$E$2:$E$15;0)=LIGNE(INDIRECT("1:"&LIGNES($E$2:$E$15)));LIGNE($E$2:$E$15));LIGNE(INDIRECT("1:"&LIGNES($E$2:$E$15))))))
En A21 :
Code:
=SIERREUR(INDEX($B$1:$B$15;PETITE.VALEUR(SI($E$2:$E$15=I$5;LIGNE($B$2:$B$15));LIGNE(1:1)))&INDEX($C$1:$C$15;PETITE.VALEUR(SI($E$2:$E$15=I$5;LIGNE($B$2:$B$15));LIGNE(1:1)))&INDEX($D$1:$D$15;PETITE.VALEUR(SI($E$2:$E$15=I$5;LIGNE($B$2:$B$15));LIGNE(1:1)));"")
Validation matricielle également et tirer vers la droite et le bas.
A+
 

david84

XLDnaute Barbatruc
Re : Classer et regrouper des données

Merci
Pour la première partie pas de soucis, par contre la deuxième ne marche pas , j'ai essayé en changeant la référence à I5 mais cela ne fait rien non plus .

Merci
La référence n'est pas la bonne :
Code:
=SIERREUR(INDEX($B$1:$B$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)))&INDEX($C$1:$C$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)))&INDEX($D$1:$D$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)));"")
A+
 

st007

XLDnaute Barbatruc
Re : Classer et regrouper des données

et pour être complet

Code:
=SIERREUR(INDEX($B$1:$B$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)))&" "&INDEX($C$1:$C$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)))&" "&INDEX($D$1:$D$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)));"")

en matriciel

"CTRL"+"MAJ"+"ENTREE"


IMPECCABLE DAVID84 !!
 

st007

XLDnaute Barbatruc
Re : Classer et regrouper des données

et encore, avant que tu dise que çà coince sur 2003
Code:
=SI(ESTERREUR(INDEX($B$1:$B$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)))&" "&INDEX($C$1:$C$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)))&" "&INDEX($D$1:$D$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1))));"";INDEX($B$1:$B$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)))&" "&INDEX($C$1:$C$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)))&" "&INDEX($D$1:$D$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1))))
 

david84

XLDnaute Barbatruc
Re : Classer et regrouper des données

Sur Excel 2003, avec une condition pour cacher les valeurs d'erreur :
Code:
=SI(LIGNE(1:1)<=NB.SI($E$2:$E$15;A$20);INDEX($B$1:$B$15&$C$1:$C$15&$D$1:$D$15;PETITE.VALEUR(SI($E$2:$E$15=A$20;LIGNE($B$2:$B$15));LIGNE(1:1)));"")
A+
 

job75

XLDnaute Barbatruc
Re : Classer et regrouper des données

Bonjour gerzouille,

Voyez le fichier joint avec cette macro :

Code:
Sub Classer()
Dim tablo, d As Object, i&, t$, a, b, cc%, s
tablo = Range("B1", Range("E" & Rows.Count).End(xlUp))
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(tablo)
  t = tablo(i, 4)
  d(t) = d(t) & Chr(1) & tablo(i, 1) & " " & tablo(i, 2) & " " & tablo(i, 3)
Next
a = d.keys: b = d.items
'---restitution---
Application.ScreenUpdating = False
cc = Columns.Count
Range(Columns(7), Columns(cc)).ClearContents 'RAZ
For i = 0 To UBound(a)
  If i + 7 > cc Then MsgBox "Feuille insuffisante...": Exit Sub
  [G1].Offset(, i) = a(i)
  s = Split(Mid(b(i), 2), Chr(1))
  [G2].Offset(, i).Resize(UBound(s) + 1) = Application.Transpose(s)
Next
End Sub
Edit :avec Mid(b(i), 2) c'est mieux qu'un test dans la 1ère boucle.

A+
 

Pièces jointes

  • Bordereaux d'envoi(1).xls
    53 KB · Affichages: 31
Dernière édition:

job75

XLDnaute Barbatruc
Re : Classer et regrouper des données

Bonjour le fil, le forum,

On peut terminer par un tri de gauche à droite et un ajustement des colonnes :

Code:
Application.ScreenUpdating = False
cc = Columns.Count
Range(Columns(7), Columns(cc)).Delete 'RAZ
For i = 0 To UBound(a)
  If i + 7 > cc Then MsgBox "Feuille insuffisante...": GoTo 1
  [G1].Offset(, i) = a(i)
  s = Split(Mid(b(i), 2), Chr(1))
  [G2].Offset(, i).Resize(UBound(s) + 1) = Application.Transpose(s)
Next
1 With Range(Columns(7), Columns(cc))
  .Sort [G1], xlAscending, Orientation:=xlLeftToRight 'tri
  .AutoFit 'ajustement automatique des colonnes
End With
Fichier (2).

Edit : la RAZ avec .Delete c'est mieux pour la largeur des colonnes vides.

A+
 

Pièces jointes

  • Bordereaux d'envoi(2).xls
    55 KB · Affichages: 34
Dernière édition:

job75

XLDnaute Barbatruc
Re : Classer et regrouper des données

Re,

Si en colonne E on a toujours "CDIS" suivi d'un numéro, on peut trier sur ces numéros :

Code:
Application.ScreenUpdating = False
cc = Columns.Count
Range(Columns(7), Columns(cc)).Delete 'RAZ
Rows(1).Insert 'ligne auxiliaire pour le tri
For i = 0 To UBound(a)
  If i + 7 > cc Then MsgBox "Feuille insuffisante...": GoTo 1
  [G1].Offset(, i) = Replace(a(i), "CDIS", "")
  [G2].Offset(, i) = a(i)
  s = Split(Mid(b(i), 2), Chr(1))
  [G3].Offset(, i).Resize(UBound(s) + 1) = Application.Transpose(s)
Next
1 With Range(Columns(7), Columns(cc))
  .Sort [G1], xlAscending, Orientation:=xlLeftToRight 'tri
  .AutoFit 'ajustement automatique des colonnes
End With
Rows(1).Delete
Fichier (3).

A+
 

Pièces jointes

  • Bordereaux d'envoi(3).xls
    65.5 KB · Affichages: 41

Discussions similaires

Statistiques des forums

Discussions
312 171
Messages
2 085 931
Membres
103 049
dernier inscrit
plt