Objet requis méthode Find boucle

Bonjour à tous,

Je débute en VBA et malgré tous les conseils avisés que j'ai pu trouver sur ce site, j'ai toujours un programme qui ne tourne pas

A l’exécution j'ai le message d'erreur 424 "Objet requis" qui s'affiche, concernant la ligne de fin de boucle...

Je ne peux pas communiquer les données mais je vous explique rapidement. Il y a deux tableaux avec des noms de société et des volumes associés, et j'essaye de retrancher au premier tableau les volumes doublons, ceux qu'on retrouve dans les deux tableaux (pour qu'un volume ne soit pas comptabilisé deux fois pour une même société).

Mon code est le suivant :

Sub Doublon()

' Macro2
' Retranche les doublons de volume présents dans NEG du tableau PROD

Dim num_lastrow_NEG As Integer
Dim num_lastrow_PROD As Integer

num_lastrow_NEG = Sheets("NEG").Range("NEG").Rows.Count
num_lastrow_PROD = Sheets("PROD").Range("PROD").Rows.Count

Sheets("NEG").Range("K2") = num_lastrow_NEG
Sheets("NEG").Range("K3") = num_lastrow_PROD

Dim i As Integer
Dim A As Variant
Dim B As Variant
Dim CB As Integer
Dim Premier As Variant
Dim Ad As Variant

For i = 1 To num_lastrow_NEG 'boucle qui parcourt le tableau NEG

    Set A = Sheets("NEG").Range("NEG").Cells(i, 7) 'Nom de la société dans tableau NEG

    Set B = Sheets("PROD").Range("PROD").Columns(3).Find(What:=A, LookIn:=xlValues, LookAt:=xlPart) 'recherche dudit nom dans le tableau PROD

        If Not B Is Nothing Then

        Premier = B.Address
        Ad = B.Address

            Do
            CB = B.Column

                If Sheets("PROD").Range("PROD").Cells(CB, 1) = Sheets("NEG").Range("NEG").Cells(i, 1) And _
                Sheets("PROD").Range("PROD").Cells(CB, 2) = Sheets("NEG").Range("NEG").Cells(i, 2) Then 'deux autres données doivent correspondre entre les deux tableaux : celles des colonnes 1 et 2

                    Sheets("PROD").Range("PROD").Cells("CB", 7) = Sheets("PROD").Range("PROD").Cells("CB", 7) - Sheets("NEG").Range("NEG").Cells(i, 8) 'retranche le volume NEG au volume PROD

                    Exit Do

                Else
                B = Sheets("PROD").Range("PROD").Columns(3).FindNext(B) 'Si les conditions ne sont pas respectée, recherche à nouveau de A dans la colonne 3 du tableau PROD
                Ad = B.Address

                End If

            Loop While Not B Is Nothing And Ad <> Premier 'Là est l'erreur "Objet requis"

        End If

Next

End Sub

Est-ce que quelqu'un voit le problème ? Vous me sauveriez la vie

Je vous remercie !

Bonne journée,

Bonjour,

3 lignes plus haut : Set B =... serait mieux que B = ...

(B étant déclaré comme Variant au lieu de Range, B = ... fonctionne et prend la valeur de la cellule si trouvée...

A et B devraient être déclarés comme Range, et Ad et Premier comme String)

Il y a aussi d'autres interrogations :

CB est initialisée comme numéro de colonne (B.Column)

Elle est utilisée ligne suivante en position de numéro de ligne !? Peut-être est-ce voulu, mais cela mérite d'être signalé au cas où

d'autant plus que à la ligne qui suit, "CB" est mis ainsi, toujours en position de numéro de ligne !!!

Là je doute fort qu'une ligne numérotée "CB" puisse être trouvée !

Cordialement.

Merci MFerrand pour cette réponse !

Décidément beaucoup d'erreurs... En effet CB=B.Row !!

J'ai changé tout ça, ça marche nickel maintenant, merci beaucoup

Bonne journée !

Pas si résolu que ça en fait ! Le programme tourne certes, mais cela prend un temps fou, comme si les boucles tournaient plus longtemps qu'il ne le faut... Et puis cela ne traite pas correctement le tableau. Parfois, des doublons ne sont pas mis en évidences par la macro.

Pour la tester, j'ai coloré les cases "à traiter", c'est à dire les lignes sur lesquelles doivent s'effectuer le dédoublonnage.

Parfois, des cases ne sont pas colorés, donc pas traitées alors que l'on retrouve bien le nom de la société dans les deux tableaux (=doublon), et que les deux conditions sont respectées (année du contrat et couleur identiques sur les deux lignes concernées par le doublon de nom).

Voici le code modifié après les conseils de MFerrand avec le test "case colorée" :

Sub DoublonTOTAL()
'
' Macro18
' Retranche les doublons de volume présents dans NEG du tableau PROD

Dim num_lastrow_NEG As Integer
Dim num_lastrow_PROD As Integer

num_lastrow_NEG = Sheets("NEG").Range("NEG").Rows.Count
num_lastrow_PROD = Sheets("PROD").Range("PROD").Rows.Count

Sheets("NEG").Range("K2") = num_lastrow_NEG
Sheets("NEG").Range("K3") = num_lastrow_PROD

Dim i As Integer
Dim A As Range
Dim B As Range
Dim lB As Integer
Dim Premier As String
Dim Ad As String

For i = 1 To num_lastrow_NEG 'boucle qui parcourt le tableau négoce

    Set A = Sheets("NEG").Range("NEG").Cells(i, 7)

    Set B = Sheets("PROD").Range("PROD").Columns(3).Find(What:="*A*", LookIn:=xlValues, LookAt:=xlPart)

        If Not B Is Nothing Then

        Premier = B.Address
        Ad = B.Address

            Do
            lB = B.Row

                If Sheets("PROD").Range("PROD").Cells(lB, 1) = Sheets("NEG").Range("NEG").Cells(i, 1) And _
                Sheets("PROD").Range("PROD").Cells(lB, 2) = Sheets("NEG").Range("NEG").Cells(i, 2) Then

                Sheets("PROD").Range("PROD").Cells(lB, 7).Interior.ColorIndex = 6 'test couleur : colorée la case concernée par le doublon dans le tableau PROD
                Sheets("NEG").Range("NEG").Cells(i, 7).Interior.ColorIndex = 7 'test couleur NEG

                    ' code qui dans la version finale prendra la place du test couleur : Sheets("PROD").Range("PROD").Cells(lB, 7) = Sheets("PROD").Range("PROD").Cells(lB, 7) - Sheets("NEG").Range("NEG").Cells(i, 8)

                    Exit Do

                Else
                Set B = Sheets("PROD").Range("PROD").Columns(3).FindNext(B)
                Ad = B.Address           

                End If

            Loop While Not B Is Nothing And Ad <> Premier

        End If

Next

End Sub

Merci d'avance de votre aide !

Bonsoir,

Je te rappelle que je n'ai fait qu'indiquer des sources réelles ou potentielles d'erreurs. Je n'ai rien proprosé, et je ne sais pas ce que doit faire ta macro !

Cordialement.

Rechercher des sujets similaires à "objet requis methode find boucle"