Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Recherche & référence NumLigne

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
Bonsoir Magic_Doctor

Recherche étant une fonction de feuille existante, tu devrais libeller ta variable autrement.

Bien cordialement, @+
 
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
 
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:
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
 
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:
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
@+ 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
255
Réponses
0
Affichages
519
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…