1 pièce(s) jointe(s)
Problème utilisation FindNext
Bonjour,
J'ouvre ce poste suite à cette demande (https://www.developpez.net/forums/d1...ables-countif/).
En effet, moi et barrym78 bloquons sur l'utilisation du FindNext dans un certains cas. Plutôt que de vous présenter le problème en me basant sur le sujet de barrym78, je vais vous l'expliquer comme si c'était un nouveau sujet (dont la finalité est de résoudre le problème de barrym).
Voici donc le contexte, j'ai actuellement un fichier Excel avec ce tableau :
Pièce jointe 293443
L'objectif est de calculer la 3ème colonne du tableau à partir des valeurs de la 2ème colonne de la manière suivante :
-Si les valeurs de la colonne 2 présentent dans le premier intervalle A-B (c'est à dire de la ligne 2 à 12) valent 1, on les multiplie par 10 dans la colonne 3 .
-Si les valeurs de la colonne 2 présentent dans le deuxième intervalle A-B (c'est à dire la ligne 13 à 23) valent 1, on les multiplie par 20 dans la colonne 3.
Voici la manière dont j'ai procédé pour réaliser ceci :
-On cherche les lignes contenant la valeurs "B" dans la colonne 1 avec un Find dans tout le fichier.
-On cherche les lignes contenant la valeur 1 dans la colonne 2 avec un Find seulement jusqu'à la 1ère ligne trouvée avec le Find précédent (donc jusqu'à la fin du premier intervalle A-B).
-On fait un Loop pour appliquer le calcul à la colonne 3 sur toute les lignes trouvées avec le Find précédent.
-On garde en mémoire le numéro de la ligne trouvé avec le premier Find
-On recherche les lignes contenant la valeur 1 dans la colonne 2 avec un Find mais en partant de la ligne gardé en mémoire et jusqu'à la 2ème ligne trouvée avec le premier find.
-On fait un Loop pour appliquer le calcul à la colonne 3 sur toute les lignes trouvées avec le Find précédent.
-Et on applique ceci jusqu'à que l'on est fait toute les lignes trouvées dans le premier Find.
Voici ce que sa donne :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| Public Sub test()
Dim r As Range
Dim feuille As Worksheet
Dim r2 As Range
Dim adresse1 As String
Dim adresse2 As String
Dim nbLigne As Integer
Dim multiplicateur As Integer
Dim ligne As Integer
multiplicateur = 10
Set feuille = ActiveSheet
With feuille
nbLigne = .Cells(Rows.Count, 1).End(xlUp).Row
Set r = .Range("A1:A" & nbLigne).Find("B")
ligne = 1
If Not r Is Nothing Then
adresse1 = r.address
Do
Set r2 = .Range("B" & ligne & ":B" & r.Row).Find("1")
adresse2 = r2.address
If Not r2 Is Nothing Then
Do
.Cells(r2.Row, 3) = .Cells(r2.Row, 2) * multiplicateur
Set r2 = .Range("B" & ligne & ":B" & r.Row).FindNext(r2)
Loop While Not r2 Is Nothing And r2.address <> adresse2
End If
ligne = r.Row
multiplicateur = 20
Set r = .Range("A1:A" & nbLigne).FindNext(r)
Loop While Not r Is Nothing And r.address <> adresse1
End If
End With
End Sub |
Le problème survient à la ligne 45. En effet, mon "Set r" ne récupère pas la valeur "B" mais la valeur "1" ! J'ai l'impression que le FindNext ne repart pas du premier Find effectué sur la Range "r" mais du dernier Find effectué sur la Range "r2". Je ne trouve pas de solution à ce problème (que j'espère avoir bien expliqué) et vous demande donc vos lumières ! :)
Si vous avez des questions n'hésitez pas !