Creer une fonction rechercher Vba

Abd3l0u Messages postés 21 Statut Membre -  
Abd3l0u Messages postés 21 Statut Membre -
Bonjour a tous,

Mon probleme de vendredi n'inspire personne apparament jusqu'a aujourd'hui donc je retente ma chance avec une variante lol.

J'aimerai creer une fonction recherche sur Vba.

Cette fonction recherche une valeur en B et me donne la valeur qui se trouve en C. Cependant il est possible d'avoir la meme valeur en B ( exemple 10 lignes marquees G01) mais avec une valeur differente en C.

Dans ce cas la, j'aimerai que la fonction me donne toutes les possibilites possible que j'exploiterai autrement.

J'espere avoir etait assez clair =/, c'est jamais evident.

Merci par avance pour vos reponse.

2 réponses

  1. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Tu peux réaliser cette recherche multiple avec VBA et la méthode Range.Find.
    Un exemple :
    https://www.cjoint.com/?DCyjFdDHP1k

    A+
    1
    1. Abd3l0u Messages postés 21 Statut Membre 1
       
      Merci beaucoup Gyrus sympa l'exemple et surtout tres explicite.Il me reste plus qu'a voir au niveau des macros pour essayer d'adapter a mon cas.
      0
    2. Abd3l0u Messages postés 21 Statut Membre 1
       
      Alors j'ai repris ta sub et je l'ai transforme en fonction. J'aimerai avoir ton avis et si cela te semble correct ou pas stp .

      Function ChercheDxx(X3 As String) As Range
      'Cette fonction cherche dans ZBPRPL1 le code X3 dans la colonne B et retourne la plage des Dxx (colonnes C) qui y correspondent

      Dim Plage As Range, C As Range

      Dim Dxx As String

      Set Plage = Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row)

      Set C = Plage.Find(Valeur, , xlValues, xlWhole)
      If Not C Is Nothing Then
      Dxx = C.Address
      Do
      ChercheDxx = C.Offset(0, 1)
      Set C = Plage.FindNext(C)
      Loop While Not C Is Nothing And C.Address <> Dxx
      End If
      Set Plage = Nothing: Set C = Nothing

      End Function
      0
  2. Gyrus Messages postés 3360 Statut Membre 526
     
    Tout dépend de l'utilisation que tu veux faire de la fonction.
    Exemple avec une fonction appelée par une procédure test :

    Sub Test()
    MsgBox ChercheDxx("Toto2").Address
    End Sub

    Function ChercheDxx(X3 As String) As Range
    'Cette fonction cherche dans ZBPRPL1 le code X3 dans la colonne B et retourne la plage des Dxx (colonnes C) qui y correspondent
    Dim Plage As Range, C As Range
    Dim Dxx As String
    Set Plage = Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row)
    Set C = Plage.Find(X3, , xlValues, xlWhole)
    If Not C Is Nothing Then
    Dxx = C.Address
    Do
    If ChercheDxx Is Nothing Then
    Set ChercheDxx = C.Offset(0, 1)
    Else
    Set ChercheDxx = Application.Union(ChercheDxx, C.Offset(0, 1))
    End If
    Set C = Plage.FindNext(C)
    Loop While Not C Is Nothing And C.Address <> Dxx
    End If
    Set Plage = Nothing: Set C = Nothing
    End Function

    A+
    1
    1. Abd3l0u Messages postés 21 Statut Membre 1
       
      Merci encore pour ton aide =)
      0