Isolement valeurs min/max sous conditions

Bonjour,

Je cherche à isoler les valeurs min/max d'un tableau en fonction d'un paramètre : soit l'altitude z.

Ci-joint mon problème à petite échelle : j'ai des milliers de lignes à traiter et je cherche donc à automatiser le traitement des données.

Merci pour votre retour/aide.

Br0wser

13z-fx-fy.xlsx (8.94 Ko)

Hello,

Cela passera par une combinaison min et max avec la formule rechercheV.

Bonne journée.

11z-fx-fy.xlsx (9.49 Ko)

Bonjour Br0wser et

Salut lauange,

Un Tableau Croisé Dynamique, peut-être ?

11tcd-br0wser.xlsx (14.86 Ko)

et c'est même mieux.

Merci pour votre réponse !

  • via rechercheV : pas les bon résultats
  • TCD : cela semble parfait merci !

Si il y une autre manière sans passer via le TCD je prends =D

peut-être index equiv ? sans conviction

merci !

Re-bonjour,

peut-être index equiv ? sans conviction

Peut-être bien avec des formules matricielles ... mais sur plusieurs milliers de lignes, ça risque de commencer à "ramer" !

Ça supposerait aussi que tu aies -au préalable- la liste des "Z" dans la colonne F de ton tableau récapitulatif (où il manque déjà le 15 !?)

Par macro, c'est faisable aussi ... mais il faudra que tu te retrousses les manches pour comprendre (et être capable, par la suite, d'adapter, si ta situation change)

En fait, il existe la fonction min.si.ens et max.si.ens. Je pense que ton problème est solutionné.

5z-fx-fy.xlsx (9.48 Ko)

Voici un tableau qui devrait régler

10z-fx-fy.xlsm (158.11 Ko)

votre problème

Toukoul

Merci pour votre aide

Cela répond t il entièrement à votre problème ?

En fait, il existe la fonction min.si.ens et max.si.ens

Le profil de Br0wser renseigne Excel 2007 ... mais peut-être n'a-t-il pas mis à jour ?

Bonjour le fil, bonjour le forum,

Deux macro full Comment testées sur 29863 lignes. La première est paradoxalement plus rapide :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim VMin As Integer 'déclare la variable VMin (Valeur Minumale)
Dim VMax As Integer 'déclare la variable VMax (Valeur maximale)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = Worksheets("Feuil1") 'définit l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 (Z)
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
O.Range("F3").Resize(D.Count, 1).Value = Application.Transpose(D.Keys) 'renvoie cette liste transposée dans F3 redimensionnée
For K = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
    COL = 5 'initialise la variable COL
    For J = 2 To 3 'boucle 2 sur les colonne 2 à 3 (FX et FY)
        VMin = 10000 'initialise la valeur minimale VMin
        VMax = 0 'initialise la valeur maximale VMax
        COL = COL + 2 'redéfinit la colonne COL
        For I = 2 To UBound(TV) 'boucle 3 : sur toutes les ligne I du tableau des valeur TV
            If TV(I, 1) = TMP(K) Then 'condition "si la donnée en colonne 1 de TV (Z) est égale à l'élément K de TMP
                'si la donnée colonne J de la boucle est inférieure à VMin, VMin devient cette donnée
                If TV(I, J) < VMin Then VMin = TV(I, J)
                'si la donnée colonne J de la boucle est supérieure à VMax, VMax devient cette donnée
                If TV(I, J) > VMax Then VMax = TV(I, J)
            End If 'fin de la condition
        Next I 'prochaine ligne de la boucle 3
        O.Cells(K + 3, COL).Value = VMin 'renvoie dans la cellule ligne K+3, colonne COL la valeur minimale VMin
        O.Cells(K + 3, COL + 1).Value = VMax 'renvoie dans la cellule ligne K+3, colonne COL+1 la valeur maximale VMax
    Next J 'prochaine colonne de la boucle 2
Next K 'prochaine élément de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
Sub Macro2()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PL As Range 'déclare la variable PL (PLage)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim VMin As Integer 'déclare la variable VMin (Valeur Minumale)
Dim VMax As Integer 'déclare la variable VMax (Valeur maximale)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = Worksheets("Feuil1") 'définit l'onglet O
Set PL = O.Range("A1").CurrentRegion 'définit la plage PL
TV = PL 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 (Z)
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
O.Range("F3").Resize(D.Count, 1).Value = Application.Transpose(D.Keys) 'renvoie cette liste transposée dans F3 redimensionnée
For K = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments du tableau temporaire TMP
    PL.AutoFilter 'annule le filtre automatique de la plage PL
    PL.AutoFilter Field:=1, Criteria1:=TMP(K) 'filtre la plage PL sur la colonne 1 avec TMP(K) comme critères
    O.Cells(K + 3, 7).Value = Application.WorksheetFunction.Min(O.Columns(2).SpecialCells(xlCellTypeVisible)) 'renvoie le minimum FX
    O.Cells(K + 3, 8).Value = Application.WorksheetFunction.Max(O.Columns(2).SpecialCells(xlCellTypeVisible)) 'renvoie le maximum FX
    O.Cells(K + 3, 9).Value = Application.WorksheetFunction.Min(O.Columns(3).SpecialCells(xlCellTypeVisible)) 'renvoie le minimum FY
    O.Cells(K + 3, 10).Value = Application.WorksheetFunction.Max(O.Columns(3).SpecialCells(xlCellTypeVisible)) 'renvoie le maximum FY
Next K 'prochain élément de la boucle
PL.AutoFilter 'annule le filtre automqtique
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
Rechercher des sujets similaires à "isolement valeurs min max conditions"