Lister les 15 plus petites valeurs

[Résolu]
Signaler
Messages postés
10
Date d'inscription
lundi 2 juillet 2012
Statut
Membre
Dernière intervention
16 juillet 2012
-
Messages postés
10
Date d'inscription
lundi 2 juillet 2012
Statut
Membre
Dernière intervention
16 juillet 2012
-
bonjour,
Je souhaite réaliser un code qui permet de lister dans une listebox les 15 plus petites valeurs qui sont rangées dans les colonnes N , S, X, AC, AH et AM

Il s'agit d'un nombre de jour qu'une opération soit finit. Dans une ligne il peut contenir 6 opérations

J'aimerai quil recherche dans tous le classeur, les valeurs les plus petites par exemple :

ligne5 : opération 3 5jours
Ligne 85 : opération 1 6jours
Ligne5 : opération2 8jours



Voici mon code :
Private Sub ok_Click()

Worksheets(3).Activate
Dim myrange As Range
Dim startX As Variant

' recherche la valeur la plus petite
With Worksheets("preventive")
Set myrange = Union(.Columns("N:N"), .Columns("S:S"), .Columns("X:X"), .Columns("AC:AC"), .Columns("AH:AH"), .Columns("AM:AM"))
startX = Application.WorksheetFunction.Min(myrange)
End With

' localise la valeur la plus petite et renvoie un message
For Each cell In myrange.Cells
If cell.Value = startX Then
MsgBox "La plus petite valeur est " & startX & " ligne n°" & cell.Row & " et colonne n°" & cell.Column
Exit For
End If
Next

Me.ListBox1.Clear
Me.ListBox1.AddItem
Me.ListBox1.List(0, 0) = Worksheets(3).Cells(cell.Row, 2).Value 'Famille
Me.ListBox1.List(0, 1) = Worksheets(3).Cells(cell.Row, 8).Value ' matériels
Me.ListBox1.List(0, 2) = Worksheets(3).Cells(cell.Row, cell.Column - 4).Value
Me.ListBox1.List(0, 3) = Worksheets(3).Cells(cell.Row, cell.Column - 3).Value
Me.ListBox1.List(0, 4) = Worksheets(3).Cells(cell.Row, cell.Column - 1).Value
Me.ListBox1.List(0, 5) = startX ' jour le plus faible

Worksheets(1).Activate


End Sub



Ce code me renvoie uniquement la première valeur, comment faire pour quil me renvoie les 15 suivantes?




merci de votre aide

7 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Je ne sais (et ne veux pas le savoir) où tu veux aller avec cela, mais regarde ce que ferait ceci :
  Dim plage As Range, ou As Range,toto as variant
  toto = UsedRange
  
  Set plage = Union(Columns("N"), Columns("S"),Columns("X"),Columns("AC"),Columns("AH"),Columns("AM"))
  MsgBox plage.Address
  For i = 1 To 15
    mini = WorksheetFunction.Min(plage)
       Set ou = plage.Find(mini, LookIn:=xlValues)
     MsgBox mini & " trouvé en " & ou.Address
     ou.Value = ""
  Next
  UsedRange = toto


Et fais gaffe : si tu n'as pas au moins 15 valeurs ==>> erreur (forcément)
Autre chose : si tu as plusieurs fois le même mini "restant" ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

pour commencer tu n'est pas dans le bon thème ! Pour le VBA il existe un thème dédié :

Accueil > Forum > Visual Basic 6 > Langages dérivés > VBA

La méthode à utiliser est conditionnée par ce que tu veux faire du résultat !

Donc que veux-tu faire de c' est 15 valeurs ?

A+
Messages postés
10
Date d'inscription
lundi 2 juillet 2012
Statut
Membre
Dernière intervention
16 juillet 2012

Ha pardon, je n'ai pas fait attention

Je voudrais les afficher dans une listebox
Avec mon code, je n'ai pu qu'afficher qu'une valeur
Messages postés
30
Date d'inscription
mercredi 23 mai 2012
Statut
Membre
Dernière intervention
13 août 2012

Tu recommences l'opération 15 fois ,en écrasant la plus petite valeur par une valeur trés grande
Mon code est FAUX c'est juste l'idée qui compte


For val=1 To 15
' recherche la valeur la plus petite 
With Worksheets("preventive") 
Set myrange = Union(.Columns("N:N"), .Columns("S:S"), .Columns("X:X"), .Columns("AC:AC"), .Columns("AH:AH"), .Columns("AM:AM")) 
startX = Application.WorksheetFunction.Min(myrange) 
End With 

' localise la valeur la plus petite et renvoie un message 
For Each cell In myrange.Cells 
If cell.Value = startX Then 
MsgBox "La" & val & "plus petite valeur est " & startX & " ligne n°" & cell.Row & " et colonne n°" & cell.Column 
cell.Value =999
Exit For 
End If 
Next 

Next val



Bonne journée
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
J'ai des difficultés à "décrypter" la question, entre :
Je souhaite réaliser un code qui permet de lister dans une listebox les 15 plus petites valeurs qui sont rangées dans les colonnes N , S, X, AC, AH et AM

puis
J'aimerai quil recherche dans tous le classeur, les valeurs les plus petites

puis l'"exemple" donné.

Je suis certain de ce qu'il doit y avoir un moyen d'exprimer le besoin de manière simple et précise. J'attends donc ...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
10
Date d'inscription
lundi 2 juillet 2012
Statut
Membre
Dernière intervention
16 juillet 2012

Il y a plusieurs outils, qui sont listées dans chaque ligne.

IL peut avoir plusieurs opérations dans un outil qui sont écrites dans les colonnes N, S, X , AC, AH, AM)

Je voudrais que le code cherche la plus petite valeur dans ces colonnes puis répertorie les données dans une listebox.
par exemple :

Ligne 5 opération 3 2jours
Ligne57 opération 1 3jours
Ligne 5 opération 2 5 jours
etc

Le code que j'ai crée donne uniquement la valeur la plus petite et met les données dans une listebox mais elle ne donne pas les 14 suivantes
Messages postés
10
Date d'inscription
lundi 2 juillet 2012
Statut
Membre
Dernière intervention
16 juillet 2012

merci!