Rechercher valeur proche et afficher nom lign & col correspondan

Fermé
Badabimboum Messages postés 1 Date d'inscription vendredi 19 octobre 2012 Statut Membre Dernière intervention 19 octobre 2012 - 19 oct. 2012 à 21:46
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 20 oct. 2012 à 06:32
Bonjour à tous,

Voici mon problème expliqué par un exemple :

J'ai un tableau Excel

D E F
A 1 2 3
B 4 5 6
C 7 8 9

Je voudrais que Excel me recherche dans ce tableau l'entier supérieur le plus proche d'une valeur calculée (exemple 5,8) et qu'il m'affiche le nom de la ligne correspondante (cad B) et la colonne correspondante (cad F).

Quel est la formule magique selon vous ?

Merci pour votre aide.

2 réponses

mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
19 oct. 2012 à 22:12
bonsoir,

Je peux peut-être t'aider sur un point.

La fonction: plafond(valeur calculée,précision) te donnera le nombre le plus proche figurant dans ton tableau.
dans ton exemple: nombreAchercher=plafond(nombreAarrondir;1)

Maintenant, il reste à trouver la formule qui te permet de trouver un nombre égal à celui qu'a renvoyé la fonction.



0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
Modifié par eriiic le 20/10/2012 à 06:33
Bonjour,

Proposition de fonction personnalisée en vba à mettre dans un module standard.

syntaxe : rechMat(valeur, matrice , typeRetour)
exemple : =rechMat($A8;$A$1:$D$4;1)
code :

Function rechMat(valeur As Double, matrice As Range, typeRetour As Long) As Variant  
    ' recherche dans 'matrice' le 1er nombre le plus proche supérieur ou égal à 'valeur'  
    ' 'matrice' contient les titres des lignes et colonnes  
    ' typRetour =1 : 1er nombre le plus proche supérieur ou égal à 'valeur'  
    ' typRetour =2 : nom de la ligne  
    ' typRetour =3 : nom de la colonne  
    '  
    Dim lig As Long, col As Long, delta As Double  
    Dim lig1 As Long, col1 As Long, delta1 As Double  
    Dim mat() As Variant  
    '  
    mat = matrice.Value  
    delta1 = 9 ^ 99  
    For lig = 2 To UBound(mat, 1)  
        For col = 2 To UBound(mat, 2)  
            delta = mat(lig, col) - valeur  
            If mat(lig, col) >= valeur And delta < delta1 Then  
                col1 = col: lig1 = lig  
                delta1 = delta  
            End If  
        Next col  
    Next lig  
    If lig1 = 0 Then  
        rechMat = CVErr(xlErrNA)  
    Else  
    Select Case typeRetour  
    Case 1  
        rechMat = mat(lig1, col1)  
    Case 2  
        rechMat = mat(lig1, 1)  
    Case 3  
        rechMat = mat(1, col1)  
    End Select  
    End If  
End Function

fichier exemple : https://www.cjoint.com/?BJugHiXRnrH

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0