Evolution de l'astuce VBA RechercheV Poly

Résolu
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 11 mai 2009 à 14:22
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 11 mai 2009 à 17:05
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é :
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

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
11 mai 2009 à 16:53
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...
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
11 mai 2009 à 17:05
Merci pour votre confiance,

Je vais donc compléter l'article sur l'astuce en question.

Et réfléchir à de nouvelles astuces...

A+
0