Error91 avec FindNext et deux boucles imbriquées

Pierre Bastres

XLDnaute Nouveau
Bonjour,
j'ai écrit la macro ci-jointe:
le principe est de faire une première boucle pour sélectionner chacune des lignes qui m'intéressent grâce à un critère sur la colonne Z en utilisant la méthode Find:
une deuxième boucle imbriquée teste la valeur de la cellule de la même ligneet de la colonne V et attribue un nombre en fonction du test dans la colonne W.
Une erreur 91 apparaît 'erreur d'execution variable ou objet etc.." La variable rngElligible perd sa valeur lors du FindNext.
Si je mets la partie du code entre les étoiles en commentaire cela fonctionne.
Merci de votre aide.
P.
 

Pièces jointes

  • ESSAI BOUCLES IMBRIQUEES FindNext.xlsm
    111.4 KB · Affichages: 25

Lone-wolf

XLDnaute Barbatruc
Bonjour Pierre, Gerard :)


@Pierre Bastres

Si vous le permettez, un exemple.

VB:
Set plage = Feuil1.Range("z2:z" & dernièreligne)

Set cel = plage.Find(Valeur à chercher, , xlValues)

If Not cel is Nothing Then
adr = cel.address

Do

'Ici ce quelle doit faire

Set cel = plage.FindNext(cel)
Loop While Not cel Is Nothing And cel.Address <> adr
End If
 
Dernière édition:

Pierre Bastres

XLDnaute Nouveau
Bonjour Lone-Wolf,
merci de ton aide.
J'ai vérifié, et il me semble que mon code suit exactement votre structure, qq chose m'échappe peut être.
QQ chose qui m'interpele: si je neutralise la partie de code entre les étoiles, l'espion rngEligible.address prend bien les valeurs voulues, et ne prend pas la valeur "nothing".

P.
 

Lone-wolf

XLDnaute Barbatruc
Re Pierre

@Pierre Bastres : Set rngEligible= .FindNext(rngEligible), ici il manque la plage avant le point, à moins d'avoir mis With la plage End With.

VB:
Sub test()
    Set plage = Feuil1.Range("z2:z" & dernièreligne)

    With plage
        Set cel = .Find(Valeur à chercher, , xlValues)

        If Not cel Is Nothing Then
            adr = cel.Address
            Do
                'Ici ce quelle doit faire
                Set cel = .FindNext(cel)
            Loop While Not cel Is Nothing And cel.Address <> adr
        End If
    End With
End Sub
 
Dernière édition:

job75

XLDnaute Barbatruc
Re, salut Lone-wolf,

Lone-wolf ton code est aussi mauvais que celui de Pierre Bastres :rolleyes:

J'ai parlé d'une boucle For/Next alors voyez celui-ci :
Code:
Sub Test()
Dim c As Range
For Each c In [Tableau2[Eligibilite FacturationDirecteProducteurClient]]
    If c = "eligible facture mensuelle directe prod-client" Then c(1, -2) = c(1, 0) + 1
Next
End Sub
Si ce n'est pas tout à fait ce que vous voulez adaptez-le.

A+
 

job75

XLDnaute Barbatruc
Re,

Juste pour Lone-wolf, For Each est un peu plus rapide :
Code:
Sub a()
Dim t, c As Range, x$
t = Timer
For Each c In [A1:A1000000]
x = c
Next
MsgBox Timer - t '1,95 seconde chez moi
End Sub

Sub b()
Dim t, i&, x$
t = Timer
For i = 1 To [A1:A1000000].Count
x = Cells(i, 1)
Next
MsgBox Timer - t '3,3 secondes chez moi
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 930
Membres
103 984
dernier inscrit
maliko67