Recherche dans une base de donée selon plusieurs critères
Bonjour, Bonsoir
Après avoir effectuer une recherche sur le forum,je n'ai pas trouvé la réponse à ma demande suivante (relativement spécifique).
L'idée serait de filtrer des données, et d'en renvoyer des valeurs selon plusieurs critères.
Un fichier exemple avec explication vaut plus qu'un long discourt, je vous link ce fichier avec un exemple du résultat souhaité.
En vous remerciant d'avance,
Super, Merci a toi Patrick.
C'est vrai avec quelques modifications et adaptation j'ai réussi à sortir quelque chose plus ou moins satisfaisant.
J'ai pensé, un peut trop tard, au tableau croisé dynamique qui enfaite répond presque parfaitement à ce dont je cherche. J'ai uniquement un souci pour grouper sous forme d'intervalle mes colonnes d'avancement.
Je joins à nouveau un exemple.
Solution trouver par la suite avec code vba.
Si cela peut intéresser voici le code pour base de travail.
Sub trie_TDC()
'Crée des groupes en fonction de deux intervales
Dim t() As Variant, i As Byte, c As Range, p As Range, pi As PivotItem, t2 As String
'déclaration des intervales
t = Array(0, 0.25, 0.5, 0.75, 1)
With Feuil4.PivotTables("Tableau croisé dynamique1")
'trie des valeurs numérique plus petit au plus grand
.PivotFields("avanc.").AutoSort xlAscending, "avanc."
'commencement des 5 boucles
i = 0
For Each c In .PivotFields("avanc.").DataRange
If c = t(i) Then If p Is Nothing Then Set p = c Else Set p = Union(p, c)
Next c
'écriture en mémoire de l'intervale des groupes
If Not p Is Nothing Then t2 = t(i) & ";": If p.Count > 1 Then p.Group
Set p = Nothing
For i = 1 To 3
For Each c In .PivotFields("avanc.").DataRange
If c > t(i - 1) And c <= t(i) Then If p Is Nothing Then Set p = c Else Set p = Union(p, c)
Next c
'écriture en mémoire de l'intervale des groupes
If Not p Is Nothing Then t2 = t2 & t(i - 1) & " à " & t(i) & ";": If p.Count > 1 Then p.Group
Set p = Nothing
Next i
i = 4
For Each c In .PivotFields("avanc.").DataRange
If c > t(i - 1) And c < t(i) Then If p Is Nothing Then Set p = c Else Set p = Union(p, c)
Next c
'écriture en mémoire de l'intervale des groupes
If Not p Is Nothing Then t2 = t2 & t(i - 1) & " à " & t(i) & ";": If p.Count > 1 Then p.Group
Set p = Nothing
i = 4
For Each c In .PivotFields("avanc.").DataRange
If c = t(i) Then If p Is Nothing Then Set p = c Else Set p = Union(p, c)
Next c
'écriture en mémoire de l'intervale des groupes
If Not p Is Nothing Then t2 = t2 & t(i) & (";VR;VR(FC.GW;"): If p.Count > 1 Then p.Group
Set p = Nothing
With .PivotFields(.PivotFields.Count)
i = 0
a = .PivotItems.Count
'boucle renomme les groupes avec nom intervalle
For Each pi In .PivotItems
pi.Name = Split(t2, ";")(i): i = i + 1
Next pi
End With
End With
End Sub