Tri selon nombre occurence (vba)

  • Initiateur de la discussion Initiateur de la discussion Scoobidoo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Scoobidoo

XLDnaute Occasionnel
Bonjour à tous, le Forum,

Je viens vers vous cette fois ci pour savoir comment puis je faire pour qu'en vba, les colonnes A et B soient triées selon l'ordre de la colonne D (qui correspond au nombre décroissant des occurences trouvées colonne B et classeé par ordre alphabétique croissant en cas de nombre d'occurences identiques). Je vous joins mon fichier à toutes fins utiles. Je ne suis pas certain d'être très clair mais n'hésitez pas à revenir vers moi pour plus de précisions si besoin. Dans l'attente de vouslire je vous souhaite à tous une bonne journée ensoleillée.

Scoobidoo
 

Pièces jointes

Re : Tri selon nombre occurence (vba)

Bonjour,
En utilisant l'enregistreur de macro tu aurais eu la réponse
Code:
Feuil1.Columns("A:E").Sort Key1:=Range("E2"), Order1:=xlDescending, Key2:=Range("D2") _
        , Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False _
        , Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
        xlSortNormal
A+
 
Re : Tri selon nombre occurence (vba)

Bonjour Hippolite,

Je n'ai pas du être clair : je souhaite que la colonne B (et la A qui lui est "attachée") soit classée selon l'ordre de la colonne D. Ta proposition ne semble pas répondre à mon besoin mais je te remercie de t'être penché sur mon problème.

Scoobidoo
 
Re : Tri selon nombre occurence (vba)

bonjour
La colonne C étant libre mettez
Code:
=NB.SI($B$2:$B$993;$B2)
à partir de C2 et classez la liste par col. C en ordre décroissant puis B en ordre croissant

Pareil, l'enregistrer en macro pour avoir le brouillon de code.
À+
 
Dernière édition:
Re : Tri selon nombre occurence (vba)

Bonjour Danreb,

J'ai essayé ta proposition mais cela me donne un résultat non conforme à mon besoin comme le montre l'extrait suivant :

MATTEUS MARKUS LUU LESKINEN JUICE 20
MINEA LESKINEN JUICE 19
BLOOM ON DEMAND BUTLEJABOUHAYNE 18
MUSTA AURINKO NOUS LESKINEN JUICE 18
AKI BELLABELLADURAN 17
BRACE YOURSELF BUTLEJABOUHAYNE 17
MYRKYTYKSEN OIREET LESKINEN JUICE 17
DREAM LOVE BELLABELLADURAN 16
CALM DOWN BUTLEJABOUHAYNE 16
NAPOLEONIN MOPO LESKINEN JUICE 16

Mais je sens que l'on s'approche de la solution ! Où plutôt que vous vous approchez de la solution dont j'ai besoin. Merci à tous de votre aide.

Scoobidoo
 
Re : Tri selon nombre occurence (vba)

Bonjour Néné, le Forum,

Félicitations car cela répond exactement à mon besoin. Tu me permets de pouvoir désormais continuer dans mon projet et je t'en remercie très sincèrement. Je te souhaite une très bonne journée ainsi qu'à tous les membres du forum. Encore merci et à bientôt.

Scoobidoo
 
Re : Tri selon nombre occurence (vba)

Bonjour,
Code:
Sub Macro1()
Dim T, T2() As String
Dim i&, x&, rng As Range, c As Range
T = Range("D2:E" & Range("D65000").End(xlUp).Row)
Set rng = Range("B2:B" & Range("B65000").End(xlUp).Row)
For i = 1 To UBound(T, 1)
    With rng
        Set c = .Find(T(i, 1), , xlValues, xlWhole)
        If Not c Is Nothing Then
            Adresse = c.Address
            Do
                x = x + 1
                ReDim Preserve T2(1 To 2, 1 To x)
                T2(1, x) = c.Offset(, -1).Text
                T2(2, x) = c.Text
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> Adresse
        End If
    End With
Next
Range("G2").Resize(UBound(T2, 2), 2) = Application.Transpose(T2)
End Sub
A+
kjin
 
Re : Tri selon nombre occurence (vba)

Bonjour le fil, bonjour le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim pl1 As Range 'déclare la variable pl1 (PLage 1)
Dim pl2 As Range 'déclare la variable pl2 (PLage 2)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim r As Range 'déclare la variable r (Recherche)
 
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1")
    Set pl1 = .Range("B2:B" & .Range("B65536").End(xlUp).Row) 'définit la plage 1
    Set pl2 = .Range("D2:D" & .Range("D65536").End(xlUp).Row) 'définit la plage 2
    For Each cel In pl1 'boucle sur toutes les cellule cel de l aplage 1
        Set r = pl2.Find(cel.Value, , xlValues, xlWhole) 'définit la recherche
        'si il existe au moins une occurrence, place en colonne C le nombre d'occurence de cel
        If Not r Is Nothing Then cel.Offset(0, 1).Value = r.Offset(0, 1).Value
    Next cel 'prochaine cellule cel de la boucle
    'tri des coloones A, B et C selon C
    .Range("A2:C" & .Range("C65536").End(xlUp).Row).Sort Key1:=Range("C2"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    .Columns("C").ClearContents 'efface le contenu de la colonne C
End With 'fin de la prise en compte de l'onglet "Feuill1"
End Sub

[Édition]
Salut Kjin on s'est croisé...
 
Re : Tri selon nombre occurence (vba)

Bonjour à tous,
une autre possibilité à tester :
Code:
Sub Essai()
Application.ScreenUpdating = False
  Set mondico = CreateObject("Scripting.Dictionary")
  For Each c In Range("A2", [B65000].End(xlUp))
    mondico.Item(c.Value) = mondico.Item(c.Value) + 1
  Next c
    With Sheets("Feuil1")
      .[D2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
      .[E2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)
      .[D2].Sort key1:=.[E2], Order1:=xlDescending, Header:=xlGuess
    End With
 Application.ScreenUpdating = True
 End Sub
A+
 
Re : Tri selon nombre occurence (vba)

Salut Kijn, Robert, David84,

Merci pour vos propositions. Elles sont également la réponse exacte à la résolution de mon problème tout comme celle de Néné. Devant tant de solutions je vais regarder celle qui me semble la plus facile à adapter à mon cas. Je vous remercie et vous souhaite un très bon après-mdid ensoleillé. Au plaisir de vous croiser à nouveau sur le forum.

Scoobidoo.
 
Re : Tri selon nombre occurence (vba)

Re
c'est bizarre mais sauf erreur de ma part les différentes solutions proposées ne donnent pas les mêmes résultats.
Personnellement, je ne me sers que des colonnes A et B pour arriver au résultat final : Est-ce le but ?
Je n'arrive pas à obtenir le même résultat avec les autres codes.
Je mets un classeur exemple pour me faire bien comprendre.
Merci à ceux qui veulent le faire de tester vos codes et de me dire ce qu'il en est car les autres solutions proposées m'intéressent.
A+
 

Pièces jointes

Re : Tri selon nombre occurence (vba)

Bonjour David,

En effet, apparemment ton code prend en compte la colonne A alors que celle-ci n'est "qu'attachée" à la colonne B au moment du tri qui doit se faire dans l'ordre décroissant du nombre d'occurences. Pour mon projet, j'ai finalement adopté le code de Robert si cela peut t''éclairer. Quoiqu'il en soit je te remercie pour ton aide. A+

Scoobidoo.
 
Re : Tri selon nombre occurence (vba)

Re
Ci-joint un code qui ne prend en compte que la colonne B :
Code:
Sub Essai2()
Application.ScreenUpdating = False
  Set mondico = CreateObject("Scripting.Dictionary")
  For Each c In Range("B2", [B65000].End(xlUp))
    mondico.Item(c.Value) = mondico.Item(c.Value) + 1
  Next c
    With Sheets("Feuil1")
      .[G2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
      .[H2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)
      .[G2].Sort Key1:=.[H2], Order1:=xlDescending, Header:=xlGuess
    End With
 Application.ScreenUpdating = True
 End Sub
Cela te donnera le classement par fréquence comme il est noté en colonne D et E.
En fait, je pensais que c'est cela que tu voulais obtenir, d'où mon incompréhension🙄.
Je crois que j'ai finalement compris ton attente,...et les collègues aussi contrairement à moi 😕 !
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Suggestion Suggestion
Recherche & référence DicoCountOrder
Réponses
0
Affichages
2 K
Réponses
4
Affichages
4 K
Réponses
15
Affichages
3 K
Réponses
2
Affichages
814
Retour