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 :

Nom : barrym.PNG
Affichages : 257
Taille : 9,7 Ko

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !