Filtrage des valeur min et max selon plusieurs critères

Bonjour,

Je rencontre des difficultés pour filtrer les valeurs minimums et maximums d'une colonne excel selon plusieurs critères.

Je m'explique: je travaille actuellement sur une base de donnée dans laquelle je répertorie tous les réseaux de bus en ile de France.

J'ai donc une colonne avec les noms des réseaux une avec le numéro des lignes, une avec les noms des arrêts de bus et une autre avec les coordonnées GPS (géopoint des arrêts de bus). Pour des raisons de cartographie, je souhaiterais filtrer et ne garder que deux arrêts de bus par ligne correspondant aux valeurs Max et min des geopoints.J'ai essayer toutes les fonctions de trie classique sur excel et aucune ne me permet de garder deux valeurs par ligne (Max et min), j'ai tenter avec les fonctions BDMIN() et max et je ne suis arrivé à rien de probant.

Je suis à bout d'option et j'en suis venu à faire ça manuellement! et c'est la crise de nerf!

Je vous remercie pour l'aide que vous pourriez m'apporter.

Bonjour,

Pourrais-tu construire un petit fichier test illustratif ... avec une vingtaine de lignes ... ?

Sans cela ... difficile de te proposer concrètement une solution viable ....

Bonjour James 007,

voici un échantillon de mon fichier.

Merci pour ton aide.

105example.xlsx (26.92 Ko)

Re,

Merci pour ton fichier ....

Peux-tu apporter quelques précisions ...???

Est-ce la Colonne E PointGeo qui sert de référence pour toutes les coordonnées GPS ...?

Sous quelle forme ton résultat final devrait-il apparaitre ...?

As-tu essayé d'insérer un TCD ...?

Que fais-tu manuellement aujourd'hui ... qui pourrait être automatisé ...?

Oui, c'est bien la colonne E qui sert de référence pour les coordonnées GPS. Non je n'avais pas pensé à insérer un TCD, je viens d'essayer et il me semble que cela peut donner quelque chose d'intéressant, mais je n'arrive pas à afficher la valeur min et max seulement des sommes, nb de valeurs etc..L'idéal serait de filtrer de telle sorte à ce que sur l'ensemble de ma base de données je n'ai que deux lignes excel par ligne de bus correspondant à la valeur Min et Max des points géo. L'idée serait ensuite d'extraire ce tableau filtré vers un nouveau classeur excel pour n'avoir que deux coordonnées par ligne de bus et pas pour chaque stations. (Pour rendre la cartographie plus lisible)

Bonjour,

Une proposition à étudier.

ALT F8, exécuter la procédure 'Filter_data'.

Cdlt.

145xlp-filter-data.xlsm (46.65 Ko)

Bonjour Jean Eric,

Merci beaucoup pour ton aide.

C'est exactement ce que je souhaitais faire. Cependant je n'ai pas bien compris comment tu as fait. Sur mon fichier il me suffit de faire alt+F8 et faire exécuter et j'obtiendrais la valeur min et max? Lorsque j'exécute la procédure filter data, j'ai un message d'erreur "9" et on me propose de déboguer et j'ai Microsoft virtual basic qui s'ouvre.

RE,

Parle-on de mon fichier ?

Tu dois avoir une ligne surlignée en jaune avec l'erreur dans l'éditeur VBE.

Quelle est la ligne ?

Cdlt.

non j'avais essayer de faire la même chose sur un autre fichier avec plus de ligne, je viens de copier-coller les données de mon tableau sur le tien en exécutant le filtre. Pas de message d'erreur, pour l'instant ça mouline!


Cela fonctionne ! Un Grand merci à toi Jean-Eric.

Je serais heureux si en plus tu pouvais m'expliquer ce que tu as fait?

Bonne journée à toi

RE,

Meric d'avoir clos le sujet.

Pour les explications, j'ai commenté la procédure.

Est ce suffisant pour ta compréhension ?

Cdlt.

110xlp-filter-data.xlsm (47.39 Ko)

Coucou Jean-Eric ...

Merci d'avoir pris ... le bus ... en marche ...

Je n'ai même pas eu le temps de me retourner que tout était déjà réglè ... !!!

Bonjour,

Je viens de m'apercevoir que la macro à supprimer des lignes et n'a parfois retenu q'un géopoint par ligne de bus.

J'ai essayer d'ouvrir la macro mais j'avoue que cela dépasse mes compétences.

32sample.xlsx (41.80 Ko)

Bonjour,

Ton fichier comporte 3 colonnes supplémentaires et le nom de la feuille 'Données' un espace en fin de chaîne.

La colonne PointGEO était en colonne 5 et elle en colonne 8 maintenant.

J'ai modifié la procédure en conséquence.

Cdlt.

38sample.xlsm (49.19 Ko)
Option Explicit

Public Sub Filter_Data()
'Déclaration des variables
Dim lo As ListObject, lo2 As ListObject
Dim Dict As Object
Dim rStart As Range, rng As Range
Dim tbl As Variant, v As Variant
Dim i As Long
Dim lr As ListRow
    Application.ScreenUpdating = False
    'Initialisation des variables
    Set lo = Worksheets("Données").ListObjects(1)   'Tableau1 (voir gestionnaire de noms)
    Set lo2 = Worksheets("Résultat").ListObjects(1) 'Tableau2 (voir gestionnaire de noms)
    Set Dict = CreateObject("Scripting.Dictionary")
    'Efface les données du tableau en conservant les formats et les formules
    With lo2
        If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete
        'Cellule pour restitution des données
        Set rStart = .InsertRowRange
    End With
   'Tri par nom_ligne de bus (colonne 2) et PointGEO (colonne 8)
    With lo
        .Sort.SortFields.Add Key:=.ListColumns(2).DataBodyRange, _
                             SortOn:=xlSortOnValues, _
                             Order:=xlAscending, _
                             DataOption:=xlSortNormal
       .Sort.SortFields.Add Key:=.ListColumns(8).DataBodyRange, _
                             SortOn:=xlSortOnValues, _
                             Order:=xlAscending, _
                             DataOption:=xlSortNormal
        .Sort.Apply
        .Sort.SortFields.Clear
    End With
    'Création tableau valeurs uniques nom_ligne
    '(Utilisation d'un dictionnaire)
    tbl = lo.ListColumns(2).DataBodyRange.Value
    For i = LBound(tbl) To UBound(tbl)
        Dict(tbl(i, 1)) = ""
    Next i
    'Filtre pour chaque élément du tableau (nom_ligne)
    For Each v In Dict.Keys
        lo.Range.AutoFilter field:=2, Criteria1:=v
        Set rng = lo.AutoFilter.Range
        '1ère. ligne visible de la plage filtrée (hors en-tête de colonne))
        Set lr = lo.ListRows(rng.Offset(1).SpecialCells(xlCellTypeVisible).Row - 1)
        lr.Range.Copy
        rStart.PasteSpecial xlPasteValues
        Application.CutCopyMode = False
        Set rStart = lo2.HeaderRowRange.Cells(1).Offset(lo2.ListRows.Count + 1)
        'Dernière ligne visible de la plage filtrée
        Set lr = lo.ListRows(rng.SpecialCells(xlCellTypeLastCell).Row - 1)
        lr.Range.Copy
        rStart.PasteSpecial xlPasteValues
        Application.CutCopyMode = False
        'Cellule pour prochaine copie
        Set rStart = lo2.HeaderRowRange.Cells(1).Offset(lo2.ListRows.Count + 1)
    Next v
    'On affiche toutes les données
    lo.Range.AutoFilter field:=2
    'RAZ variables
    Set lr = Nothing
    Set rStart = Nothing: Set rng = Nothing
    Set lo2 = Nothing: Set lo = Nothing
    Set Dict = Nothing
End Sub

Merci pour la mise à jour de la macro

Rechercher des sujets similaires à "filtrage valeur min max criteres"