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
Bonjour
Un essai à tester, avec macro commentée.
Cela te convient-il ?
Bye !
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,
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!