Valeur minimum d'une chaine de nombres [Résolu]

Messages postés
91
Date d'inscription
vendredi 15 janvier 2010
Dernière intervention
19 octobre 2012
- 16 févr. 2010 à 21:43 - Dernière réponse :
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 17 févr. 2010 à 14:37
J'ai une chaine de caractères composée de strings numériques séparés par un point-virgule. Comment afficher la valeur minimum de cette chaîne ?

voici la chaine en question:
sur la première ligne de A1 à J1:
[vide][vide][3][4][vide][vide][10][2][7][vide]

voici la chaîne de caractères: liste="3;4;10;2;7"

Celle-ci est obtenue par:

Sub mini()
liste = ""
Set f = ActiveSheet
 For m = 1 To 10
    If f.Cells(1, m) <> "" Then
              liste = liste & f.Cells(1, m) & ";"
    End If
 Next m
end sub


Merci pour votre aide
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 16 févr. 2010 à 21:51
3
Merci
Bon...
La fonction split (à lire dans ton aide en ligne) te permetr de transformetr cette chaîne en Array.
Tu as donc obtenu la chaine liste="3;4;10;2;7" ?
donc :
1) pour reprendre ton exemple, qui ne contient que des entiers :
Dim min As Long, liste As String, toto
  liste = "3;4;10;2;7"
  toto = Split(liste, ";")
  min = Val(toto(0))
  For i = 1 To UBound(toto)
    If Val(toto(i)) < min Then min = Val(toto(i))
  Next
  MsgBox min

2) mais si tu risques également d'avoir des nombres décimaux, tu ferais mieux de :

 Dim min As Single, liste As String, toto
  liste = "3,4;4;10;2,1;7"
  toto = Split(liste, ";")
  min = CSng(toto(0))
  For i = 1 To UBound(toto)
    If CSng(toto(i)) < min Then min = CSng(toto(i))
  Next
  MsgBox min


Tu vois ? ==>> Rien de différent entre ce code et le code donné dans ton autre discussion ! Utilisation d'un tableau dynamique dans tous les cas de figure. Seules la/les dimensions du tableau change(nt). Tout le reste est identique

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
91
Date d'inscription
vendredi 15 janvier 2010
Dernière intervention
19 octobre 2012
- 16 févr. 2010 à 22:04
0
Merci
Merci beaucoup, pour cette réponse rapide et pour les précisions !

bonne soirée
Commenter la réponse de titeuf136
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 16 févr. 2010 à 23:32
0
Merci
Je t'ai toutefois répondu sur la base de ton travail (donc une fois générée ta chaine Liste.)
Mais je n'aurais jamais fait ce travail là (passer par un tremplin). J'aurais écrit directement ceci, dans un tel cas :
 Dim min As Single, R As Range
  For i = 1 To 10
    If Cells(1, i) <> "" Then
      If R Is Nothing Then Set R Cells(1, i) Else Set R Union(R, Cells(1, i))
    End If
  Next
  min = WorksheetFunction.min(R)
  Set R = Nothing
  MsgBox min


J'aurais en fait été plus loin en affinement (vérification de la validité des valeurs avant de les mettre dans R). Mais entre ce que je te dis là et ce que je t'ai dit ailleurs, tu devrais être capable de le faire seul, ce dernier pas .
Profite pour analyser ce petit bout de code et pour ouvrir ton aide en ligne sur le mot Union.
Tu vas en apprendre, des choses ...
Bonne nuity.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
91
Date d'inscription
vendredi 15 janvier 2010
Dernière intervention
19 octobre 2012
- 17 févr. 2010 à 10:51
0
Merci
en fait je souhaite calculer la valeur minimum et la valeur maximale de plusieur lignes.

Comment gérer le cas où l'une des lignes est vides

voici le code tel que je l'emploi (il fonctionne):

Sub min_max()
 Dim mini1 As Single, maxi1 As Single, R As Range
   For j = 60 To 66
   Set R = Nothing
   For i = 3 To 93
    If Cells(j, i) <> "" Then
      If R Is Nothing Then Set R Cells(j, i) Else Set R Union(R, Cells(j, i))
      mini1 = WorksheetFunction.min(R)
      maxi1 = WorksheetFunction.Max(R)
      End If
  Next
mini2 = mini1
maxi2 = maxi1
  Cells(j + 13, 7) = mini2
  Cells(j + 13, 9) = maxi2
Next j
End Sub


comment l'optimiser pour ne pas que le code ai besoin de calculer le min et la max à chaque itterration. Si j'effectue ce calcul après construction complète de "R", il se trouve que si "R" est "vide" le code ne fonctionne plus. comment comment conditionner le calcul de min et de max en fonction de R (si R est vide) ?

Merci
Commenter la réponse de titeuf136
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 17 févr. 2010 à 11:08
0
Merci
1) Si R est vide, c'est que toutes ses cellules le sont (et de quel min parlerait-on alors, hein ?)
2) si j'ai bien compris, tu cherches la valeur minimum apparaissant dans une plage de cellules composée de plusieurs lignes et de plusieurs colonnes, c'est çà ?)

Si oui, il te suffit (toujours la même méthode ! ...) de :
Dim min As Single, R As Range, monrange As Range, c As Range
  Set monrange = Range("A1:C10")
  For Each c In monrange.Cells
    If c.Value <> "" Then
      If R Is Nothing Then Set R c Else Set R Union(R, c)
    End If
  Next
  min = WorksheetFunction.min(R)
  Set R Nothing: Set monrange Nothing: Set c = Nothing
  MsgBox min


Si, maintenant, tu cherches le minimum sur chaque ligne (donc plusieurs minimums) c'est différent, mais tu en as déjà le code, non (à adapter si peu !)?
Je souhaites VRAIMENT que tu commences à t'y mettre un peu mieux (commencer à analyser, à comprendre, de sorte à devenir capable de créer et cesser d'être ainsi dépendant à chaque détail à modifier. Tu en as réellement besoin, crois-moi )
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
91
Date d'inscription
vendredi 15 janvier 2010
Dernière intervention
19 octobre 2012
- 17 févr. 2010 à 13:21
0
Merci
En effet je cherche le minimum sur chaque ligne, pour y parvenir, j'ai déjà adpatéle code. Et il fonctionne. C'est à dire que j'arrive à afficher le minimum de chaque ligne dans des cellules différentes.

Le code en question (qui fonctionne)est celui que j'ai inséré dans le message précédent.

Ma question était y a-t-il un moyen d'éviter le calcul de min et de max à chaque itération de "i".

Je précise que dans le cas où je place le calcul du min et du max après les itération de i, si la ligne est vide, le code ne fonctionne pas.

Voilà, toujours est-il que si je pose cette question sur le forum, c'est que j'ai cherché, mais que je n'est pas trouvé de réponse adéquate.
Commenter la réponse de titeuf136
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 17 févr. 2010 à 14:37
0
Merci
Je crois vraiment, ami, que tu devtrais immédiatementg :
14) cesser de fonctionner en copier/coller
2) commencer à faire travailler tes propres méninges ...
Voilà à quoi tu serais parvenu en faisant ce petit effort :

Dim min As Single, R As Range, monrange As Range, c As Range, ligne As Range
  Set monrange = Range("A1:C10")
  For Each ligne In monrange.Rows
      Set R = Nothing
      For Each c In ligne.Cells
        If c.Value <> "" Then
          If R Is Nothing Then Set R c Else Set R Union(R, c)
        End If
    Next
   If Not R Is Nothing Then
     MsgBox "minimum en ligne " & ligne.Row & " ==>> " & WorksheetFunction.min(R)
   Else
     MsgBox "bernique (que dalle)  en ligne : " & ligne.Row
   End If
  Next
  Set R Nothing: Set monrange Nothing: Set c = Nothing


Le développement n'est pas de la copie. C'est aussi et surtout : - de la compréhension - une communion - de la stratégie. Ces 3 qualités sont à mettre en oeuvre ou l'on abandonne.
Moi, je t'abandonne maintenant là


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.