Selection dynamique de la feuille suivant la selection dans la fonction

Bonjour,

J'ai créé une fonction personnalisée avec des données qui se trouvent dans de différentes feuilles.

Lorsque je spécifie explicitement les bonne feuille dans le code cela fonctionne très bien mais lorsque j'enlève le prefix ThisWorkbook.Worksheets("FeuilleCible") le code ne reconnais pas les données dans l'autre feuille et il se base uniquement sur la feuille active (là où j'ai exécute la fonction).

Public Function RechercheV_multi(val_cherchees, mat_chercher, val_check, mat_check, mat_rules As Range, Optional Separator As String) As String

'Application.Volatile

Worksheets("Feuil2").Activate

Dim k, i, nbval_mat_chercher As Integer

nbval_mat_chercher = ThisWorkbook.Worksheets("Feuil2").Application.WorksheetFunction.CountA(mat_chercher)

If Separator = "" Then Separator = " ; "
i = 1

For k = 2 To nbval_mat_chercher
i = i + 1
If ThisWorkbook.Worksheets("Feuil2").Cells(k, mat_chercher.Column) = Cells(Application.ThisCell.Row, val_cherchees.Column) Then
If ThisWorkbook.Worksheets("Feuil2").Cells(i, mat_check.Column) = val_check Then
If RechercheV_multi = "" Then
RechercheV_multi = ThisWorkbook.Worksheets("Feuil2").Cells(i, mat_rules.Column)
Else
RechercheV_multi = RechercheV_multi & Separator & ThisWorkbook.Worksheets("Feuil2").Cells(i, mat_rules.Column)
End If
End If
End If

Next k

End Function

Je veux enlevé la sélection manuelle de la feuille et laisser la fonction se baser sur la sélection que j'ai faites en introduisant les paramètre de cette dernière.

Avez-vous une idée SVP ?

Merci Cordialement

Bonjour,

Une version allégée en utilisant une With ..

Un essai ...

Public Function RechercheV_multi(val_cherchees, mat_chercher, val_check, mat_check, mat_rules As Range, Optional Separator As String) As String
Dim k, i, nbval_mat_chercher As Integer

   'Application.Volatile

   With Worksheets("Feuil2")
      nbval_mat_chercher = .Application.WorksheetFunction.CountA(mat_chercher)

      If Separator = "" Then Separator = " ; "
      i = 1

      For k = 2 To nbval_mat_chercher
         i = i + 1
         If .Cells(k, mat_chercher.Column) = Cells(Application.ThisCell.Row, val_cherchees.Column) Then
            If .Cells(i, mat_check.Column) = val_check Then
               If RechercheV_multi = "" Then
                  RechercheV_multi = .Cells(i, mat_rules.Column)
               Else
                  RechercheV_multi = RechercheV_multi & Separator & .Cells(i, mat_rules.Column)
               End If
            End If
         End If
      Next k
   End With
End Function

ric

Merci de votre réponse rapide.

Mais cela ne change pas le fait que je dois mentionner la feuille explicitement dans le code, or moi je veux éviter ça, c'est à dire quelque soit la feuille qui contient la donnée il l'a prenne en compte.

Merci de votre aide

Bonjour,

Donc rechercher dans toutes les feuilles ...

je reviens

ric

Bonjour,

Sans fichier pour tester ...

un essai ...

Boucle sur toutes les feuilles ...

Public Function RechercheV_multi(val_cherchees, mat_chercher, val_check, mat_check, mat_rules As Range, Optional Separator As String) As String
Dim k, i, nbval_mat_chercher As Integer
Dim Sh As Worksheet

   'Application.Volatile

For Each Sh In ThisWorkbook.Worksheets  ' boucler sur toutes les feuilles
      With Sh
         nbval_mat_chercher = .Application.WorksheetFunction.CountA(mat_chercher)

         If nbval_mat_chercher <> "" Then   ' si différent de vide
            If Separator = "" Then Separator = " ; "
            i = 1

            For k = 2 To nbval_mat_chercher
               i = i + 1
               If .Cells(k, mat_chercher.Column) = Cells(Application.ThisCell.Row, val_cherchees.Column) Then
                  If .Cells(i, mat_check.Column) = val_check Then
                     If RechercheV_multi = "" Then
                        RechercheV_multi = .Cells(i, mat_rules.Column)
                     Else
                        RechercheV_multi = RechercheV_multi & Separator & .Cells(i, mat_rules.Column)
                     End If
                  End If
               End If
            Next k
         End With
      End If
   Next Sh
End Function

ric

Bonjour ric,

Merci pour ton aide.

Je sais c'est plus pratique avec le ficher, le-voici en attachement :)

C'est le code de base (que je voudrais préserver et de le faire fonctionner tel quel avant toute optimisation)

Le code fonctionne bien lorsque je pointe explicitement la feuille où il doit chercher, sinon il ne trouve pas la valeur malgré que dont la cellule je précise la feuille avec Feuil2!...

Merci infiniment

17classeur1.xlsm (21.59 Ko)

Bonjour,

Excuse-moi pour le délai ...

Désolé > cela dépasse mes compétences ...

Je n'ai pas de solution pour toi ...

ric

Bonjour,

Qu'est sensée calculer ta fonction ?
Et met en dur pour chaque appel ce qu'elle est sensée retourner.
S'il y a plusieurs feuilles et bien mets-en au moins une de plus. Et sur un appel, la fonction doit-elle trouver tout sur la même feuille ou ça peut être dispersé ?
eric

Rechercher des sujets similaires à "selection dynamique feuille suivant fonction"