Regroupement de données

fabknight

XLDnaute Nouveau
Bonjour,
Je fais appel à vous afin de résoudre un problème.
J'ai trois tableau sur trois pages différentes et j'aimerais regrouper (mettre à la suite) les lignes ayant le même nom dans les trois tableau sur le premier.
Je joint un fichier exemple, vous trouverez sur la page res le résultat que je cherche à obtenir.
Cordialement,
fab
 

Pièces jointes

  • test res.xls
    14 KB · Affichages: 41
  • test res.xls
    14 KB · Affichages: 42
  • test res.xls
    14 KB · Affichages: 43

job75

XLDnaute Barbatruc
Re : Regroupement de données

Bonjour,

Fichier joint avec cette macro :

Code:
Sub Regroupe()
With Feuil4 'CodeName
  Feuil1.[A:B].Copy .[A1]
  .[A:B].Sort .[B1], Header:=xlYes
  Feuil2.[A:C].Copy .[C1]
  .[C:E].Sort .[E1], Header:=xlYes
  Feuil3.[A:C].Copy .[F1]
  .[F:H].Sort .[F1], Header:=xlYes
  .[E:F].Delete
  .[A:F].Sort .[A1], Header:=xlYes
  .Activate
End With
End Sub
Bien sûr il est nécessaire que tous les noms se retrouvent dans les 3 feuilles.

A+
 

Pièces jointes

  • test res(1).xls
    41 KB · Affichages: 47

job75

XLDnaute Barbatruc
Re : Regroupement de données

Bonjour le fil, le forum,

Pour obtenir le résultat en Feuil1 :

Code:
Sub Regroupe()
Application.ScreenUpdating = False
With Feuil1 'CodeName
  .[A:B].Sort .[B1], Header:=xlYes
  Feuil2.[A:C].Copy .[C1]
  .[C:E].Sort .[E1], Header:=xlYes
  Feuil3.[A:C].Copy .[F1]
  .[F:H].Sort .[F1], Header:=xlYes
  .[E:F].Delete: .[G:H].Insert 'insertion facultative
  .[A:F].Sort .[A1], Header:=xlYes
  .Activate
End With
End Sub
A+
 

Pièces jointes

  • test res(2).xls
    38.5 KB · Affichages: 34
Dernière édition:

job75

XLDnaute Barbatruc
Re : Regroupement de données

Re,

Une solution plus compliquée mais qui fonctionne quels que soient les nombres de feuilles et de colonnes :

Code:
Sub Regroupe()
Dim col%, w As Worksheet, n%, nom As Range, sup As Range
Application.ScreenUpdating = False
With Feuil1 'CodeName
  col = 3 '1ère colonne vide en Feuil1, à adapter
  .Range(.Columns(col), .Columns(.Columns.Count)).Delete
  .Cells.Sort .Rows(1).Find("Nom", , xlValues), Header:=xlYes
  For Each w In Worksheets
    If w.CodeName <> .CodeName Then
      n = w.Cells(1, .Columns.Count).End(xlToLeft).Column
      With .Columns(col).Resize(, n)
        w.[A:A].Resize(, n).Copy .Cells
        Set nom = .Rows(1).Find("Nom")
        .Sort nom, Header:=xlYes 'tri sur le nom
      End With
      Set sup = Union(nom, IIf(sup Is Nothing, nom, sup))
      col = col + n
    End If
  Next
  sup.EntireColumn.Delete 'suppression des colonnes des noms
  .Cells.Sort .[A1], Header:=xlYes 'tri sur colonne A
  .Activate 'facultatif
End With
End Sub
Fichier (3).

A+
 

Pièces jointes

  • test res(3).xls
    47 KB · Affichages: 40
Dernière édition:

fabknight

XLDnaute Nouveau
Re : Regroupement de données

Merci,
ça fonctionne parfaitement, par contre si pour un même nom, j'ai plusieurs offer name, comment puis-je faire pour que tous les offer name s'affichent? et non pas juste le premier comme c'est le cas avec une une recherche v classique.
Ps; excusez moi pour le retard.
Cordialement,
fab
 

job75

XLDnaute Barbatruc
Re : Regroupement de données

Bonjour fabknight, le forum,

Pas certain que vous ayez bien compris les solutions que j'ai proposées.

RECHERCHEV (VLookup) n'est utilisée nulle part :confused:

Il n'y a que des tris.

Si vous avez 2 offer names en Feuil2 pour le nom owell, il suffit que ce nom soit inscrit 2 fois dans toutes les feuilles.

Avec bien sûr à chaque fois l'identifiant en Feuil1 puisqu'à la fin on fait un tri sur lui.

Fichier (4).

A+
 

Pièces jointes

  • test res(4).xls
    39 KB · Affichages: 28

Discussions similaires

Statistiques des forums

Discussions
312 859
Messages
2 092 928
Membres
105 565
dernier inscrit
HervéD