Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

classer les valeurs

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 !

analyseaux

XLDnaute Occasionnel
bonjour

Dans le cadre de mes activités je voudrais classer mes mesures. Ci joint fichier en esperant avoir été explicite par des exemples. Des formules avec si (conditionnelle) ont été realisées mais je compte surtout sur les membres de ce forum oh combien précieux pour optimiser au mieux mes formules merci d'avance.
 

Pièces jointes

Re : classer les valeurs

Bonjour,

Une piste en utilisant une fonction personnalisée.
Je me suis basé sur votre exemple. Si le nombre de classes est différent, adaptez l'Enum Sens dans le code.
Copiez le code suivant dans un module standard.

Code:
'### A adapter selon les dimensions de la plage ###
Private Enum Sens
  Vertical = 41     'concaténation nb de lignes + 1 colonne = 41
  Horizontal = 14   'concaténation nb de colonnes + 1 ligne = 14
  BigDimension = 4  'la plus grande dimension ligne ou colonne
End Enum
'##################################################
'/// Si, par exemple, vous voulez travailler sur une plage d'1 sur 8
'/// Private Enum Sens
'///  Vertical = 81
'///  Horizontal = 18
'///  BigDimension = 8
'/// End Enum

Function Classe(Plage As Range) As Long
Dim var
Dim Direction
Dim x&
Dim y&
Dim i&
Dim j&
Dim tempo&
Dim bool
var = Plage
If Not IsArray(var) Then Exit Function
Direction = CLng(UBound(var, 1) & UBound(var, 2))
If Direction = Sens.Horizontal Then
  x& = 1
  y& = Sens.BigDimension
ElseIf Direction = Sens.Vertical Then
  x& = Sens.BigDimension
  y& = 1
Else
  Classe = Error
  Exit Function
End If
For i& = x& To 1 Step -1
  For j& = y& To 1 Step -1
  tempo& = var(i&, j&)
    If Not bool Then tempo& = tempo& - 1
    If tempo& > 0 Then
      If Direction = Sens.Horizontal Then
        Classe = j&
      ElseIf Direction = Sens.Vertical Then
        Classe = i&
      End If
      Exit Function
    ElseIf tempo& = 0 Then
      bool = True
    End If
  Next j&
Next i&
End Function


Supposons les données de vos classes en A2 : D2
Tapez en E2 la formule =classe(A2 : D2)

Cordialement.

PMO
Patrick Morange
 
Re : classer les valeurs

bonjour

C'est fabuleux je m'y attendais pas
Il faut savoir que tout au plus il n'y a que 12 mesures en totalisant les 3 classes

est il possible d'ajouter 3 conditions
1 quand c1+c2+c3+c4 au total il y a plus ou egal à 10 mesures le code que tu m'avais proposé est tjs valable sauf lorsqu'il y a moins de 10 mesures dans ce cas la classe est definie par une seule mesure la plus defavorable on ne retranche pas de mesure et lorsqu'il y a moins de six mesures la classe n'est pas definie et doit egale à 0.
MERCI
 
Re : classer les valeurs

Bonjour,


Je n'ai pas compris. Vous est-il possible de mettre un exemple exhaustif en pièce jointe (source + ce que vous voulez obtenir) ?

Cordialement.

PMO
Patrick Morange
 
Re : classer les valeurs

Bonjour,

Essayez avec cette nouvelle version (fonction Classe2)

Code:
'### A adapter selon les dimensions de la plage ###
Private Enum Sens
  Vertical = 41     'concaténation nb de lignes + 1 colonne = 41
  Horizontal = 14   'concaténation nb de colonnes + 1 ligne = 14
  BigDimension = 4  'la plus grande dimension ligne ou colonne
End Enum
'##################################################
'/// Si, par exemple, vous voulez travailler sur une plage d'1 sur 8
'/// Private Enum Sens
'///  Vertical = 81
'///  Horizontal = 18
'///  BigDimension = 8
'/// End Enum

Function Classe2(Plage As Range) As Long
Dim var
Dim Direction
Dim x&
Dim y&
Dim i&
Dim j&
Dim tempo&
Dim bool
Dim Total&
var = Plage
If Not IsArray(var) Then Exit Function
Direction = CLng(UBound(var, 1) & UBound(var, 2))
If Direction = Sens.Horizontal Then
  x& = 1
  y& = Sens.BigDimension
ElseIf Direction = Sens.Vertical Then
  x& = Sens.BigDimension
  y& = 1
Else
  Classe2 = Error
  Exit Function
End If
For i& = 1 To x&
  For j& = i To y&
    Total& = Total& + var(i&, j&)
  Next j&
Next i&
If Total& >= 10 Then
  For i& = x& To 1 Step -1
    For j& = y& To 1 Step -1
    tempo& = var(i&, j&)
      If Not bool Then tempo& = tempo& - 1
      If tempo& > 0 Then
        If Direction = Sens.Horizontal Then
          Classe2 = j&
        ElseIf Direction = Sens.Vertical Then
          Classe2 = i&
        End If
        Exit Function
      ElseIf tempo& = 0 Then
        bool = True
      End If
    Next j&
  Next i&
ElseIf Total& >= 6 Then
  For i& = x& To 1 Step -1
    For j& = y& To 1 Step -1
      If var(i&, j&) > 0 Then
        If Direction = Sens.Horizontal Then
          Classe2 = j&
        ElseIf Direction = Sens.Vertical Then
          Classe2 = i&
        End If
        Exit Function
      End If
    Next j&
  Next i&
ElseIf Total& < 6 Then
  Classe2 = 0
End If
End Function

Cordialement.

PMO
Patrick Morange
 
- 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

A
Réponses
11
Affichages
2 K
A
N
Réponses
7
Affichages
1 K
N
M
Réponses
2
Affichages
953
marcenana
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…