VBA: recherche dans autre fichier, erreur 424

Résolu/Fermé
F-D - 14 mai 2012 à 17:30
 clark...kent - 16 mai 2012 à 10:35
Bonjour à tous,

J'ai une macro qui demande à l'utilisateur d'entrer un certain nombre d'informations grâce à des boîtes de dialogue, et ces infos sont mises dans des cellules sur ma page et copiées dans un autre onglet. Le problème est que je voudrais que la première information entrée par l'utilisateur (à savoir une référence de pièce) soit "vérifiée" dans un autre fichier.
En clair, l'utilisateur entre, dans le fichier A, la référence "123456A" et la macro va chercher dans le fichier B si elle existe. Si oui, on passe à l'action 1, sinon on passe à l'action 2.
A partir du fichier de base et de différents forum, je suis arrivé à :


Sub Etiquette()

Dim Message, Title, Default, MyValue

Message = "1 - Entrez la référence"
Title = "reference"    .
Default = Cells(1, 4).Value     
MyValue = InputBox(Message, Title, Default)

If MyValue & "" = "" Then MsgBox "Saisie annulée": Exit Sub
              
Dim Liste As Range             
Dim Source, Onglet, Cell As Range

Source = "C:\Fichier B.xls"
Onglet = "Feuil1"

Set Cell = Range("A2:A250")
Liste = Source.Onglet.Cell.Find(MyValue, lookat:=xlWhole)

If Liste Is Nothing Then
    Action 1
    Else
    Action 2
End If...



Quand je lance la macro, j'ai une "erreur d'exécution '424' : Objet requis" sur la ligne :
Liste = Source.Onglet.Cell.Find(MyValue, lookat:=xlWhole)

Je ne comprends pas ce qui ne fonctionne pas. Comment faire cette recherche pour que cela fonctionne ?

Petit plus : peut-on, de manière simple, effectuer cette recherche sans ouvrir le fichier Source ?


Merci

7 réponses

Clark...kent Messages postés 44 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 mars 2020 2
Modifié par Clark...kent le 15/05/2012 à 14:07
Bonjour,

Une idée peut être

With Workbooks.Open ("C:\Documents and Settings\esoboban\My Documents\Fichier B.xls")

ou sinon

Chemin = "C:\Documents and Settings\esoboban\My Documents\"
Fichier = "Fichier B.xls"
With Workbooks.Open(Chemin & Fichier)


Bon courage
2
Bonjour,

Le fichier doit être ouvert. Vous auriez du écrire:
Source = "Fichier B.xls"
Onglet = "Feuil1"
Set Liste = Workbooks(Source).Worksheets(Onglet).Range("A2:A250").Find(MyValue, lookat:=xlWhole)


Bonne suite
1
Merci pour votre réponse. Mais il y a un nouveau problème, toujours sur la même ligne :
"erreur d'exécution 438 : propriété ou méthode non gérée par cet objet"

Je n'arrive pas à comprendre d'où ça vient. J'ai été voir d'autres discussions sur ce sujet mais je ne trouve pas...
0
Re,
pouvez vous mettre votre fichier sur cijoint.com afin de regarder de plus près?

A+
0

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

Posez votre question
Au départ, je me suis retrouvé avec une "erreur d'execution '91' : variable objet ou variable de bloc With non définie", sur la ligne :

Onglet = "Feuil1"


Ensuite, suite à des discussions que j'ai lu, je suis arrivé à :

Dim Liste As Range
Dim Source As Workbook
Dim Onglet As Worksheet

Set Source = Workbooks("C:\Documents and Settings\esoboban\My Documents\Fichier B.xls")
Set Onglet = Source.Worksheets("Feuil1")
Set Liste = Source.Onglet.Range("A2:A250").Find(MyValue, lookat:=xlWhole)


Et là ça bloque à la ligne en gras avec une "erreur d'execution '9' : l'indicce n'appartient pas à la sélection".

Je suis vraiment perdu...

Voici le fichier :
http://cjoint.com/?BEpmlUHXDej

Merci beaucoup pour votre aide.


F-D
0
Bonjour,

Effectivement, ça fonctionne très bien !

Par contre, un nouveau problème survient. Dans le fichier que j'ai mis en lien, j'ai oublié de faire revenir la macro sur le Fichier A pour écrire l'information donc elle l'a met dans le Fichier B, activé par la recherche.
J'ai donc simplement rajouté
Workbooks("C:\Documents and Settings\esoboban\My Documents\Fichier A.xls"). 
pour indiquer le bon fichier mais ça me donne une "erreur d'execution '9' : l'indice n'appartient pas à la sélection" sur la ligne en gras

If Liste Is Nothing Then
    Workbooks("C:\Documents and Settings\esoboban\My Documents\Fichier A.xls").Worksheets("Feuil1").Range("B2") = "Pièces non-traitées": Worksheets("Feuil1").Range("F8") = ""    Else
    Workbooks("C:\Documents and Settings\esoboban\My Documents\Fichier A.xls").Worksheets("Feuil1").Range("B2") = "Pièces traitées": Worksheets("Feuil1").Range("F8") = "X"
End If



Par anticipation, je cherche à fermer le Fichier B (sans l'enregistrer) juste après le End If car je n'en ai plus besoin, mais je ne sais pas comment faire (avant de voir que la référence était écrite sur le mauvais fichier, j'ai essayé
workbook(("C:\Documents and Settings\esoboban\My Documents\Fichier B.xls").Close(SaveChanges=False)
et avec
With Workbook.Close("C:\Documents and Settings\esoboban\My Documents\Fichier B.xls") SaveChanges=False
, avec ou sans "s" à workbook et rien ne marche...

Désolé, je débute en vba et j'ai l'obligation de réussir cette macro !

F-D
0
Ca y est !!!

J'ai simplement fermé mon Fichier B avant la condition :

ActiveWorkbook.Saved = True
ActiveWorkbook.Close


En effet, Liste est déjà initialisé donc je n'ai pas besoin de garder le fichier ouvert, et donc pas besoin de lui préciser dans quel classeur écrire vu qu'il n'y en a qu'un d'ouvert.

Merci Paf et Clark...kent pour votre aide.

A+

F-D
0
Content pour toi.

Bonne suite
0
De rien, on m'a aidé ici alors je renvoi l'ascenseur!
0