Problème fonction FindNext VBA Word vers Excel

Bonjour,

J'ai une macro Word dont le but est d'ouvrir un classeur Excel qui est une liste de Noms, Prénoms et E-mails et de récupérer les adresses mail en filtrant par rapport au Nom de la personne. Or certaines personnes ont le même Nom de famille donc dans ce cas j'aimerais faire une boucle jusqu'à trouver le bon prénom.

J'utilise pour cela la fonction FindNext mais elle ne va jamais au-delà de la première occurrence trouvée. Après recherche sur ce forum j'ai également essayé la fonction Find avec le paramètre "After" mais ça ne change rien... donc peut-être que j'ai fait une erreur dans mon code ?

Merci pour votre aide !

 
Sub ATCO_Find(FindName As String)

'Dim Target As Range
Dim Ligne_Target As Integer
Dim Find_F_Name As String
Dim AppXL As Object, Target As Object

' on créé le nouvel Objet Excel
   Set AppXL = CreateObject("Excel.Application")
'On cherche la longueur du tableau qui se trouve sur la feuille N°1
   DernLigneXL = AppXL.Sheets(1).Cells.Find("F_I_N").Row
'On cherche la colonne du tableau où se trouvent les adresses mails
   ColMailXL = AppXL.Sheets(1).Cells.Find("Diffusion mail").Column
'On cherche la colonne du tableau où se trouvent les noms
   ColNom = AppXL.Sheets(1).Cells.Find("Nom").Column

Find_F_Name = ""

    'Il faut gérer les cas des mêmes noms
    If Trim(FindName) <> "" Then

        If Trim(FindName) = "TOTO F." Then
                FindName = "TOTO"
                Find_F_Name = "Fréderic"
        End If
        If Trim(FindName) = "TOTO A." Then
                FindName = "TOTO"
                Find_F_Name = "Armelle"
        End If

     'On active le classeur qui contient tous les noms et les adresses mails
        AppXL.Workbooks(fic_controleur).Activate

    'On sélectionne les colonnes qui contiennent les Noms et prénoms
        Set PlageCell = AppXL.Sheets(1).Range(AppXL.Cells(5, ColNom), AppXL.Cells(DernLigneXL - 2, ColNom + 1))

            With PlageCell
             Set Target = .Find(FindName)
                Ligne_Target = Target.Row

                Do
                    'Si ce n'est pas un cas de doublon ou si on est tombé sur la bonne case on prend l'adresse mail
                    If Find_F_Name = "" Or AppXL.Cells(Ligne_Target, ColNom + 1).Value = Find_F_Name Then
                        Atco_Mail = AppXL.Cells(Ligne_Target, ColMailXL).Value
                    'Sinon on essaye les autres recherches jusqu'à ce qu'on trouve le bon prénom
                    Else
                        Target = .FindNext(Target) ' ou bien Target = .Find(Target, After:=Target)
                        Ligne_Target = Target.Row
                    End If
                Loop While AppXL.Cells(Ligne_Target, ColNom + 1).Value <> Find_F_Name And Find_F_Name <> ""

            End With
    End If
End Sub

Bonjour

Teste cette modification sur la fin de la macro

    With PlageCell
      Set Target = .Find(FindName)
      Ligne_Target = Target.Row
      Do
        'Si ce n'est pas un cas de doublon ou si on est tombé sur la bonne case on prend l'adresse mail
        If Find_F_Name = "" Or AppXL.Cells(Target.Row, ColNom + 1).Value = Find_F_Name Then
          Atco_Mail = AppXL.Cells(Target.Row, ColMailXL).Value
          Exit Do       ' ou Exit Sub
        End If
          Target = .FindNext(Target)  ' ou bien Target = .Find(Target, After:=Target)
      Loop While Ligne_Target <> Target.Row
    End With
  End If
End Sub

Merci pour ta réponse.

Malheureusement ça ne change rien.

J'ai essayé de mettre la procédure directement dans le classeur Excel mais ça ne fonctionne pas non plus. J'ai créé un extract de mon tableau avec la procédure en PJ si ça peut aider à trouver l'erreur.

17test-findnext.xlsm (22.85 Ko)

Bonsoir

Oui j'avais oublié un Set

A tester

Bonjour,

Ah il fallait re-déclarer la variable Target avec un Set, c'est bon à savoir ! (même si je ne comprends pas vraiment pourquoi vu qu'on l'a déclarée au début ?)

Merci bien en tout cas ça marche !

Bonjour

On ne re-déclare pas la variable

Target une variable objet (Range) et pour lui donner une valeur on utilise Set

Comme dans ce code

Set Target = .Find(FindName)
Rechercher des sujets similaires à "probleme fonction findnext vba word"