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

3

Bonjour barrym78, bonjour le forum,

Erreur...

Joseph

Bonjour Joseph,

ça m'affiche Erreur d'exécution '91': Variable objet ou variable de bloc With non définie

5 6

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

Rechercher des sujets similaires à "probleme findnext"