Nicodemius
XLDnaute Nouveau
Bonjour à tous.
Je tente de créer une fonction qui puisse me permettre de retrouver le numero de ligne d'un enregistrement en fonction d'une valeur dans ma feuille.
Etant Novice, j'aurais souhaité la soumettre à la communauté.
Pour le moment, tout semble fonctionner, mais j'aimerais connaitre votre avis et savoir si je n'ai pas fais d'erreur.
Pour finir, j'aurais 2 questions.
1 - Comment dois-je modifier le code dans le cas où la valeur recherchée ne serait pas trouvé ?
(Je pensais à "If MyCell IsNothing then Exit Function")
2 - Comment dois-je modifier le code pour rechercher plusieurs valeurs sur une même ligne ?
(J'imaginais quelque chose comme ; )
Qu'en pensez vous ?
Je tente de créer une fonction qui puisse me permettre de retrouver le numero de ligne d'un enregistrement en fonction d'une valeur dans ma feuille.
Etant Novice, j'aurais souhaité la soumettre à la communauté.
VB:
Public Function TrouveLigne(MyVal As String, NomFeuille As String) As Integer
'Fonction chargée de récupérér le Numéro de ligne en rapport avec la valeur recherchée.
Dim Ws As Worksheet 'Réf à la feuille de calcul
Dim MyRange As Range 'Réf à la plage de cellules
Dim MyCell As Range 'Réf à la cellule recherchée
Dim Lng_LastRow As Long 'dernière Ligne
Dim Lng_LastCol As Long 'dernière colonne
'On définit la plage de cellule sur laquelle va s'effectuer la recherche
Set Ws = ThisWorkbook.Sheets(NomFeuille)
Lng_LastRow = Ws.Range("A" & Rows.Count).End(xlUp).Row
Lng_LastCol = Ws.Cells(1, Cells.Columns.Count).End(xlToLeft).Column
'Si le tableau est vide on quitte la procédure.
'Attention, le tableau contient 1 ligne d'en-tête
If Lng_LastRow <= 1 Then
Set Ws = Nothing
Exit Function
End If
Set MyRange = Ws.Range(Cells(1, 1), Cells(Lng_LastRow, Lng_LastCol))
Set MyCell = MyRange.Find(What:=MyVal, LookIn:=xlValues, LookAt:=xlWhole)
TrouveLigne = MyCell.Row
Set MyCell = Nothing
Set MyRange = Nothing
Set Ws = Nothing
End Function
Pour le moment, tout semble fonctionner, mais j'aimerais connaitre votre avis et savoir si je n'ai pas fais d'erreur.
Pour finir, j'aurais 2 questions.
1 - Comment dois-je modifier le code dans le cas où la valeur recherchée ne serait pas trouvé ?
(Je pensais à "If MyCell IsNothing then Exit Function")
2 - Comment dois-je modifier le code pour rechercher plusieurs valeurs sur une même ligne ?
(J'imaginais quelque chose comme ; )
Code:
If MyCell.Offset(0, 1) = val2 And MyCell.Offset(0, 2) = val3 Then
TrouveLigne = MyCell.Row
Else
Msgbox "Valeur non trouvée"
Exit Function
End if
Qu'en pensez vous ?