Problème avec FindNext

bemol

XLDnaute Nouveau
Bonjour,
j'ai un code qui doit me permettre de trouver la ou les présences d'un verbe dans la colonne.
Pour cela j'utilise les fonctions Find et FinNext. La fonction Find s'arrete des la première valeur trouvée c'est pour cela que j'utilise la fonction FinNext pour finir la recherche (c'est ce que j'ai retenu dans mes recherches sur le site et des forums).
Ce code fonctionne un seul fois. Lors d'une seconde exécution seul la première valeur est trouvée puis sort du code.
la premiere adresse est = à l'adresse en cours, le code ne passe donc pas dans la boucle FindNext.
D'ou peut venir mon erreur?

Code:
Sub RechercheNom()

Dim NomSaisi As String, NomSaisiSa As String, NomSaisiNew As String, RechNom As String, TrouveNom As Range
Dim Inc As Integer, CellTrouve As String, Mot As String, Rep As Integer
Dim FirstAddress As String
Dim TabVerbe(10, 1) As String, X As Integer, Y As Integer, IncTab As Integer, VarTab As String
X = 0
Y = 0
    'Affichage du InputBox pour saisie
    NomSaisi = TextBox2.Value
       
    'MsgBox "Mot saisi: " & NomSaisi
    NomSaisiSa = SansAccents(NomSaisi)     'Sauvegarde de la saisie du verbe sans accent
    NomSaisiNew = NomSaisi & NomSaisiSa  'Concaténation du verbe avec et sans accent
    
    'Sortie si pas de verbe saisi
    If NomSaisi = " " Then
        Exit Sub
    End If
    
    With Sheets("Feuil3")
        'Recherche du verbe de la cellue E5 jusqu'a la derniere cellule non vide de la colonne E (valeur 5 de Cells)
        Set TrouveNom = .Range("E5:E" & .Cells(.Rows.Count, "E").End(xlUp).Row).Find(What:=NomSaisiSa, after:=.Range("E5"), LookIn:=xlValues, lookAt:=xlPart, searchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)
            
            'Sauvegarde du verbe Italien a l'adresse trouvée
            Mot = .Range(TrouveNom.Address).Offset(0, 3)
                            
            'Test si verbe est non trouvé, si non trouvé sortie du Sous Programme
            If Mot = " " Then
            MsgBox "Verbe incorrect ou non reconnu"
                Exit Sub
            End If
                                
            'Sauvegarde 1er valeur verbes Francais et Italien
            RechNom = TrouveNom.Offset(0, 1).Value
            TabVerbe(X, 0) = RechNom
            TabVerbe(X, 1) = Mot
            MsgBox " Mot trouvé fonction FIND= " & Mot
                                
            'Sauvegarde de la 1ere adresse de la colonne
            If Not TrouveNom Is Nothing Then
                FirstAddress = TrouveNom.Address
                MsgBox "Premiere Adresse= " & FirstAddress
                                    
                'Boucle pour trouver l'existance des verbes Francais identiques dans la colonne, puis remplissage du tableau
                Do
                    Set TrouveNom = Sheets("Feuil3").Range("E5:E65536").FindNext(after:=TrouveNom)

                    MsgBox "Adresse boucle SET FINDNEXT suivante adresse= " & TrouveNom.Address
                    MsgBox " adresse cellule de la Feuil3= " & TrouveNom
                                            
                    'Test si nouvelle adresse est différente de la premiere adresse du verbe trouvé
                    If TrouveNom.Address <> FirstAddress Then
                        MsgBox "Adresse boucle DO suivante adresse= " & TrouveNom.Address

                        X = X + 1
                        RechNom = TrouveNom.Offset(0, 1).Value
                        Mot = Sheets("Feuil3").Range(TrouveNom.Address).Offset(0, 3)
                        TabVerbe(X, 0) = RechNom
                        TabVerbe(X, 1) = Mot
                    Else    'Test pour ne par récupérer la 1er valeur du tableau en fin de boucle
                End If
                                            
            MsgBox " Mot trouvé fonction FIND NEXT= " & Mot
            Loop While Not TrouveNom Is Nothing And TrouveNom.Address <> FirstAddress
        End If
    End With
                            
        'Test si la recherche n'est pas valide
        If IsEmpty(TrouveNom.Value) Then
            MsgBox "Verbe(s) non trouvé(s) ou mal orthographié(s)"
        Else
            'Test si tableau est vide
            On Error Resume Next
            
            'VarTab va prendre la valeur Empty si le tableau est vide.
            VarTab = UBound(TabVerbe)
            On Error GoTo 0

            If IsEmpty(VarTab) Then MsgBox "Le tableau est vide"
        End If
          
    ListBox24.Clear
    
    'Configuration de la ListBox22
    ListBox24.ColumnCount = 2
    ListBox24.ColumnWidths = "4,5 cm; 2 cm"
    ListBox24.Font.Size = 7
    
    'Affichage des vebes trouvés dans les 2 colonnes de la listBox24
    For IncTab = 0 To 9
        If TabVerbe(IncTab, 1) <> "" Then
            ListBox24.AddItem
            ListBox24.List(ListBox24.ListCount - 1, 0) = TabVerbe(IncTab, 0)
            ListBox24.List(ListBox24.ListCount - 1, 1) = TabVerbe(IncTab, 1)
        Else
        End If
    Next IncTab
    
    'Efface le tableau
    Erase TabVerbe
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème avec FindNext

Bonjour le fil, bonjour le forum,

D'accord avec Bruno un fichier est plus que nécessaire ! Surtout avec tes variables Trouvnom, cherchnom, chernomtouvé, retrouvnomcherché ou chertrouvhabontessur...
Après deux suppos effervescents pour passer mon mal de tête, juste la remarque suivante au niveau de l'ordre. Il me semble que le code correct est tu type :
Code:
Set chercheafondletrucquitrouve = Range("blabla").Find(bolobolo)
If Not chercheafondletrucquitrouve Is Nothing Then
    premièreadresse = chercheafondletrucquitrouve.Address
    Do
        'les lignes de code
        'qui agissent pour
        'la première occurrence trouvé
        Set chercheafondletrucquitrouve = Range("blabla").FindNext(bolobolo)
    Loop While Not chercheafondletrucquitrouve Is Nothing And chercheafondletrucquitrouve.Address <> premièreadresse
End If

Et toi ça serait plutôt ça :
Code:
Set chercheafondletrucquitrouve = Range("blabla").Find(bolobolo)
If Not chercheafondletrucquitrouve Is Nothing Then
    premièreadresse = chercheafondletrucquitrouve.Address
    Do
        Set chercheafondletrucquitrouve = Range("blabla").FindNext(bolobolo)
        'les lignes de code
        'qui agissent pour
        'la première occurrence trouvé
    Loop While Not chercheafondletrucquitrouve Is Nothing And chercheafondletrucquitrouve.Address <> premièreadresse
End If
Ne serait-ce pas ça le problème...
 

bemol

XLDnaute Nouveau
Re : Problème avec FindNext

Merci à vous de l’intérêt porté à mon sujet.
D'accord avec Bruno un fichier est plus que nécessaire ! Surtout avec tes variables Trouvnom, cherchnom, chernomtouvé, retrouvnomcherché ou chertrouvhabontessur...
Après deux suppos effervescents pour passer mon mal de tête,...............

Suppos effervescents, je ne connaissais pas ce type de traitement, l’ingestion ne doit pas être facile avant de soigner les maux de têtes.
Je ne maitrise pas la programmation et le VBA (vous avez du vous en rendre compte, c’est pour cela que j’utilise différentes variables et des commentaires d’aides dans le code) je code avec mes petits moyens et surtout en récupérant des informations issues du forum et du net.
Je mets de l’ordre dans le code pour vous joindre un fichier au plus tôt.
Merci pour la proposition de « Robert », je vais tester.
 

Statistiques des forums

Discussions
312 190
Messages
2 086 044
Membres
103 105
dernier inscrit
fofana