VBA - Boucle pour copier les résultats d'une recherche

Bonjour à tous,

Je me lance dans la création de macro VBA et dans mon premier projet, je tombe déjà sur un os... C'est un cas projet qui me motive à me lancer dans le VBA et j'aimerai arriver jusqu'au bout malgré la difficulté pour un novice comme moi. J'ai déjà fait plusieurs recherche sur le forum et internet mais malheureusement je n'arrive pas à trouver la bonne marche à suivre malgré de multiples tentatives.

Voici le but de la macro que j'aimerai créé : Trouver dans une sélection de cellules, les cellules dont la valeur est égale à 2,3,4 et ou 5. Lorsqu'une cellule est trouvée, sélectionner la cellule de la ligne supérieure (-1,0) afin de la copier et de la coller à la deuxième feuille nommée "Double".

Dans l'état actuel, j'ai commencé par chercher les cellules dont la valeur = 2. Je compte recopier le code pour les valeurs 3, 4 et 5 afin de simplifierla difficulté du code.

Je me rend compte qu'une boucle devrait être utilisée afin de réduire considérablement le code. Voici le code que j'ai actuellement créé :

Sub Listedemesdoubles()

' On va rechercher la premiere valeur qui est en double

Cells.Find(What:="2", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _

xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _

, SearchFormat:=False).Activate

' On va copier le numéro de l'image qui est en double

ActiveCell.Offset(-1, 0).Copy

' On va coller la cellule dans la feuille double à l'emplacement A1

Sheets("Double").Activate

Range("A1").PasteSpecial

' On va réactiver la première feuille

Sheets("Collection").Activate

' On va refaire la recherche

Cells.Find(What:="2", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _

xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _

, SearchFormat:=False).Activate

' On reprend le numéro au dessus

ActiveCell.Offset(-1, 0).Copy

' On va coller la cellule dans la feuille double à l'emplacement A1

Sheets("Double").Activate

Range("A1").Offset(0, 1).PasteSpecial

' On va réactiver la première feuille

Sheets("Collection").Activate

End Sub

Pouvez-vous me conseiller dans la marche à suivre pour la réalisation de cette macro?

Je joint mon fichier afin que vous compreniez mieux l'utilité de cette macro.

Je vous remercie d'avance,

Corentin

33collection.xlsm (22.95 Ko)

Bonjour

Un essai à tester, avec macro commentée.

Cela te convient-il ?

Bye !

119collection.xlsm (28.98 Ko)

Bonjour,

Un tout grand merci pour la macro et un tout grand merci x2 pour les commentaires, qui sont à mes yeux tout aussi important!!!

Désolé pour le temps de réponse, mais je n'ai pas eu l'occasion d'analyser et de comprendre la macro avant ce matin.

En ce qui concerne la macro, elle fait bien le travail ! Malheureusement elle rajoute des lignes de 0 et de 1 qui sont "indésirables". (Voir capture d'écran en pièce jointe).

Je n'arrive pas à comprendre précisément d’où vient le problème. Je pense qu'il provient des cellules recherchées :

num = Range(Cells(2, 2), Cells(2, Cells(2, Columns.Count).End(xlToLeft).Column))    'Liste des numéros à rechercher

    For n = 1 To UBound(num, 2)                                             'On va passer chaque numéro à chercher
        Set cell = plage.Find(num(1, n), LookIn:=xlValues)                  'On recherche ce numéro dans la plage
        If Not cell Is Nothing Then                                         'Si on le trouve...

J'ai essayé de fixer la valeur de num = "2" pour simplifier mais cela ne fonctionne pas. J'ai essayé de définir num As Integer mais j'ai eu des erreurs de compilation... Tout en étant pas certains que ces zéros proviennent bien des valeurs recherchées.

Pouvez-vous me donner des pistes pour ce problème? La deuxième solution que j'envisage est de supprimer les cellules dont la valeur = 0 et valeur = 1. Mais pour bien faire j'aimerai comprendre résoudre le problème dans les lignes de codes et non l'esquivé.

MAJ : Après des manipulations, il s'avère que quand j'exécute la macro "Listedesdoubles" avant la macro "Résultat", cela fonctionne sans les 0 et 1. J'aimerai comprendre pourquoi afin de pouvoir regrouper les macros. Cela provient-il de la sélection des cellules que fait la macro "Listedesdoubles" ?

Je vous remercie d'avance pour vos suggestions,aides.

Cordialement,

ligne0
20collection2.xlsm (29.98 Ko)

Bonjour

Nouvelle version.

Bye !

61collection4.xlsm (27.19 Ko)

Super, merci beaucoup pour ta réponse et les commentaires dans le code!

Je vais pouvoir ré-avancer dans mon projet!

Il me reste une petite question, est-il possible de définir les valeurs à recherchées "en dur" dans le code ?

Le but de cette opération n'est d'avoir que mes doubles sur la feuilles Excel double afin de pouvoir l'exporter par la suite.

Je vais regarder de mon côté mais je le signale ici afin de ne pas "clôturer" le sujet.

Encore un tout grand merci pour l'aide déjà apportée en tout cas!

Nouvelle version.

Bye !

147collection5.xlsm (26.17 Ko)
Rechercher des sujets similaires à "vba boucle copier resultats recherche"