VBA: recherche dans autre fichier, erreur 424
Résolu
F-D
-
clark...kent -
clark...kent -
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é à :
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
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
A voir également:
- VBA: recherche dans autre fichier, erreur 424
- Excel compter cellule couleur sans vba - Guide
- Dépassement de capacité vba ✓ - Forum Excel
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
7 réponses
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
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
Bonjour,
Le fichier doit être ouvert. Vous auriez du écrire:
Bonne suite
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
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...
"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...
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 :
Ensuite, suite à des discussions que j'ai lu, je suis arrivé à :
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
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
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é
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é
Désolé, je débute en vba et j'ai l'obligation de réussir cette macro !
F-D
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
Ca y est !!!
J'ai simplement fermé mon Fichier B avant la condition :
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
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