rangement dans un tableau

G

gothc

Guest
bonjour je cherche comment faire en vba pour faire le rangement d'une liste dans un tableau
en piéce jointe un example
merci d'avance
 
Z

Zon

Guest
Salut,

Colles ce 1 er jet de code dans un module, il te reste à adpater et rajouter la gestion d'erreur.

Sub Princ()
Dim C As Range, PlageListe As Range, PLageCrit As Range
Dim L&, I&, T
Application.ScreenUpdating = False
T = Array(21, 18, 15) 'L'ordre du + grand au + petit est important, Col U, R et O
With Sheets("Feuil1")
Set PlageListe = Range(.[B23], .[K65536].End(xlUp)) ' à adapter
Set PLageCrit = .Range("O25:U" & Maxi(.Name, Array("O", "R", "U"))) ' à adapter
End With

With PlageListe
Range(.Columns(2), .Columns(7)).Clear 'Effacement de la plage résultat
For Each C In .Columns(9).Cells
L = RechUnique(PLageCrit, C.Value)
For I = 0 To UBound(T)
If T(I) = L Then
Range(C, C.Offset(0, 1)).Copy C.Offset(0, -(I + I + 3))
Exit For
End If
Next I
Next C
'Moyenne,à améliorer
.Cells(65336, 9).End(xlUp).Offset(1, -6).Value = Application.Average(.Columns(3))
.Cells(65336, 9).End(xlUp).Offset(1, -4).Value = Application.Average(.Columns(5))
.Cells(65336, 9).End(xlUp).Offset(1, -2).Value = Application.Average(.Columns(7))
End With
End Sub

Function Maxi(F$, T)
Dim I&
For I = 0 To UBound(T)
Maxi = Application.Max(Maxi, Sheets(F).Range(T(I) & "65536").End(xlUp).Row)
Next I
End Function

Function RechUnique&(Plage As Range, Valeur)
Dim C As Range
With Plage
Set C = .Find(Valeur, , xlValues, xlWhole)
If Not C Is Nothing Then RechUnique = C.Column
End With
End Function


A+++
 

Statistiques des forums

Discussions
312 361
Messages
2 087 613
Membres
103 607
dernier inscrit
lolo1970