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:
Range, propriété


Propriété Range telle qu'elle s'applique aux objets Application, Range et Worksheet.

Cette propriété renvoie un objet Range qui représente une cellule ou une plage de cellules.

expression.Range(Cell1, Cell2)

expression Obligatoire. Expression qui renvoie un des objets ci-dessus.

Cell1 Argument de type Variant obligatoire. Nom de la plage. Il doit s'agir d'une référence de type A1 dans le langage de la macro. Il peut inclure l'opérateur de plage (le signe deux-points), l'opérateur d'intersection (un espace) ou l'opérateur de liaison (une virgule). Il peut aussi inclure des signes dollar, mais ils sont ignorés. Vous pouvez utiliser un nom défini en local dans n'importe quel endroit de la plage. Si vous utilisez un nom, il est considéré comme appartenant au langage de la macro.

Cell2 Argument de type Variant facultatif. Cellule située dans le coin supérieur gauche et le coin inférieur droit de la plage. Il peut s'agir d'un objet Range qui contient une seule cellule, une colonne ou une ligne entière, ou il peut s'agir d'une chaîne qui désigne une seule cellule dans le langage de la macro.

Notes
Utilisée sans qualificateur d'objet, cette propriété est un raccourci de ActiveSheet.Range (renvoie une plage de la feuille active ; si la feuille active n'est pas une feuille de calcul, la propriété échoue).

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
Retour