Filtrer valeurs similaires

Fermé
sormick - 12 sept. 2014 à 18:54
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 - 15 sept. 2014 à 14:39
Bonjour,

j'ai deux colonnes comme ceci:

chine 7
chine 12
chine 12
chine 16
chine 16
chine 16
maroc 2
maroc 4
maroc 4

Je souhaiterais qu'un filtre ou une couleur soit appliquée avec deux critères (selon le nombre de chiffres en doublon ) et selon le pays.

Par exemple pour la chine les chine 16 doivent être placés au dessus, douze en dessous puis 7 en dessous. pour le maroc le chiffre 4 au dessus, le chiffre 2 en dessous.
Attention car par exemple il peut avoir un autre chiffre 12 mais pour un autre pays différent que la chine donc ce tri doit se faire selon deux critères . les doublons et les pays.

Merci pour toute aide éventuelle.

3 réponses

PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
12 sept. 2014 à 20:14
Ce n'est peut-être pas super élégant, mais voici un début de solution

Une petite macro qui créé un tableau avec des valeur unique et le nombre de doublons, et ensuite l'on tri ce nouveau tableau pour avoir l'ordre désiré

Sub Tri_tableau()

Dim pays As String
Dim valeur As Integer
Dim Doublons As Integer

Dim i As Integer '* Variable pour boucler sur nos valeur
Dim J As Integer '* Variable pour écrire les résultats

pays = Range("A1").Value '* On assigne pour commencer notre variable pays
valeur = Range("B1").Value '* même chose pour valeur, on suppose que le tableau commence en A1

i = 1
J = 1

Doublons = 0 '* Variable qu'on incrémente à chaque fois qu'une valeur identique est trouvée

While Range("a" & i).Value <> ""
'* On test voir si le pays et la valeur sont égal à la valeur en mémoire
If (pays = Range("A" & i).Value) And (valeur = Range("B" & i).Value) Then
'* Si c'est le cas, on incrémente notre variable doublons
Doublons = Doublons + 1

'* on "imprime" le résultat, ce résultat sera écrasé tant que les valeurs sont identique
Range("D" & J).Value = pays
Range("E" & J).Value = valeur
Range("F" & J).Value = Doublons
Else
'*On change de ligne
J = J + 1

'* Et l'on recommence avec la nouvelle valeur en réinitialisant notre variable doublons
pays = Range("A" & i).Value
valeur = Range("B" & i).Value
Doublons = 1

'* on "imprime" le résultat quand même
Range("D" & J).Value = pays
Range("E" & J).Value = valeur
Range("F" & J).Value = Doublons
End If

i = i + 1
Wend

'* Et on fait un tri, d'abord par pays, ensuite par doublons, a modifier au besoin
Columns("D:F").Select
Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("F1") _
, Order2:=xlDescending, Key3:=Range("E1"), Order3:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

End Sub
0
Re-bonjour,

Il n'y aurait pas t'il une macro plus simple pour ce type de tri ou encore sans passer par une macro est t'il possible sur excel de le faire avec des filtres élaborés ou par mise en forme conditionelle??
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
15 sept. 2014 à 14:39
J'ai mis quelques commentaires.
Mais en gros, tu as un while, un if 5 variables.

C'est relativement petit comme macro et c'est du code relativement de base. (Je ne suis pas un super expert).

J'imagine qu'un expert pour raccourcir le code avec des fonctions plus complexe.

Mais bon, voila le fichier sur cjoint, tu peux le downloader et le bidouiller.
C'est un bon début pour approfondir sur le code VBA.

http://cjoint.com/data/0IpoPB7Devi.htm
0