Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Boucle pour effectuer une recherche dans un autre classeur

  • Initiateur de la discussion Initiateur de la discussion famu
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

famu

XLDnaute Occasionnel
Bonjour à tous,

J'utilise ce code lorsque je dois faire une recherche (exemple):

For i = 1 To Range("A65536").End(xlUp).Row
If Cells(i, 1) = "301001" And Cells(i, 3) = "1001" Then
Cells(1, 15) = Cells(i, 8)

et ça fonctionne très bien.

Le problème, aujourd'hui, est que je veux faire cette recherche dans un autre classeur et mettre le résultat dans le classeur où la macro se situe :

J'espère que j'ai été clair !
D'avance merci pour votre aide.
 
Re : Boucle pour effectuer une recherche dans un autre classeur

Bonjour
Affectez la feuille du classeur où vous avez à chercher par un Set dans une variable As Worksheet
et qualifiez de cette variable vos méthodes Range et Cells
Conseil: faites le aussi pour les feuilles du classeur qui porte la macro, mais là, pas besoin de les déclarer: elles sont déjà connues du projet VBA sous les noms de CodeName de ses feuilles.
Si le code est dans le module associé à la feuille, le mot clé Me convient très bien.
À+

Bonjour Tototiti. Oui aussi, l'essentiel est de toujours qualifier d'une façon ou d'une autre de leurs parents les collections dont on extrait un élément. C'est une règle d'or. Au pire ça documente le code même dans les rares cas ou Excel assume le bon par défaut.
 
Dernière édition:
Re : Boucle pour effectuer une recherche dans un autre classeur

Bonjour famu,

Le plus simple est d'ouvrir l'autre classeur
Est-il déjà ouvert ?
Si oui

Code:
With Workbooks("Autre Classeur.xls").Worksheets("Feuille1")
For i = 1 To .Range("A65536").End(xlUp).Row
If .Cells(i, 1) = "301001" And .Cells(i, 3) = "1001" Then
thisworkbook.Activesheet.Cells(1, 15) = .Cells(i, 8)
End If
Next
End With

Edit : Bonjour Dranreb
 
Re : Boucle pour effectuer une recherche dans un autre classeur

Le fichier étant ouvert (appelons le : toto)

windows("toto").activate
For i = 1 To Range("A65536").End(xlUp).Row
If Cells(i, 1) = "301001" And Cells(i, 3) = "1001" Then
Cells(1, 15) = Cells(i, 8)
 
Re : Boucle pour effectuer une recherche dans un autre classeur

mais là pour moi...j'ai pas tout compris !
Alors extrait de l'aide:
Remarque: il n'est pas souhaitable, pour le confort de l'utilisateur, d'activer la feuille où on doit aller chercher quelque chose, et inutile si on la spécifie correctement.

Remarque
dans les rares cas où Excel assume le bon
quand je disais cela, mon adjectif "rare" avait surtout un sens sarcastique: il assume souvent le bon, jusqu'à un beau jour où contre toute attente on découvre que le code peut aussi s'exécuter alors que la feuille n'est pas active. On ne le croirait pas, comme ça quand c'est quand on ferme le classeur. Parce qu'on doit être dessus forcément pour demander à le fermer. À oui ? et quand on quitte carrément Excel alors qu'on est sur un autre classeur ? Depuis que ça m'est arrivé mes Cells ou Range seront toujours précédé d'un point et donc d'un qualificateur (précisé à sa gauche ou bien de bloc With comme dans l'exemple de tototiti)
À+
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
414
Réponses
9
Affichages
678
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…