Recherche & référence NumLigne

Magic_Doctor

XLDnaute Barbatruc
VB:
Function NumLigne%(recherche As Variant, plage As Range)
'Renvoie le Nº de la ligne de la plage "plage" où se trouve "recherche" dans cette plage (si pas trouvé --> 0)
'Si "recherche" est un chiffre (par ex 12,53) et que la plage soit, par ex, A1:A250 : NumLigne(12,53, A1:A250)
'Si "recherche" est du texte (par ex Romina) et que la plage soit, par ex, A1:A250 : NumLigne("Romina", A1:A250)

Dim x As Integer

    On Error Resume Next
    x = Application.Match(recherche, plage, 0)
    On Error GoTo 0
    
    NumLigne = x

End Function
 

Magic_Doctor

XLDnaute Barbatruc
Re,

Effectivement, je n'y avais pas pensé puisque j'utilise Excel / Windows et tutti quanti uniquement en espagnol. Normal, là où je vis.

VB:
Function NumLigne%(rch As Variant, plage As Range)
'Renvoie le Nº de la ligne de la plage "plage" où se trouve "rch " dans cette plage (si pas trouvé --> 0)
'Si "rch" est un chiffre (par ex 12,53) et que la plage soit, par ex, A1:A250 : NumLigne(12,53, A1:A250)
'Si "rch" est du texte (par ex Romina) et que la plage soit, par ex, A1:A250 : NumLigne("Romina", A1:A250)

Dim x As Integer

    On Error Resume Next
    x = Application.Match(rch, plage, 0)
    On Error GoTo 0
    
    NumLigne = x

End Function
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

J'arrive après la bataille mais il me semble que nommer cette fonction 'NumLigne' est une méprise. Application.Match renvoyant un numéro de position RELATIF à l'emplacement du tableau ou numéro d'ordre d'apparition dans une liste. Ce qui est totalement différent d'un numéro de ligne.

Cordialement
 
Dernière édition:

Magic_Doctor

XLDnaute Barbatruc
Re,

Qu'à cela ne tienne, rebaptisons-la, par exemple, "PosItemInArray".
VB:
Function PosItemInArray%(rch As Variant, plage As Range)
'Renvoie le Nº de la ligne de la plage "plage" où se trouve "rch " dans cette plage (si pas trouvé --> 0)
'Si "rch" est un chiffre (par ex 12,53) et que la plage soit, par ex, A1:A250 : PosItemInArray(12,53, A1:A250)
'Si "rch" est du texte (par ex Romina) et que la plage soit, par ex, A1:A250 : PosItemInArray("Romina", A1:A250)

Dim x As Integer

    On Error Resume Next
    x = Application.Match(rch, plage, 0)
    On Error GoTo 0
    
    PosItemInArray = x
End Function
 

M12

XLDnaute Accro
Bonjour à tous,
En reprenant la fonction de Magic_Doctor, pour trouver le n° de ligne
VB:
Function NumLigne(rch As Variant, plage As Range) As Long
'Renvoie le Nº de la ligne de la plage "plage" où se trouve "recherche" dans cette plage (si pas trouvé --> 0)
'Si "recherche" est un chiffre (par ex 12,53) et que la plage soit, par ex, A1:A250 : NumLigne(12,53, A1:A250)
'Si "recherche" est du texte (par ex Romina) et que la plage soit, par ex, A1:A250 : NumLigne("Romina", A1:A250)

  Dim x As Long, r As Long
  r = plage.Row
  On Error Resume Next
  x = Application.Match(rch, plage, 0)
  On Error GoTo 0
  If x > 0 Then NumLigne = x + r - 1
  
End Function
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour
je vous propose de la réécrire proprement et d'y ajouter une petite option
à savoir le retour de l'index par rapport à la plage ou à la feuille avec un 3 ème argument optionnel
cela peut être utile si la plage ne commence pas en ligne 1

les formules
=NumLigne("fifi";B7:B11;1) donne l' index par rapport à la feuille

=NumLigne("fifi";B7:B11) donne l'index par rapport à la plage


le code
VB:
Function NumLigne&(ByVal recherche As Variant, ByVal plage As Range, Optional ByVal FeuilOrRangeIndex As Boolean = 0)
'Renvoie le Nº de la ligne de la plage "plage" où se trouve "recherche" dans cette plage (si pas trouvé --> 0)
'Si "recherche" est un chiffre (par ex 12,53) et que la plage soit, par ex, A1:A250 : NumLigne(12,53, A1:A250)
'Si "recherche" est du texte (par ex Romina) et que la plage soit, par ex, A1:A250 : NumLigne("Romina", A1:A250)
'proposé by patricktoulon
Dim x As Long
    NumLigne = 0
    With Application: x = .IfError(.Match(recherche, plage.Value, 0), 0): End With
    If x > 0 Then NumLigne = x + ((plage.Row - 1) * Abs(FeuilOrRangeIndex))
End Function
@+ ;)
 

Discussions similaires

Réponses
3
Affichages
125

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof