Filtrer valeurs similaires

sormick -  
PlacageGranby Messages postés 402 Statut Membre -
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

  1. PlacageGranby Messages postés 402 Statut Membre 26
     
    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
  2. sormick
     
    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
  3. PlacageGranby Messages postés 402 Statut Membre 26
     
    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