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 :
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 :
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 !
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
Si vous avez des questions n'hésitez pas !
Partager