Erreur d'objet requis dans une méthode Find

Résolu
Aerojeff Messages postés 41 Statut Membre -  
Aerojeff Messages postés 41 Statut Membre -
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. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  4. Aerojeff Messages postés 41 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Aerojeff Messages postés 41 Statut Membre
     
    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
  7. Yoda
     
    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
  8. Aerojeff Messages postés 41 Statut Membre
     
    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
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  10. Aerojeff Messages postés 41 Statut Membre
     
    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