Rechercher valeur proche et afficher nom lign & col correspondan

Badabimboum Messages postés 1 Statut Membre -  
eriiic Messages postés 25847 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

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
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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