Recherchev, VBE, recherchev polyvalente
Résolu/Fermé
Humex
Messages postés
2
Date d'inscription
mercredi 22 avril 2009
Statut
Membre
Dernière intervention
23 avril 2009
-
23 avril 2009 à 09:27
pierre - 29 juin 2015 à 17:39
pierre - 29 juin 2015 à 17:39
A voir également:
- Recherchev, VBE, recherchev polyvalente
- Si(recherchev vrai alors) ✓ - Forum Excel
- Recherchev ne renvoie pas la bonne valeur ✓ - Forum Excel
- Recherchev dans un tableau croisé dynamique - Forum Excel
- Recherchev texte ✓ - Forum Excel
- Recherchev si contient - Forum Excel
11 réponses
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
24 avril 2009 à 02:30
24 avril 2009 à 02:30
Bonsoir,
Je me suis penché sur le problème qui n'est pas simple. J'ai trouvé deux problèmes dans l'application de la macro de Lermite222 qui dans ce cas d'utilisation ne pouvait pas fonctionner correctement.
1/ la macro initiale supposait qu'elle est une fonction du classeur courant car il y avait un test sur la formule qui ne marche pas si la macro est préfixée par un nom de fichier. J'ai simplifié le test cherchant tout simplement les lignes contenants une macro identique.
2/ la macro initiale supposait que tout se passait dans la même feuille. J'ai préfixé par le nom de la bonne feuille toutes les cellules.
Il faut donc bien voir le principe d'utilisation. Les trois paramètres sont trois cellules (inutile de mettre des plages). Et il faut dupliquer la formule à l'identique (en utilisant la syntaxe $) pour obtenir les occurences différentes.
Donc voila la macro transformée qui devrait marcher (avec mes excuses à Lermitte d'avoir un peu adapté son excellent travail)
A+
Je me suis penché sur le problème qui n'est pas simple. J'ai trouvé deux problèmes dans l'application de la macro de Lermite222 qui dans ce cas d'utilisation ne pouvait pas fonctionner correctement.
1/ la macro initiale supposait qu'elle est une fonction du classeur courant car il y avait un test sur la formule qui ne marche pas si la macro est préfixée par un nom de fichier. J'ai simplifié le test cherchant tout simplement les lignes contenants une macro identique.
2/ la macro initiale supposait que tout se passait dans la même feuille. J'ai préfixé par le nom de la bonne feuille toutes les cellules.
Il faut donc bien voir le principe d'utilisation. Les trois paramètres sont trois cellules (inutile de mettre des plages). Et il faut dupliquer la formule à l'identique (en utilisant la syntaxe $) pour obtenir les occurences différentes.
Donc voila la macro transformée qui devrait marcher (avec mes excuses à Lermitte d'avoir un peu adapté son excellent travail)
Option Explicit 'RD =cellule où commencer la recherche 'RC = cellule critère 'RDT = cellule où cherche la donnée 'Ligne rechercher jusque ligne... (optional) si 0 cherche jusqu'au bout de la ligne Public Function RechercheVmulti(RD As Range, RC As Range, RDT As Range, _ Optional Ligne As Long = 0) Dim i As Integer, e As Integer, Txt As String Dim LigE As Long, ColE As Long 'où écrire résultats Dim Col As Integer Dim Lig As Long, Occ As Long Dim FeuilE As String, FeuilRD As String, FeuilRDT As String On Error GoTo sortie LigE = Application.Caller.Row ColE = Application.Caller.Column FeuilE = Application.Caller.Parent.Name Application.Volatile Lig = RD.Row ' Ligne où commencer la recherche Col = RD.Column 'Colonne où commencer la recherche FeuilRD = RD.Parent.Name FeuilRDT = RDT.Parent.Name If Ligne = 0 Then Ligne = Range(Sheets(FeuilRD).Cells(65536, Col), Sheets(FeuilRD).Cells(65536, Col)).End(xlUp).Row End If 'Recherche le numéro de l'occurrence à trouver For Occ = LigE - 1 To 1 Step -1 Txt = Sheets(FeuilE).Cells(Occ, ColE).Formula If Txt = Sheets(FeuilE).Cells(LigE, ColE).Formula Then e = e + 1 End If Next Occ For i = Lig To Ligne If Sheets(FeuilRD).Cells(i, Col) = RC Then If e <> 0 Then e = e - 1 Else RechercheVmulti = Sheets(FeuilRDT).Cells(i, RDT.Column) Exit Function End If End If Next i 'Si plus trouver de concordance RechercheVmulti = "" Exit Function sortie: 'si erreur dans la formule, non détectée par Excel. RechercheVmulti = "#FAUTE!" End Function
A+
Bonjour,
Je tiens à vous remercier pour le délai avec lequel vous m'avez répondu, et m'excuser pour le mien.
J'ai trouvé une solution en utilisant une autre macro qui fonctionne parfaitement. Le problème est donc résolu et je peux, si quelqu'un le souhaite, poster cette nouvelle formule.
Je tiens à remercier Lermitte pour son travail ainsi que Pilas31 pour les rectifications et pour m'avoir répondu.
Veuillez agréer Messieurs, mes salutations distinguées.
PS: Si j'avais à poster la macro que j'utilise actuellement, je m'efforcerais de donner le lien du site sur lequel je l'ai trouvée; je ne suis pas doué en VBA et je ne tiens pas à m'attribuer le travail d'un autre et serais incapable ou presque de répondre aux questions et problèmes rencontrés par d'autres utilisateurs avec cette macro.
Je tiens à vous remercier pour le délai avec lequel vous m'avez répondu, et m'excuser pour le mien.
J'ai trouvé une solution en utilisant une autre macro qui fonctionne parfaitement. Le problème est donc résolu et je peux, si quelqu'un le souhaite, poster cette nouvelle formule.
Je tiens à remercier Lermitte pour son travail ainsi que Pilas31 pour les rectifications et pour m'avoir répondu.
Veuillez agréer Messieurs, mes salutations distinguées.
PS: Si j'avais à poster la macro que j'utilise actuellement, je m'efforcerais de donner le lien du site sur lequel je l'ai trouvée; je ne suis pas doué en VBA et je ne tiens pas à m'attribuer le travail d'un autre et serais incapable ou presque de répondre aux questions et problèmes rencontrés par d'autres utilisateurs avec cette macro.
Bonjour,
Je suis intéressée par la solution, étant confrontée au même cas de figure. Ou alors un lien vers la macro que tu as utilisé?
PS: participant régulièrement à des forums, je constate qu'il vaut toujours mieux laisser la solution quand le problème est résolu. Rien de plus frustrant que de voir quelqu'un qui a eu le même problème et l'a résolu sans dire comment. A savoir que les forums restent en ligne, alors qu'il peut être difficile de recontacter un utilisateur 5 ans après ;-)
Merci d'avance!
Je suis intéressée par la solution, étant confrontée au même cas de figure. Ou alors un lien vers la macro que tu as utilisé?
PS: participant régulièrement à des forums, je constate qu'il vaut toujours mieux laisser la solution quand le problème est résolu. Rien de plus frustrant que de voir quelqu'un qui a eu le même problème et l'a résolu sans dire comment. A savoir que les forums restent en ligne, alors qu'il peut être difficile de recontacter un utilisateur 5 ans après ;-)
Merci d'avance!
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
19 janv. 2010 à 13:42
19 janv. 2010 à 13:42
Bonjour,
Je ne sais pas si Humex est toujours sur le forum mais je te donne le lien de l'astuce dont je parle dans mon post initialement imaginée par Lermitte222 et à laquelle j'ai apporté quelques petites améliorations.
https://www.commentcamarche.net/faq/12543-vba-recherchev-polyvalente
Peut-être qu'elle répond à ton problème.
Si elle ne répond pas n'hésites pas à ouvrir une autre discussion en exposant ton problème et éventuellement en mettant dans Cijoint une exemple de ton fichier.
A+
Je ne sais pas si Humex est toujours sur le forum mais je te donne le lien de l'astuce dont je parle dans mon post initialement imaginée par Lermitte222 et à laquelle j'ai apporté quelques petites améliorations.
https://www.commentcamarche.net/faq/12543-vba-recherchev-polyvalente
Peut-être qu'elle répond à ton problème.
Si elle ne répond pas n'hésites pas à ouvrir une autre discussion en exposant ton problème et éventuellement en mettant dans Cijoint une exemple de ton fichier.
A+
Merci pour ta réponse.
Oui j'avais déjà été voir ce lien, mais la macro "modifiée" que tu avais ensuite posté était exactement la même.
Ou alors la macro que tu as modifié a remplacé sur le lien celle d'origine?
En fait je cherche aussi à pouvoir traiter sur une feuille des données d'autres feuilles.
Est-ce que c'est ce que fait
Si oui, pourquoi un appel avec RD sous la forme
Oui j'avais déjà été voir ce lien, mais la macro "modifiée" que tu avais ensuite posté était exactement la même.
Ou alors la macro que tu as modifié a remplacé sur le lien celle d'origine?
En fait je cherche aussi à pouvoir traiter sur une feuille des données d'autres feuilles.
Est-ce que c'est ce que fait
RD.Parent.Name?
Si oui, pourquoi un appel avec RD sous la forme
RechercheVmulti(feuille!$A$2,!ESTVIDE,feuille!$H$2)me donne une erreur?
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
>
gigiu
19 janv. 2010 à 15:57
19 janv. 2010 à 15:57
Re,
Je regarde car il y a un petit moment que je n'ai pas utilisé cette fonction et je crois que lors d'une discussion ultérieure j'ai proposé d'autres améliorations (qui ne sont pas dans l'astuce) ...
Je cherche et je reviens...
Je regarde car il y a un petit moment que je n'ai pas utilisé cette fonction et je crois que lors d'une discussion ultérieure j'ai proposé d'autres améliorations (qui ne sont pas dans l'astuce) ...
Je cherche et je reviens...
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
19 janv. 2010 à 16:37
19 janv. 2010 à 16:37
Quel est la signification de !ESTVIDE . Car cet argument de la fonction est censé être une cellule qui contient le critère de selection.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
19 janv. 2010 à 17:06
19 janv. 2010 à 17:06
Re ,
Je te propose les modifs suivantes :
Je te propose les modifs suivantes :
'RD =cellule où commencer la recherche 'RDT = cellule où chercher la donnée 'Ligne rechercher jusque ligne... (optional) si 0 cherche jusqu'au bout de la ligne Public Function RechercheVmultiVide(RD As Range, RDT As Range, _ Optional Ligne As Long = 0) Dim i As Integer, e As Integer, Txt As String Dim LigE As Long, ColE As Long 'où écrire résultats Dim Col As Integer Dim Lig As Long, Occ As Long Dim FeuilE As Worksheet, FeuilRD As Worksheet, FeuilRDT As Worksheet On Error GoTo sortie LigE = Application.Caller.Row ColE = Application.Caller.Column Set FeuilE = Application.Caller.Parent Application.Volatile Lig = RD.Row ' Ligne où commencer la recherche Col = RD.Column 'Colonne où commencer la recherche Set FeuilRD = RD.Parent Set FeuilRDT = RDT.Parent If Ligne = 0 Then Ligne = Range(FeuilRD.Cells(65536, Col), FeuilRD.Cells(65536, Col)).End(xlUp).Row End If 'Recherche le numéro de l'occurrence à trouver For Occ = LigE - 1 To 1 Step -1 Txt = FeuilE.Cells(Occ, ColE).Formula If Txt = FeuilE.Cells(LigE, ColE).Formula Then e = e + 1 End If Next Occ For i = Lig To Ligne If FeuilRD.Cells(i, Col) = "" Then 'RC Then If e <> 0 Then e = e - 1 Else RechercheVmultiVide = FeuilRDT.Cells(i, RDT.Column) Exit Function End If End If Next i 'Si plus trouvé de concordance RechercheVmultiVide = "" Exit Function sortie: 'si erreur dans la formule, non détectée par Excel. RechercheVmultiVide = "#FAUTE!" End Function
OK donc,
ligne 37 de la macro, je remplace par
Du coup je dégage l'argument RC de la fonction.
La formule est acceptée, j'ai maintenant une erreur #NOM, mais je sens qu'on se rapproche du but!
ligne 37 de la macro, je remplace par
If Sheets(FeuilRD).Cells(i, Col) <> Empty Then
Du coup je dégage l'argument RC de la fonction.
La formule est acceptée, j'ai maintenant une erreur #NOM, mais je sens qu'on se rapproche du but!
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
19 janv. 2010 à 17:17
19 janv. 2010 à 17:17
Oui tu as raison j'avais modifié à l'envers en mettant ="" au lieu de <> "" ou Empty ...
Chez moi ça marche mais j'ai tout dans le même classeur...
Chez moi ça marche mais j'ai tout dans le même classeur...
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
19 janv. 2010 à 17:22
19 janv. 2010 à 17:22
Attention, regarde la dernière fonction que j'ai proposé elle est plus recente et les déclarations de feuilles sont différentes :
Dim FeuilE As Worksheet, FeuilRD As Worksheet, FeuilRDT As Worksheet
et ne sont plus utilisées comme des nom de feuilles.
Lors d'une discussion ultèrieure j'avais corrigé cet aspect. Peut-être que tu as des problèmes à cause de ça...
Dim FeuilE As Worksheet, FeuilRD As Worksheet, FeuilRDT As Worksheet
et ne sont plus utilisées comme des nom de feuilles.
Lors d'une discussion ultèrieure j'avais corrigé cet aspect. Peut-être que tu as des problèmes à cause de ça...
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
20 janv. 2010 à 10:36
20 janv. 2010 à 10:36
Bonjour,
J'ai simulé exactement le même appel (avec un ; à la place de ,) et ça fonctionne parfaitement.
Si tu as toujours le même problème, tu peux peut-être mettre ton fichier (edulcoré) sur cijoint.fr pour que je le regarde..
J'ai simulé exactement le même appel (avec un ; à la place de ,) et ça fonctionne parfaitement.
='Facture 1.xls'!RechercheVmulti(feuille1!$A$2;feuille2!$H$2)
Si tu as toujours le même problème, tu peux peut-être mettre ton fichier (edulcoré) sur cijoint.fr pour que je le regarde..
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
>
gigiu
25 janv. 2010 à 14:46
25 janv. 2010 à 14:46
Bonjour,
Avec plaisir, je passe la discussion en résolu.
Bonne continuation.
Avec plaisir, je passe la discussion en résolu.
Bonne continuation.
bonjour a tous,
vos codes sont très interessant mais je souhaiterais savoir si il etait possible d'avoir les resultats de la fonction recherchevmulti sous la forme d'une liste plutot que les resultat soient les un en dessous des autres ?
Merci d'avance
vos codes sont très interessant mais je souhaiterais savoir si il etait possible d'avoir les resultats de la fonction recherchevmulti sous la forme d'une liste plutot que les resultat soient les un en dessous des autres ?
Merci d'avance
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
3 déc. 2014 à 16:47
3 déc. 2014 à 16:47
Bonjour,
Si la question consiste à avoir les résultats dans une même cellule avec un séparateur (virgule par exemple), le problème est beaucoup plus simple. Voici une fonction qui fait cela :
A tester
Si la question consiste à avoir les résultats dans une même cellule avec un séparateur (virgule par exemple), le problème est beaucoup plus simple. Voici une fonction qui fait cela :
'RD = Plage de cellules ou rechercher 'RC = cellule qui contient le critère 'ColRes = N°Colonne ou se trouve le résultat Public Function RechercheDonneListe(RD As Range, RC As Range, ColRes As Integer) As String Dim CelCou As Range Dim ListeResult As String For Each CelCou In RD If CelCou.Value = RC.Value Then If ListeResult <> "" Then ListeResult = ListeResult & " , " ListeResult = ListeResult & Cells(CelCou.Row, ColRes) End If Next CelCou RechercheDonneListe = ListeResult End Function
A tester
19 janv. 2010 à 12:34
Je relance le topic car je suis intéressée pour exploiter cette macro en important des données de feuilles différentes.
J'ai beau relire et comparer la macro d'origine et celle modifiée, je ne vois aucune différence... Serait-ce un problème de copié-collé?
Merci d'avance :)