Erreur d'objet requis dans une méthode Find

Résolu
Etant à nouveau en détresse dans mes macros, je refais appel à vos services... Je crains que ce que j'avais envisagé ne soit trop complexe, mais j'ai bon espoir de continuer et de persévérer...

Je rencontre une erreur d'objet requis en utilisant une méthode FIND. Mon codage est ci-dessous:

Worksheets("Suivi soudeurs " & secteur_etude).Activate
With Worksheets("Suivi soudeurs " & secteur_etude).Range("Tx" & secteur_etude & "1")

Set ligne = .Find(soudeur_etude, LookIn:=xlValues, Lookat:=xlWhole).Row (La ligne qui pose problème...)

Je sais que FIND ne s'applique qu'à un Range ou un Worksheet, ce que j'ai respecté. J'ai déclaré ligne en temps qu'Integer, et il me retourne toujours un "Objet requis" malgré tout cela...

Si quelqu'un a des explications et des conseils à me donner, je l'en remercie...

9 réponses

  1. Bonjour,

    pour cette erreur:

    Set ligne = .Find(soudeur_etude, LookIn:=xlValues, Lookat:=xlWhole).Row
    Enlevez .row

    pour avoir la ligne: ex---> Lig=ligne.row

    ceci pour la methode que vous avez utilisee.

    Bonne suite
    0
    1. Contributeur
      Bonjour,

      Tu n'as pas besoin de "set "

      si tu nommes les param^tres, il faut tous les nommer

      Range("Tx" & secteur_etude & "1") est une seule cellule? si oui, pas besoin de Find....
      sinon, attention car la recherche comme après la cellule indiquée par le paramètre "after:="

      ligne = .Find(what:=soudeur_etude, LookIn:=xlValues, Lookat:=xlWhole).Row

      donc, difficile d'^tre sûr sans savoir ce que contient "secteur_etude"
      0
      1. Contributeur
        Bonjour à tous,

        autre élément : qu'est-ce que soudeur_etude ?
        une variable ? de quel type ?
        un nom défini dans le classeur ? mettre : [soudeur_etude]

        eric
        0
        1. Merci beaucoup! Tout fonctionne en enlevant le Set, j'avance plutôt bien et sans encombre. Encore une boucle For à faire (mon Dieu mon Dieu j'ai peur...) et ce sera bon!

          Merci pour les conseils, toujours bons à prendre! soudeur_etude est une variable String. L'utilisateur choisit un soudeur dans une liste prédéfinie, et jusqu'ici mon programme sert à récupérer des relevés de qualité de ce soudeur situés sur un autre fichier qui ressemble de près ou de loin à une usine à gaz.

          Une fois mes données récupérées, je les envoie dans différents graphiques et c'est bon!
          0
          1. Bon, j'ai avancé plutôt convenablement, mais je n'arrive pas à gérer la dernière étape de cette partie du programme...

            Pour l'instant j'ai une boucle For qui va chercher les données pour les 12 parties de mon tableau (une partie par mois, évidemment). Cependant, certains soudeurs ne viennent sur un produit qu'à partir d'un certain mois. Je dois donc imbriquer une boucle If dans ma boucle For.

            La boucle If vérifie si ligne est vide ou non, et si elle est vide, passe au i suivant. Et c'est là que ça cloche, je n'arrive pas à renvoyer à la boucle For après le If. Je poste mon code...

            For i = 1 To 12

            Windows(FichierSuivi).Activate
            Worksheets("Suivi soudeurs " & secteur_etude).Activate
            Range("Tx" & secteur_etude & i).Activate
            With Worksheets("Suivi soudeurs " & secteur_etude).Range("Tx" & secteur_etude & i)

            Set ligne = .Find(what:=soudeur_etude, LookIn:=xlValues, Lookat:=xlWhole)

            If Not ligne Is Nothing Then

            Else: Next [C'est ici que le problème intervient. Il faudrait qu'il sorte de la boucle If, pour repartir sur le for mais pas moyen malgré plusieurs écritures différentes...]
            End If

            lignetrouve = ligne.Row

            Range(Cells(lignetrouve, 3), Cells(lignetrouve, dercol)).Select
            Selection.Copy

            Windows("SUIVI DES FUITES Auto").Activate

            Worksheets("Test").Activate
            Range("Mois" & i).Select
            Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

            Next
            0
            1. Bonjour,

              Essaye comme ça

              For i = 1 To 12

              Windows(FichierSuivi).Activate
              Worksheets("Suivi soudeurs " & secteur_etude).Activate
              Range("Tx" & secteur_etude & i).Activate
              With Worksheets("Suivi soudeurs " & secteur_etude).Range("Tx" & secteur_etude & i)

              Set ligne = .Find(what:=soudeur_etude, LookIn:=xlValues, Lookat:=xlWhole)

              If Not ligne Is Nothing Then

              lignetrouve = ligne.Row
              Range(Cells(lignetrouve, 3), Cells(lignetrouve, dercol)).Select
              Selection.Copy
              Windows("SUIVI DES FUITES Auto").Activate
              Worksheets("Test").Activate
              Range("Mois" & i).Select
              Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
              :=False, Transpose:=False

              End If

              Next
              0
              1. Ca fonctionne parfaitement, et j'ai l'impression d'avoir compris quelques trucs et pris quelques automatismes, puisque j'ai par la suite repéré quelques erreurs, et terminé cette première partie de travail! Mon chef va être content! :)

                Un immense merci... Je risque d'avoir encore besoin de vos services par la suite, même si je vais faire de mon mieux pour y arriver de moi même!
                0
                1. Contributeur
                  Bonjour,

                  et si tu me disais enfin ce qu'il y a dans la variable "secteur_etude"

                  fais un choix: soit tu répond aux questions de ceux qui essaient de t'aider, soit tu te dem... tout seul

                  quant à la macro, il ya beaucoup de choses à reprendre; donc tu vois

                  0
                  1. J'ai repondu dans un message précédent, j'aurais pu l'écrire de manière plus claire, désolé...

                    La variable "soudeur_etude" récupère les initiales du soudeur sélectionné par l'utilisateur de la macro, qui sont ensuite recherchées dans la base de données.

                    Pour répondre aux autres questions (en effet j'y avais pas répondu... Désolé...) le Range ne correspond pas à une seule cellule, d'où la nécessité du Find (selon moi...)

                    Pour la recherche de la ligne, je suis obligé de placer le Set, sans quoi j'ai une erreur d'objet requis...
                    0