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,

23exemple.xlsx (199.06 Ko)

Bonjour,

à vérifier mais c'est la base de travail

P.

18exemple.xlsx (201.47 Ko)

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.

16exemple-tcd.xlsx (214.03 Ko)

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
Rechercher des sujets similaires à "recherche base donee criteres"