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

Fermé
andreea_94 Messages postés 1 Date d'inscription lundi 1 janvier 2018 Statut Membre Dernière intervention 1 janvier 2018 - Modifié le 1 janv. 2018 à 17:55
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 1 janv. 2018 à 18:27
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 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
1 janv. 2018 à 18:27
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
1 janv. 2018 à 17:57
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 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
Modifié le 1 janv. 2018 à 18:01
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