Problème FindNext
Bonjour le forum,
Je dispose de la macro suivante insérée dans un UserForm:
Private Sub CommandButton3_Click() 'Bouton Valider
'modif_duree
If TextBox1 = "" Then
Exit Sub
End If
Dim S As Integer, derLig As Integer, i As Integer, f As Worksheet, a As Integer, r As Range, nbOccurence As Variant, address As String, lignePrec As Integer, r2 As Range, address2 As String, ligneRecep As Integer
Set f = ActiveWorkbook.Sheets("Feuil1")
With f
derLig = f.Cells(Rows.Count, 4).End(xlUp).Row
Set r2 = f.Range("A1:A" & derLig + 1).Find("Réception")
ligneRecep = 1
If Not r2 Is Nothing Then
address2 = r2.address
Do
'Compte le nombre total de tâches avec le code Super
nbOccurence = Evaluate("COUNTIF(D" & ligneRecep + 1 & ":D" & r2.Row & ",""Super"")")
Set r = f.Range("D" & ligneRecep + 1 & ":D" & r2.Row + 1).Find("Super")
f.Cells(r.Row, 3) = f.Cells(r.Row, 3) + ((1 / (nbOccurence * 3)) * Val(TextBox1))
lignePrec = 1
'On garde en mémoire l'adresse de la première ligne
address = r.address
Set r = f.Range("D" & ligneRecep + 1 & ":D" & r2.Row + 1).FindNext(r)
If Not r Is Nothing Then
Do
f.Cells(r.Row, 2) = f.Cells(r.Row, 2) + ((lignePrec / (nbOccurence * 3)) * Val(TextBox1))
f.Cells(r.Row, 3) = f.Cells(r.Row, 3) + (((lignePrec + 1) / (nbOccurence * 3)) * Val(TextBox1))
'On récupère le numéro de la ligne actuel
lignePrec = lignePrec + 1
'On passe à la ligne suivante
Set r = f.Range("D" & ligneRecep + 1 & ":D" & r2.Row + 1).FindNext(r)
'Et on fait ceci tant que l'on a des ligne a étudié ou tant que l'on est pas retourné à la première ligne étudiée
Loop While Not r Is Nothing And r.address <> address
End If
ligneRecep = r2.Row
Set r2 = f.Range("A1:A" & derLig + 1).FindNext(r2)
Loop While Not r2 Is Nothing And r2.address <> address2
End If
End With
TextBox1 = ""
repartition.Hide
End Sub
La macro me permet d'ajouter des valeurs à mes tâches en fonction du code qu'elles contiennent dans la colonne 4.
L'idée serait que la macro s'exécute indépendamment dans la partie 1 et la partie 2 (voir images jointes).
Le but c'est qu'elle s'exécute normalement dans la partie 1 de la tâche Gros oeuvre à la tâche Réception puis une fois à la tâche Réception ou à la deuxième tâche Gros oeuvre, qu'elle se réinitialise, qu'elle s'exécute sans prendre en compte les informations de la partie 1.
J'ai donc utiliser la fonction Find cependant, je rencontre un problème avec le FindNext. La macro n'arrive pas à trouver la tâche "Réception" suivante et m'indique que r2 = Nothing.
Je n'arrive pas à savoir d'où pourrait venir le problème.
Avez-vous une idée?
Je vous remercie d'avance
- Messages
- 308
- Excel
- 2016
- Inscrit
- 15/06/2017
- Emploi
- Bénéficiaire de la sécurité de la vieillesse
Bonjour barrym78, bonjour le forum,
Erreur...
Joseph
- Messages
- 308
- Excel
- 2016
- Inscrit
- 15/06/2017
- Emploi
- Bénéficiaire de la sécurité de la vieillesse
Bonjour barrym78, bonjour le forum.
À la fin de la macro, change :
Set r2 = f.Range("A1:A" & derLig + 1).FindNext(r2)
Loop While Not r2 Is Nothing And r2.address <> address2
Pour ...
If ligneRecep >= derLig Then Exit Sub ' termine la macro
Set r2 = .Range("A" & ligneRecep & ":A" & derLig + 1 - 1).Find(r2)
Loop
À voir si ça convient ...
Joseph
Super, je viens de faire un test et ça marche !
Merci pour ton aide Joseph