Fusion de deux fonctions

Bonjour,

J'ai besoin d'un équivalent de la fonction RECHERCHEV, mais qui fonctionne lorsque les colonnes ne sont pas adjacentes, et lorsque la colonne dans laquelle la valeur recherchée n'est pas triée.

J'ai trouvé cet équivalent. Il s'agit de la combinaison suivante :

INDEX(matrice_donnees, EQUIV(val_recherchee, tabl_recherche, 0), col_donnees)

J'aimerais remplacer cette combinaison par une fonction de recherche perso :

RECHERCHEP(val_recherchee, tabl_recherche, matrice_donnees, col_donnees)

Est-ce possible ?

Merci pour vos réponses.

Bonjour,

à tester :

Function rechercheP(val_recherchee As Variant, tabl_recherche As Range, matrice_donnees As Range, col_donnees As Long) As Variant
    Dim c As Range
    Set c = tabl_recherche.Find(val_recherchee, LookIn:=xlValues, lookat:=xlWhole)
    If c Is Nothing Then
        rechercheP = CVErr(xlErrNA)
    Else
        rechercheP = matrice_donnees.Cells(c.Row, col_donnees)
    End If
End Function

Syntaxe : rechercheP(val_recherchee , tabl_recherche , matrice_donnees, col_donnees)

Ex : =rechercheP(5;C:C;A:D;2)

eric

Merci beaucoup pour votre réponse.

J'ai encore deux questions :

1. où dois-je coller ce code ?

→ Je pense avoir trouvé : "Outils/Macros/Visual Basic Editor…"

2. Est-il possible de retourner une valeur pré-définie (ex : "–") lorsque la fonction retourne une erreur (#REF ou #N/A ou autre) ?

→ C'est le rôle de "If c Is Nothing Then" ?

Merci pour votre aide

J'avais oublié de mettre le fichier.

Code a mettre dans un module standard.

2. Est-il possible de retourner une valeur pré-définie (ex : "–") lorsque la fonction retourne une erreur (#REF ou #N/A ou autre) ?

→ C'est le rôle de "If c Is Nothing Then" ?

oui

    If c Is Nothing Then
        rechercheP = "-"

#REF tu ne devrais pas avoir, il faut lui fournir de bonnes références.

eric

18classeur1.zip (6.75 Ko)

Bonsoir,

Merci beaucoup pour votre aide.

J'ai crée le module, ajouté la fonction et tout fonctionne parfaitement.

J'ai ensuite essayé de me créer une autre fonction, à la suite dans le module. Je n'ai pas réussi à faire ce que je voulais. J'ai effacé tout le code que j'ai ajouté.

Maintenant, plus rien ne marche. Dans aucun classeur excel. Même votre exemple, dans son fichier d'exemple neuf ne marche plus : il renvoie #N/A

Comment est-ce que j'ai pu casser tous les documents excel sur mon ordinateur (MAC) ?

J'ai quitté excel, puis ré-ouvert : rien à faire…

EDIT: En fait, la fonction EQUIV ne marche plus sur mon ordinateur...

Equiv() ne peut pas ne plus marcher.

Déposer le fichier

eric

Bonjour,

Merci pour votre réponse.

Pour la fonction Equiv, c'est de ma faute, j'avais oublié le 0 terminal pour forcer une recherche exacte.

Ceci dit, la fonction rechercheP ne fonctionne toujours pas. Ci joint un document d'exemple.

Il affiche #N/A au lieu du résultat attendu...

Merci pour votre aide précieuse.

16text.xlsm (34.30 Ko)

J'ai refait le fichier en incluant l'utilisation de la fonction

RECHERCHEP(val_recherchee, tabl_recherche, matrice_donnees, col_donnees)

et l'utilisation de

INDEX(matrice_donnees, EQUIV(val_recherchee, tabl_recherche, 0), col_donnees)

rechercheP() produit le résultat #N/A (alors qu'elle ne devrait pas…) et l'utilisation de INDEX/EQUIV fourni le bon résultat…

Cf. capture d'écran

screenshot 2014 07 18 at 09 53 44

Bonjour,

J'avais fait au plus court en supposant que le tableau commençait toujours en A1 ce qui n'est pas le cas ici.

Donc :

Function rechercheP(val_recherchee As Variant, tabl_recherche As Range, matrice_donnees As Range, col_donnees As Long) As Variant
    Dim c As Range
    Set c = tabl_recherche.Find(val_recherchee, LookIn:=xlValues, lookat:=xlWhole)
    If c Is Nothing Then
        rechercheP = CVErr(xlErrNA)
    Else
        rechercheP = matrice_donnees.Cells(c.Row - matrice_donnees.Row + 1, matrice_donnees.Column - col_donnees)
    End If
End Function

tabl_recherche et matrice_donnees sont supposés commencer à la même ligne sinon il faudra compléter un peu plus.

eric

Merci pour votre réponse. Je viens d'apprendre quelque chose d'essentiel qui me servira pour beaucoup de projets.

Bonne continuation.

N'oublie pas de mettre en résolu dans le message avec la bonne fonction.

eric

C'est fait. Merci.

Bonjour,

Désolé de reprendre le thread. En fait, la fonction ne marche toujours pas.

Visiblement, tabl_recherche.Find(2, LookIn:=xlValues, lookat:=xlWhole) est incapable de trouver le chiffre 2 dans la liste 1,2,3,4 …

screenshot 2014 07 19 at 09 41 56
13test2.xlsm (33.82 Ko)

Bonjour,

une image ne sert à rien, il faut le fichier.

eric

Merci pour votre réponse. Le fichier est joint. Au-dessus de l'image.

Je l'ajoute aussi ici.

12test2.xlsm (34.38 Ko)

????

Function rP(val As Variant, tabl As Range, matrice_donnees As Range, col_donnees As Long) As Variant
    Set rP = tabl.Find(3)
End Function

Quel est le rapport avec la fonction que je t'ai mise ???

eric

Mince, je me suis trompé de fichier, je suis désolé.

Ci-dessous le bon fichier joint, avec une capture d'écran et la fonction que j'utilise, qui met en évidence l'erreur de find.

Function rechercheP(val_recherchee As Variant, tabl_recherche As Range, matrice_donnees As Range, col_donnees As Long) As Variant
    Dim c As Range
    Set c = tabl_recherche.Find(val_recherchee, LookIn:=xlValues, lookat:=xlWhole)
    If c Is Nothing Then
        rechercheP = "Erreur Find"
    Else
        rechercheP = matrice_donnees.Cells(c.Row - matrice_donnees.Row + 1, matrice_donnees.Column - col_donnees)
    End If
End Function

Merci pour votre aide. J'imagine qu'il doit s'agir d'un truc tout bête, mais je ne trouve pas. Normalement, le résultat devrait être "c" et non pas "Erreur Find".

screenshot 2014 07 19 at 13 02 07
21test3.xlsm (39.18 Ko)

Chez moi ça retourne bien c

eric

Merci pour votre réponse.

C'est bien ce que je pensais. J'ai fait un copier / coller de la fonction dans le meme module. je l'ai renommée, j'ai travaillé dessus. Depuis, plus rien ne marche. J'ai quitté excel, j'ai relancé l'application, crée un nouveau classeur….

Même votre premier exemple ne marche plus. Qu'est-ce que je peux faire ?

Comment est-ce que je peux voir ce que Find tente de faire et où ça coince ?

Je ne connais pas les Mac, mais actives-tu bien les macros à l'ouverture du fichier ?

Sinon aucune raison que ce soit bon chez moi et mauvais chez toi.

C'est exactement ce que ça t'a fait à moment donné puis ça a refonctionné...

eric

Rechercher des sujets similaires à "fusion deux fonctions"