Evolution de l'astuce VBA RechercheV Poly
Résolu
pilas31
Messages postés
1825
Date d'inscription
Statut
Contributeur
Dernière intervention
-
pilas31 Messages postés 1825 Date d'inscription Statut Contributeur Dernière intervention -
pilas31 Messages postés 1825 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Pour aider un demandeur du forum bureautique, j’ai été amené à réfléchir à de légères modifications pour l’astuce de Lermite222 portant sur la recherche multiple (sa fonction RechercheVmulti)
Astuce RechercheVmulti
Ainsi le code que je propose apporte les améliorations suivantes :
1/ La fonction peut-être utilisée depuis un autre classeur que le classeur courant. Pour cela, J'ai simplifié le test cherchant tout simplement les lignes contenants une formule identique dans la colonne où la formule est utilisée.
2/ Les cellules paramètres de la fonction (RD =cellule où commencer la recherche, RC = cellule critère et RDT = cellule où chercher la donnée) peuvent à présent être dans des feuilles différentes du même classeur ou même dans des classeurs différents. Pour cela, J'ai préfixé par le nom de la bonne feuille toutes les références à ces cellules.
3/ Comme effet induit à ces modifications, on peut maintenant inclure cette fonction dans une formule plus complexe, voire l’utiliser plusieurs fois dans la même formule (dans ce cas, ce qui est logique, c’est la même occurrence qui est retournée). On peut également utiliser plusieurs formules RechercheVmulti différentes dans la même colonne, il ne confond pas les occurrences.
Remarque : La fonctionne cherche à présent dans sa propre colonne en remontant jusqu’en ligne 1 une formule absolument identique à elle-même (afin de trouver le n° d’occurrence). Il faut donc utiliser les formats $ avant de dupliquer les formules.
Pour le reste, le fonctionnement est absolument identique à celui décrit par Lermite222 dans l’astuce
J’ai effectué plusieurs tests concluants, merci aux contributeurs qui voudront bien vérifier le bon fonctionnement et pourront éventuellement faire évoluer cette astuce s'il le juge pertinent.
Voici donc le code modifié :
A+
Pour aider un demandeur du forum bureautique, j’ai été amené à réfléchir à de légères modifications pour l’astuce de Lermite222 portant sur la recherche multiple (sa fonction RechercheVmulti)
Astuce RechercheVmulti
Ainsi le code que je propose apporte les améliorations suivantes :
1/ La fonction peut-être utilisée depuis un autre classeur que le classeur courant. Pour cela, J'ai simplifié le test cherchant tout simplement les lignes contenants une formule identique dans la colonne où la formule est utilisée.
2/ Les cellules paramètres de la fonction (RD =cellule où commencer la recherche, RC = cellule critère et RDT = cellule où chercher la donnée) peuvent à présent être dans des feuilles différentes du même classeur ou même dans des classeurs différents. Pour cela, J'ai préfixé par le nom de la bonne feuille toutes les références à ces cellules.
3/ Comme effet induit à ces modifications, on peut maintenant inclure cette fonction dans une formule plus complexe, voire l’utiliser plusieurs fois dans la même formule (dans ce cas, ce qui est logique, c’est la même occurrence qui est retournée). On peut également utiliser plusieurs formules RechercheVmulti différentes dans la même colonne, il ne confond pas les occurrences.
Remarque : La fonctionne cherche à présent dans sa propre colonne en remontant jusqu’en ligne 1 une formule absolument identique à elle-même (afin de trouver le n° d’occurrence). Il faut donc utiliser les formats $ avant de dupliquer les formules.
Pour le reste, le fonctionnement est absolument identique à celui décrit par Lermite222 dans l’astuce
J’ai effectué plusieurs tests concluants, merci aux contributeurs qui voudront bien vérifier le bon fonctionnement et pourront éventuellement faire évoluer cette astuce s'il le juge pertinent.
Voici donc le code modifié :
Option Explicit 'RD =cellule où commencer la recherche 'RC = cellule critère 'RDT = cellule où chercher 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 trouvé de concordance RechercheVmulti = "" Exit Function sortie: 'si erreur dans la formule, non détectée par Excel. RechercheVmulti = "#FAUTE!" End Function
A+
1 réponse
Bonjour,
Te voilà contributeur, bienvenu à toi.
Juste quelques points essentiels pour contribuer à la base de connaissances, même s'ils peuvent paraître évidents :
- Ecrire dans un français correct,
- Ne pas écrire en style SMS,
- Faire un effort de présentation, mise en page et mise en forme (titres, organisation, typographie: majuscules, ponctuation...),
- Ne pas faire de copier-coller d'autres sites: préférer dans ce cas un lien vers la page du site concernée,
- S'assurer de la fiabilité et de la véracité de toutes les informations fournies,
- Avant de poster un nouvel article, vérifier qu'un article sur un sujet similaire n'existe pas déjà (en effectuant une recherche) : le cas échéant, compléter l'article existant.
©Thom@s
;-))
PS. Pour que le changement de statut soit pris en compte, delogues-toi et re-logues-toi si cela n'a pas été fait entre temps...
Te voilà contributeur, bienvenu à toi.
Juste quelques points essentiels pour contribuer à la base de connaissances, même s'ils peuvent paraître évidents :
- Ecrire dans un français correct,
- Ne pas écrire en style SMS,
- Faire un effort de présentation, mise en page et mise en forme (titres, organisation, typographie: majuscules, ponctuation...),
- Ne pas faire de copier-coller d'autres sites: préférer dans ce cas un lien vers la page du site concernée,
- S'assurer de la fiabilité et de la véracité de toutes les informations fournies,
- Avant de poster un nouvel article, vérifier qu'un article sur un sujet similaire n'existe pas déjà (en effectuant une recherche) : le cas échéant, compléter l'article existant.
©Thom@s
;-))
PS. Pour que le changement de statut soit pris en compte, delogues-toi et re-logues-toi si cela n'a pas été fait entre temps...
Je vais donc compléter l'article sur l'astuce en question.
Et réfléchir à de nouvelles astuces...
A+