Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Trier par groupe en fonction des valeurs

skydry20

XLDnaute Nouveau
Bonjour,

Un petit pb s'impose à moi :

Je souaiterais qu'en fonction de la valeur des resultats de la colonne "G" de mon onglet "Resultat", les noms correspondants en colonne "B" se classe par groupe dans l'onglet "Groupe"

Pourriez- vous m'aider s'il vous plaît ?

skydry20

Le fichier est ci-joint
 

Pièces jointes

  • test1.xls
    35.5 KB · Affichages: 47
  • test1.xls
    35.5 KB · Affichages: 43
  • test1.xls
    35.5 KB · Affichages: 45

skydry20

XLDnaute Nouveau
Re : Trier par groupe en fonction des valeurs

Pour détailler :

je souhaiterais que :
si G6:G300 est entre 0 et 25 alors B6:B300 se classe en "!Groupe" B3:B300.
si G6:G300 est entre 25 et 50 alors B6:B300 se classe en "!Groupe" C3:C300.
si G6:G300 est entre 50 et 75 alors B6:B300 se classe en "!Groupe" D3300.
et si G6:G300 est entre 75 et 100 alors B6:B300 se classe en "!Groupe" E3:E300.

Quelqu'un aurait-il une idée, s'il vous plaît ?
 

mromain

XLDnaute Barbatruc
Re : Trier par groupe en fonction des valeurs

bonjour skydry20,

voici une solution en macro :
Code:
Sub test()
Dim tabValeurs() As Variant, nbLignesTab As Long, nbLignes As Long, i As Long
Dim i1 As Long, i2 As Long, i3 As Long, i4 As Long
    
    With ThisWorkbook.Sheets("Resultat")
        nbLignesTab = WorksheetFunction.Max( _
            Evaluate("SumProduct((" & .Range("G6:G300").Address & ">=0)*(" & .Range("G6:G300").Address & "<=25)*1)"), _
            Evaluate("SumProduct((" & .Range("G6:G300").Address & ">25)*(" & .Range("G6:G300").Address & "<=50)*1)"), _
            Evaluate("SumProduct((" & .Range("G6:G300").Address & ">50)*(" & .Range("G6:G300").Address & "<=75)*1)"), _
            Evaluate("SumProduct((" & .Range("G6:G300").Address & ">75)*(" & .Range("G6:G300").Address & "<=100)*1)"))
        
        ReDim tabValeurs(1 To nbLignesTab, 1 To 4)
        
        nbLignes = .Range("A" & .Rows.Count).End(xlUp).Row
        For i = 6 To nbLignes
            If .Range("G" & i).Value >= 0 And .Range("G" & i).Value <= 25 Then
                i1 = i1 + 1
                tabValeurs(i1, 1) = .Range("B" & i).Value
            ElseIf .Range("G" & i).Value > 25 And .Range("G" & i).Value <= 50 Then
                i2 = i2 + 1
                tabValeurs(i2, 2) = .Range("B" & i).Value
            ElseIf .Range("G" & i).Value > 50 And .Range("G" & i).Value <= 75 Then
                i3 = i3 + 1
                tabValeurs(i3, 3) = .Range("B" & i).Value
            ElseIf .Range("G" & i).Value > 75 And .Range("G" & i).Value <= 100 Then
                i4 = i4 + 1
                tabValeurs(i4, 4) = .Range("B" & i).Value
            End If
        Next i
    End With

    ThisWorkbook.Sheets("Groupe").Range("B3").Resize(UBound(tabValeurs, 1), UBound(tabValeurs, 2)).Value = tabValeurs

End Sub
a+
 

Jocelyn

XLDnaute Barbatruc
Re : Trier par groupe en fonction des valeurs

Bonjour le Forum,
Bonjour skydry20, mromain,

Pour le cas une solution par formule

Jocelyn
 

Pièces jointes

  • syl20k.xls
    13.5 KB · Affichages: 46
  • syl20k.xls
    13.5 KB · Affichages: 47
  • syl20k.xls
    13.5 KB · Affichages: 48

mromain

XLDnaute Barbatruc
Re : Trier par groupe en fonction des valeurs

re bonjour,
bonjour Jocelyn,

une autre solution (en formule aussi)
- saisir la formule suivante en B3 de la feuille "Groupe"
- la valider avec <Ctrl> + <Maj> + <Entrée>
- la tirer vers la droite et vers le bas
Code:
=SI(LIGNE()-2>SOMMEPROD((Resultat!$G$6:$G$205>SUBSTITUE(STXT(B$2;TROUVE("de";B$2)+3;2);" ";"")*1)*(Resultat!$G$6:$G$205<=STXT(B$2;TROUVE("à";B$2)+2;NBCAR(B$2)-TROUVE("à";B$2)-2)*1)*1);"";INDIRECT("Resultat!B"&PETITE.VALEUR(((Resultat!$G$6:$G$205>SUBSTITUE(STXT(B$2;TROUVE("de";B$2)+3;2);" ";"")*1)*(Resultat!$G$6:$G$205<=STXT(B$2;TROUVE("à";B$2)+2;NBCAR(B$2)-TROUVE("à";B$2)-2)*1)*LIGNE(Resultat!$G$6:$G$205));LIGNES(Resultat!$G$6:$G$205)-SOMMEPROD((Resultat!$G$6:$G$205>SUBSTITUE(STXT(B$2;TROUVE("de";B$2)+3;2);" ";"")*1)*(Resultat!$G$6:$G$205<=STXT(B$2;TROUVE("à";B$2)+2;NBCAR(B$2)-TROUVE("à";B$2)-2)*1)*1)+(LIGNE()-2))))

a+
 

skydry20

XLDnaute Nouveau
Re : Trier par groupe en fonction des valeurs

Merci à tous pour vos réponses nombreuses et variées !

En revanche, j'en suis vraiment à mes premiers balbutiement sur Excel et

- j'ai du mal à me servir des macros, meme si j'ai pu constater que ta version mromain fonctionne je n'arrive pas à garder la macro... donc une solution avec formule me séduit;

- Jocelyn je n'arrive pas à transposer la formule de ton fichier sur le mien;

- mromain, je travail sous une version EN d'Excel, peux-tu me renvoyer le fichier initiale avec ta Formule ? elle sera traduite automatiquement en EN quand je l'ouvrirais avec ma version...

Merci à vous !
 

Pièces jointes

  • test1.xls
    35.5 KB · Affichages: 31
  • test1.xls
    35.5 KB · Affichages: 33
  • test1.xls
    35.5 KB · Affichages: 33

Discussions similaires

Réponses
9
Affichages
595
Réponses
3
Affichages
453
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…