Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Error91 avec FindNext et deux boucles imbriquées

  • Initiateur de la discussion Initiateur de la discussion Pierre Bastres
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

Pierre Bastres

Guest
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

Bonjour Pierre Bastres,

Votre macro ne tient pas du tout la route.

Au lieu de boucles Do/Loop imbriquées (quelle idée !) utilisez une seule boucle For/Next sur la colonne Z.

Et je ne parle pas du reste...

A+
 
Bonjour,

Effectivement la macro ne fonctionne pas.
J'essaierai la boucle For.
Sur la macro existante, même si elle est horrible, savez-vous pq j'ai l'erreur 91?
Si vous avez d'autres suggestions qui peuvent aider, ne vous privez pas.
Merci d'avance.
P.
 
Ok, je vois.
J'ai mis un espion sur la variable rngEligible: elle prend la valeur "nothing" lors de Set rngEligible= .FindNext(rngEligible)
je ne comprends pas pq, pouvez-vous m'éclairer?
Merci.
P.
 
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:
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.
 
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:
Re, salut Lone-wolf,

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

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+
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

N
Réponses
8
Affichages
2 K
M
Réponses
10
Affichages
2 K
Mathilde04
M
D
Réponses
6
Affichages
5 K
Flow0812
F
N
Réponses
2
Affichages
695
N
M
Réponses
3
Affichages
1 K
MarcTer
M
B
Réponses
3
Affichages
1 K
B
A
Réponses
15
Affichages
9 K
anthony0903
A
M
Réponses
3
Affichages
12 K
Martialou
M
S
Réponses
0
Affichages
1 K
S
T
Réponses
5
Affichages
17 K
Taroohn
T
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…