OVH Cloud OVH Cloud

Recoupement

1 réponse
Avatar
Steph
Bonjour,

Ayant deux colonnes A et B avec des valeurs qui peuvent se répéter de la
façon suivante :

a1 2
b1 8
a1 5
b1 15
a1 2
b1 15
a1 10
b1 15
b1 8

comment faire pour avoir :

a1 2 5 10
b1 8 15

Autrement dit une transposition des colonnes en ligne et un recoupement des
données pour éviter une répétition des valeurs ?

merci

Travis

1 réponse

Avatar
anonymousA
bonjour,

une possibilité parmi d'autres. Celle-ci présente l'avantage de laisser
sur la même feuille les résultats présentés comme tu le souhaites. Je
suis cependant parti du principe que tu as un filtre automatique sur tes
données (avec des entetes en ligne 1) et que ces dernières ne
commencent qu'en ligne A2 et qu'elles sont présentées en colonne A les
occurences et en colonne B les valeurs.
Par ailleurs j'ai Excel 2000 et je ne sais pas si sur Excel97 la méthode
showAlldata existe mais comme tu n'avais précisé ta version d'Excel.

Dim coll1 As New Collection, coll2 As New Collection, ws As Worksheet
Dim I As Long, J As Long, K As Long, ligneoccur As Long, c As Range
Dim plagefiltre As Range, plagefiltrevisible As Range

Set ws = ActiveSheet

On Error Resume Next

ws.ShowAllData

For Each c In Range("A2:A" & Range("A65536").End(xlUp).Row)
coll1.Add c.Value, CStr(c.Value)
Next
On Error GoTo 0

Set plagefiltre = ws.Range("_FilterDatabase")

For I = 1 To coll1.Count

plagefiltre.AutoFilter Field:=1, Criteria1:=coll1(I)
Set plagefiltrevisible = plagefiltre.Offset(1,
1).Resize(plagefiltre.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
ligneoccur = plagefiltrevisible.Areas(1).Cells(1).Row

For Each c In plagefiltrevisible
On Error Resume Next
coll2.Add c.Value, CStr(c.Value)
Next
On Error GoTo 0

For J = 2 To coll2.Count
Cells(ligneoccur, J + 1).Value = coll2(J)
Next

Set coll2 = Nothing

For J = plagefiltrevisible.Areas.Count To 1 Step -1
For K = plagefiltrevisible.Areas(J).Cells.Count To 1 Step -1
If plagefiltrevisible.Areas(J).Cells(K).Row <> ligneoccur Then
plagefiltrevisible.Areas(J).Cells(K).EntireRow.Delete
Next
Next


Next

Set coll1 = Nothing
ws.ShowAllData

A+

Bonjour,

Ayant deux colonnes A et B avec des valeurs qui peuvent se répéter de la
façon suivante :

a1 2
b1 8
a1 5
b1 15
a1 2
b1 15
a1 10
b1 15
b1 8

comment faire pour avoir :

a1 2 5 10
b1 8 15

Autrement dit une transposition des colonnes en ligne et un recoupement des
données pour éviter une répétition des valeurs ?

merci

Travis