Erreur d'objet requis dans une méthode Find

Résolu/Fermé
Aerojeff Messages postés 38 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 13 décembre 2012 - 12 déc. 2012 à 11:29
Aerojeff Messages postés 38 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 13 décembre 2012 - 13 déc. 2012 à 12:29
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

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
12 déc. 2012 à 12:06
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
12 déc. 2012 à 13:42
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
12 déc. 2012 à 14:34
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
Aerojeff Messages postés 38 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 13 décembre 2012
12 déc. 2012 à 15:38
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Aerojeff Messages postés 38 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 13 décembre 2012
13 déc. 2012 à 11:15
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
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
Aerojeff Messages postés 38 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 13 décembre 2012
13 déc. 2012 à 12:14
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
13 déc. 2012 à 12:18
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
Aerojeff Messages postés 38 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 13 décembre 2012
13 déc. 2012 à 12:29
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