Trouver première valeur supérieure à

Bonjour,

J'essaye depuis ce matin de chercher le moyen de trouver dans un Range la première valeur supérieure à ma Valeur cherchée.

Pouvez-vous m'aider, car je ne trouve pas l'erreur dans mon code.

Voici le bout de code que j'ai écrit:

 Dim e As Integer
'Dim plage_heure_fin As Range
Dim Valeur As Double, AdresseTrouvee As String

NewFeuil.Cells(1, 1).Value = Maximum_echelle
NewFeuil.Cells(1, 1).Select
Selection.NumberFormat = "General"
Selection.NumberFormat = ";;;" 'pour rendre invisble la valeur dans la cellule

For e = 6 To NombreLigne Step 6

    'Set plage_heure_fin = NewFeuil.Range("B" & e & ":" & "H" & e)

    NewFeuil.Range("B" & e & ":" & "H" & e).Select
    Selection.NumberFormat = "General"

    Valeur = Application.Match(NewFeuil.Cells(1, 1).Value, NewFeuil.Range("B" & e & ":" & "H" & e), -1) 'j'avais mis plage_heure_fin à la place NewFeuil.Range("B" & e & ":" & "H" & e) au début

    If Valeur < NewFeuil.Cells(1, 1).Value Then
        GoTo 1
    Else
        Rows(e).Select
        'plage_heure_fin.Rows(e).Select

        Range("B" & e & ":" & "H" & e).Select
        Selection.NumberFormat = "h:mm;@"
        Exit For
    End If
1:
    Range("B" & e & ":" & "H" & e).Select
    Selection.NumberFormat = "h:mm;@"
Next e 

Merci,

Cordialement U_goffu

Bonjour,

Désolé mais aucune envie de lire un code non inclus entre Sub et End Sub (on ne sait pas s'il est complet), mal indenté et bourré de Select...

Pour rechercher une valeur dans une plage, il suffit de parcourir la plage au moyen d'une boucle : si la valeur remplit la condition on la note (variable)... si première veut dire la première trouvée, ça s'arrête là, si ça veut dire la plus proche, on poursuit et pour chaque valeur remplissant la condition, si elle la remplit mieux, elle se substitue à la précédente...

Cordialement.

Re,

Alors oui désolé, (je ne suis pas vraiment un pro de VBA et excel) puis je n'ai pas pensé à vous dire que j'ai mis seulement le bout de code qui me dérange.

Il s'agit de la première valeur trouvée supérieure à.

Je suis d'accord tout ceci est un peu brouillon néanmoins, peux tu m'explique dans ce cas là ce qui ne fonctionne pas?

Car :

Je fais une boucle

Dim e as Integer
Dim NombreLigne as Integer
For e = 6 To NombreLigne Step 6
....
Next e

Je définis ma plage de recherche

Dim plage_heure_fin as Range
Set plage_heure_fin = NewFeuil.Range("B" & e & ":" & "H" & e)

Je définis mon résultat souhaité

Dim Valeur as Double
Valeur = Application.Match(NewFeuil.Cells(1, 1).Value, NewFeuil.Range("B" & e & ":" & "H" & e), -1)

Bonjour,

comme j'ai un peu de mal a comprendre votre code (incomplet) je vous fournie une code de recherche de valeur :

dim plage as range
dim r as range
plage = range(.....) ' votre plage dans la quelles s'effectue la recherche 
for each r in plage
  if r.value > votreValeur then 
     'faire ce que vous avez à faire avec cette cellule 'r' 
end if
next r
 

Bonjour,

Pourquoi un pas de 6 ? (mais cela n'intervient pas dans le problème je suis d'accord.

De même pour NewFeuil : variable dont on n'a pas vu de déclaration...

Ceci étant tu utilises Match, soit une fonction de feuille de calcul (contrairement à la plupart son utilisation en VBA est souvent pertinente, VBA n'ayant pas de fonction équivalente...) mais tu l'utilises avec un argument impliquant que les valeurs soient classées en ordre décroissant... Peut-être y a-t-il un problème à cet égard ?

Bonjour,

Désolé pour le temps d'attente. Merci pour vos réponses et votre aide. J'ai utilisé ce que "minase" m'a envoyé et j'ai utilisé un Match comme MFerrand me l'a conseillé et j'ai réussi à obtenir ce que je souhaité.

Maintenant, pour répondre à MFerrand, j'utilise un pas de 6 car j'ai un tableau dans lequel se trouve des Heures de fin toutes les 6 lignes.

Merci pour votre aide, la prochaine fois que je poseterai quelque chose, je tâcherai d'être plus clair et de mettre l'intégralité de mon code, etc...

Rechercher des sujets similaires à "trouver premiere valeur superieure"