Rechercher une valeur supérieur dans une plage de données

Bonjour,

Je suis complètement novice en Excel/VBA.

Je viens de me créer un ficher Excel ou dedans j'ai pu calculer une visserie idéale pour un appareil. Sauf que maintenant je dois mettre mes résultats en corrélations avec la visserie disponible dans ma boite. (données sur le même Excel)

Mon problème intervient surtout sur les longueur de vis. Je voudrais donc savoir, comment, en partant de ma longueur idéale, réussir à aller lire un tableau et sélectionner la longueur approchante supérieur dans la colonne correspondant à mon diamètre de vis.

Je suis preneur de toutes idées !

Merci d'avance pour votre aide :)

Bonjour,

As-tu un fichier à partager , question pratique.

15boms-b.xlsx (224.24 Ko)

Par exemple dans l'ongle 01-Engine, j'ai calculé une longueur ideale de vis M20, soit 98. Et je voudrais allez lire mon tableau dans HSV DATA pour trouver la longueur supérieur disponible pour une vis H M20.

Bonjour,

Tu cherches à avoir la longueur ou sa référence dans le tableau ?

Je m'y connais pas beaucoup en formules donc je vais pas dire de bêtises mais sachant qu'il y a 2 tableaux H screw, c'est compliqué de faire la recherche dans les 2 , si tel est ton but.

Et comme parfois il n'y a pas de résultat à donner, ça facilite pas les choses

J'ai quelque chose qui fonctionne à peu près mais c'est pas encore optimal.

Et autant pour moi, il faut inscrire les 2 données(réf et longueur) j'avais mal vu

Bonjour !

Non non tu peux chercher seulement dans un seul des deux tableaux, le deuxième c'est pour une matière différente :)

Et oui j'aimerai retourner la longueur et la ref si possible mais ca serait dans le meilleur des cas ahah :)

Bonjour,

Voici ce que j'ai pu faire.

La recherche est faite dans le tableau hscrew acier.

Si la valeur que tu as calculée est dispo dans le tableau, il prend celle la, sinon la valeur au dessus et indique la référence correspondante. Si ta référence indique 0, c'est que la longueur proposée n'est pas dispo dans la tableau à ce diamètre la.

Faudrait donc dans l'idéal qu'il cherche la prochaine longueur qui est disponible mais suis pas assez doué pour cela il semblerait

12boms-b2.xlsx (226.52 Ko)

Salut GomJu,
Salut Thrrybo,

solution VBA mais qui te demanderait un peu de travail car je n'ai fait les adaptations que pour la feuille '01 Engine-Engine support'
Pour les besoins de la cause, j'ai renommé tes tableaux en 'HSV Data' en ajoutant "/A" pour Acier et "/I" pour Inox et, évidemment, reporté ces modif' dans '01 Engine-Engine support'.
J'ai également scindé le tableau "Welded H nut" (je crois) qui cumulait Acier et Inox.

Bref, j'ai mis le bouzin dans ta belle organisation ! Mais... ça fonctionne ! Bonne nouvelle !

Après test du fichier joint, si accord, je peux m'occuper (via macro, hein, pas fou, moi !) de modifier dans tes feuilles-plan ces intitulés de visserie si tu peux me dire qui utilise Acier ou Inox.

Comme il n'y a pas de recalcul de formule, la macro démarre en ouvrant une feuille-plan.
Rappel : seule la feuille-plan '01 Engine-Engine support' voudra bien te donner des résultats !

With Sheets(iIdx)
    Set rCel = .Cells.Find(what:="Visserie idéale", lookat:=xlWhole, LookIn:=xlValues)
    If Not rCel Is Nothing Then
        For x = rCel.Row + 1 To Range(fctCol(rCel.Column) & Rows.Count).End(xlUp).Row
            .Cells(x, rCel.Column).Offset(0, 3) = "No Ref"
            .Cells(x, rCel.Column).Offset(0, 4) = ""
            Set rHSV_T = sWk.Cells.Find(what:=.Cells(x, rCel.Column - 1), lookat:=xlWhole, LookIn:=xlValues)
            If Not rHSV_T Is Nothing Then
                sData = .Cells(x, rCel.Column)
                If InStr(.Cells(x, rCel.Column), "x") > 0 Then sData = Split(.Cells(x, rCel.Column), "x")(0)
                Set rHSV_M = sWk.Range(fctCol(rHSV_T.Column) & rHSV_T.Row + 1).Resize(1, sWk.Range(fctCol(rHSV_T.Column) & rHSV_T.Row + 1).End(xlToRight).Column).Find _
                    (what:=sData, lookat:=xlWhole, LookIn:=xlValues)
                If Not rHSV_M Is Nothing Then
                    If InStr(.Cells(x, rCel.Column - 1), "H screw") = 0 Then
                        Set rHSV_C = sWk.Columns(rHSV_T.Column).Find(what:="Code", lookat:=xlWhole, LookIn:=xlValues)
                        If Not rHSV_C Is Nothing Then _
                            iOK = 1: _
                            .Cells(x, rCel.Column).Offset(0, 3) = sWk.Cells(rHSV_C.Row, rHSV_M.Column)
                    Else
                        For y = rHSV_T.Row + 2 To sWk.Range(fctCol(rHSV_T.Column) & Rows.Count).End(xlUp).Row
                            If CInt(sWk.Cells(y, rHSV_T.Column)) >= CInt(.Cells(x, rCel.Column + 1)) And sWk.Cells(y, rHSV_M.Column) <> "" Then _
                                iOK = 1: _
                                .Cells(x, rCel.Column).Offset(0, 3) = sWk.Cells(y, rHSV_M.Column): _
                                .Cells(x, rCel.Column).Offset(0, 4) = sWk.Cells(y, rHSV_T.Column): _
                                Exit For
                        Next
                    End If
               End If
            End If
            .Cells(x, rCel.Column).Offset(0, 3).Font.Color = IIf(iOK = 0, RGB(255, 0, 0), RGB(0, 0, 0))
            .Cells(x, rCel.Column).Offset(0, 3).Font.Bold = IIf(iOK = 0, True, False)
            iOK = 0
        Next
    End If
End With
9gomju.xlsm (248.74 Ko)

A+

Bonjour curulis !

Quel travail ! La communauté excel est incroyable je m'attendais pas à ca sincerement Donc merci beaucoup !

Je vais essayer de partir de ce que vous avez pu me fournir pour mener à bien mon fichier.

Le problème que j'ai est souvent que lorsque l'on fait les recherches pour remonter le code d'une vis, bah on vient séléctionner la case supérieur par rapport à la longueur souhaité. Sauf que souvent cette case est vide car on a pas de code pour certaines longueur de vis. Je pensais faire une boucle pour venir incrementer de 1 ma valeur de recherche à chaques fois que la formule me retourne 0 afin d'avoir quoi qu'il arrive un code à retourner et stopper cette boucle dès que je trouve un code. Et ensuite je viendrais faire une simple comparaison pour par exemple si la longueur retourné est supérieur de 10mm bah je met un message "A vérifier" par exemple.

Je vais essayer de passer ma soirée dessus mais en tout cas merci beaucoup pour votre aide c'est vraiment trop gentils ! Surtout que c'est pas evident quand on a jamais fais de VBA :)

Rechercher des sujets similaires à "rechercher valeur superieur plage donnees"