Rechercher valeur proche et afficher nom lign & col correspondan

Badabimboum Messages postés 1 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
     
    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
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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