Fonction pour trouver la deuxième ligne avec un mot déclaré

andreea_94 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai besoin de trouver la deuxième ligne avec un mot déclaré sur une base donnée. J'ai reussi d'écrire le code pour identifier la première ligne avec le mot (par exemple ''sexe'') et maintenant j'ai besoin de trouver la prochaine ligne avec ce mot. Je dois prendre en compte le fait que la base de données inclut aussi des lignes vides. Ayant peu de connaissances en vba, s'il vous plaît, est-ce qu'il y a quelqu'un qui peut m'aider? Merci beaucoup :)

P.S. J'affiche ci-dessous mon code pour identifier la première ligne:
Function premierc(premier_mot As String) As Long
Dim test As Boolean
Dim i As Long
i = 1
test = False
While test = False
If Trim(ActiveSheet.Cells(i, 2).Value) = premier_mot Then

premierc = i
test = True
Else
i = i + 1
End If
Wend
End Function
Sub testfunction()
Dim mot As String
Dim premierligne As Long
mot = InputBox("mot cherche")
premierligne = premierc(mot)
MsgBox ("premier ligne " &premierligne)
End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).

Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Jordane45
A voir également:

3 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour tout le monde, bonne année

une approche un peu differente avec Find, Trim sur colonne et possibiltes: existe pas, une seule fois et enfin deux fois le mot cherché

Sub test()
    Dim mot As String
    Dim premierligne As Variant, deuxieme As Variant
    mot = InputBox("Mot cherché")
    Call premierc(mot, premierligne, deuxieme)
    MsgBox ("Mot recherché: " & mot & vbNewLine & "premiere ligne: " & premierligne & vbNewLine & "deuxieme ligne: " & deuxieme)
End Sub

'recherche ligne(s)
Sub premierc(premier_mot As String, premierligne As Variant, deuxieme As Variant)
    Dim TColB, i As Long
    With Worksheets("feuil1")       'nom de feuille a adapter
        TColB = .Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row)      'mise en tableau colonne B
        For i = LBound(TColB) To UBound(TColB)
            TColB(i, 1) = Trim(TColB(i, 1))     'sup espaces devant/derriere
        Next i
        .Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row) = TColB      'ecriture colonne B sans espaces devant/derriere
        Nb = Application.CountIf(.Columns(2), premier_mot)      'nombre de fois mot dans colonne B
        If Nb > 1 Then      'au moins deux fois
            premierligne = 1
            premierligne = .Columns(2).Find(premier_mot, .Cells(premierligne, 2), , xlWhole).Row     'recherche 1 iere ligne
            deuxieme = .Columns(2).Find(premier_mot, .Cells(premierligne, 2), , xlWhole).Row         'recherche deuixeme ligne
        ElseIf Nb = 1 Then      'une fois
            premierligne = 1
            premierligne = .Columns(2).Find(premier_mot, .Cells(premierligne, 2), , xlWhole).Row     'recherche 1iere ligne
            deuxieme = "n'existe pas"
        Else        'pas du tout
            premierligne = "n'existe pas"
            deuxieme = "n'existe pas"
        End If
    End With
End Sub
1
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Visiblement tu codes en VBA sous Excel
Donc... pour faire des recherches.. il ne faut pas utiliser de boucle... mais simplement utiliser la méthode FIND
Regarde ici :
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, suggestion:
Function secondm(mot As String) As Long
Dim test As Boolean, dejavu As Long
Dim i As Long
i = 1
test = False
dejavu = 0
While test = False
    If Trim(ActiveSheet.Cells(i, 2).Value) = mot Then
        dejavu = dejavu + 1
        If dejavu = 2 Then
            test = True
            secondm = i
        End If
    End If
    i = i + 1
Wend
End Function

ou bien ceci, avec un second paramètre indiquant l’occurrence à trouver:
Function vachercher(mot As String, occurrence As Long) As Long
Dim test As Boolean, dejavu As Long
Dim i As Long
i = 1
test = False
dejavu = 0
While test = False
    If Trim(ActiveSheet.Cells(i, 2).Value) = mot Then
        dejavu = dejavu + 1
        If dejavu = occurrence Then
            test = True
            vachercher = i
        End If
    End If
    i = i + 1
Wend
End Function
0