Problème de bouclage avec findNext

manu_tella

XLDnaute Junior
Bonjour à tous,

J'utilise dans un code la fonction find et find next.
dans la boucle j’intègre une passe de check sur l'existence d'une variable dans une feuille...
ce contrôle semble perturber ma boucle findnext et je n'arrive pas a comprendre pourquoi.
je ne suis qu'un amateur, l'erreur va peut etre vous sauter aux yeux ;)

lorsque je supprime le check et que regarde avec des espions tout semble bien se passermais dès que j’intègre le check, le passage sur la ligne Set c = Sheets("Matrice").Rows(line).FindNext(c) donne c = "nothing"

je ne peux malheureusement pas donner le fichier car il est confidentiel

d'avance merci pour votre aide précieuse

voici un extrait du code,

VB:
Sub macro_manu()

Dim dmfi As String
Dim REQ, REQ_Status As String
Dim nb_REQ As Integer
Dim plage_req As Range
Dim I As Integer
Dim line, col As String
Dim Plage As Range, cell As Range
Dim trouve As Range
Dim c As Range
Dim feuille1 As Sheets
Dim croix As String
Dim j As String
Dim VAL, VAL_Status As String

dmfi = UserForm2.Frame3.ComboBox1.Value

I = 2
j = 10
k = 3


Set plage_req = Sheets("Matrice").Columns(3)

    Do While Sheets("Existing_links").Cells(I, 1) <> ""
        If Sheets("Existing_links").Cells(I, 1) = dmfi Then
        nb_REQ = nb_REQ + 1
        REQ = Sheets("Existing_links").Cells(I, 2)
        Sheets("DMFI_export").Cells(j, 1) = REQ
        REQ_Status = Sheets("Existing_links").Cells(I, 3)
        Sheets("DMFI_export").Cells(j, 2) = REQ_Status
        line = plage_req.Cells.Find(what:=REQ, lookat:=xlWhole).Row

            Set c = Sheets("Matrice").Rows(line).Find(what:="x", lookat:=xlWhole)
                            If c Is Nothing Then
                            'MsgBox ("la REQ " & REQ & " n'est pas couverte")
                            non_couverte = non_couverte + 1
                            Else
                            FirstAddress = c.Address
                                    Do
                                    VAL = Sheets("Matrice").Cells(3, c.column)
                                    VAL_Status = Sheets("Matrice").Cells(6, c.column)
                                        Set trouve = Sheets("DMFI_export").Rows(8).Find(VAL, LookIn:=xlValues)
                                            If trouve Is Nothing Then
                                            Sheets("DMFI_export").Cells(8, k) = VAL
                                            Sheets("DMFI_export").Cells(9, k) = VAL_Status
                                            Sheets("DMFI_export").Cells(j, k) = "x"
                                            nb_VAL = nb_VAL + 1
                                            k = k + 1
                                        Else
                                            nk = trouve.column
                                            Sheets("DMFI_export").Cells(8, nk) = VAL
                                            Sheets("DMFI_export").Cells(9, nk) = VAL_Status
                                            Sheets("DMFI_export").Cells(j, nk) = "x"
                                            nb_VAL = nb_VAL + 1
                                        End If
                                     Set c = Sheets("Matrice").Rows(line).FindNext(c)
                                     Loop While Not c Is Nothing And c.Address <> FirstAddress
                            End If
DoneFinding:
       j = j + 1
       End If
I = I + 1
    Loop
   
End Sub
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Bonjour manu_tella, BrunoM45;),

Tu peux rendre anonyme tes données et joindre le fichier.

Find fait une recherche dans une plage. Or ce n'est pas vraiment ce que tu fait avec la ligne ci-dessous sauf erreur de ma part.
Set c = Sheets("Matrice").Rows(line).Find(what:="x", lookat:=xlWhole)

un petit tuto sur ce lien https://www.commentcamarche.net/faq/36886-vba-recherche-de-donnees-la-methode-find

Bonne journée.
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

.Find ne peut être exécuter qu'une seule fois en même temps, tu le perds avec ton 2nd .find sur une autre plage.
A place du .findnext utilise à nouveau .find mais avec le paramètre After:=c, ce qui le remettra sur les rails.
eric
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 653
Messages
2 111 592
Membres
111 208
dernier inscrit
estalavista