Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1925 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA-Excel] Copier-coller sélection à partir d'une recherche

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA-Excel] Copier-coller sélection à partir d'une recherche

n°2245443
darksnyper
Nikorosif pour les intimes
Posté le 09-12-2014 à 11:30:42  profilanswer
 

Salut les hfriens!
Archi débutant sur VBA j'ai un besoin urgent pour mon travail d'utiliser une macro pour récupérer des données dans une feuille excel et les recoller dans une autre.
L'idée c'est que j'ai une base en vrac dans laquelle il me faut retrouver des références et une fois retrouvé je dois copier des valeurs de colonnes correspondantes dans une autre feuille ou se trouve ma base ordonnée.
J'ai commencé à faire un code mais j'ai des erreurs ou alors j'ai pas le résultat attendu. Le probleme c'est que je connais pas les syntaxes donc malgré quelques recherches je galere pas mal.
Quelqu'un pourrait jeter un oeil à mon fichier excel? (fichier de test tres restreint, en vrai j'ai 3000 lignes de références et une cinquantaine de colonnes à récupérer...)
Merci beaucoup
 
Voici le code que j'ai tapé (à moitié copié collé sur des exemples...), en attendant vous avez un site pratique pour héberger l'excel afin de le partager avec vous?
 

Code :
  1. Option Explicit
  2. Sub Macro2()
  3. '
  4. ' Macro2 Macro
  5. '
  6. Dim Ref As String 'Valeur à rechercher
  7. Dim L As Long 'Numero de la ligne résultat dans la feuille Base
  8. Dim i As Long 'Numéro de la ligne de recherche dans la feuille Bilan
  9. i = 1
  10. Ref = Range("A", i).Value
  11. While Ref <> "" 'recherche tant que cellule non vide
  12.     Sheets("Base" ).Select 'on se met actif dans la feuille Base
  13.     Cells.Find(What:="Ref", After:=ActiveCell, LookIn:= _
  14.         xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
  15.         xlNext, MatchCase:=False, SearchFormat:=False).Activate 'on recherche la valeur de la cellule dans la feuille Base
  16.     MsgBox ActiveCell.Address 'message box de verification de la pertinence de la recherche - temporaire
  17.     L = ActiveCell.Row 'on enregistre le numero de la ligne résultat
  18.     Range("D" & L & ":F" & L).Select 'on selectionne les colonnes qui nous interesse dans la ligne résultat
  19.     Selection.Copy 'on copie
  20.     Sheets("Bilan" ).Select 'on passe dans la feuille Bilan
  21.     Range("D", i).Select 'on se positionne dans la ligne pour laquelle on a fait la recherche, à la premiere colonne de la selection à coller
  22.     ActiveSheet.Paste 'on colle les colonnes copiées précédemment
  23.     Ref = Range("A", i + 1).Value 'on incrémente d'une ligne notre recherche
  24. Wend
  25. End Sub


Message édité par darksnyper le 09-12-2014 à 14:10:37

---------------
http://www.facebook.com/NicolasIssalyPhotography
mood
Publicité
Posté le 09-12-2014 à 11:30:42  profilanswer
 

n°2245459
Marc L
Posté le 09-12-2014 à 12:13:02  profilanswer
 

 
           Bonjour,
 
           merci de respecter les règles du forum en éditant le post afin de baliser le code via l'icône dédiée !
           Lecture facilitée et plus facile pour indiquer un n° de ligne si besoin …
 
           Le plus facile pour un débutant, à part de consulter l'aide VBA intégrée donc à portée de clic,
           est d'effectuer la recherche manuellement en ayant au préalable activé le Générateur de macros : code livré sur un plateau ‼
 
           Un bon code est sans Select, voir par exemple l'aide de la méthode Range.Copy et son exemple :
           une seule instruction est nécessaire …
 

n°2245491
darksnyper
Nikorosif pour les intimes
Posté le 09-12-2014 à 14:14:56  profilanswer
 

Merci Marc pour ta réponse.
Je suis habitué de hfr mais pas de cette partie du coup j'avoue ne pas avoir lu les regles spécifiques..  
En fait j'ai utilisé le générateur pour avoir le code de base de la recherche et de la copie.  
Mon probleme c'est que comme j'ai besoin d'une boucle pour les 3000 lignes, je m'emmele un peu les pinceaux pour coder les adresses des cellules avec des variables. je pense que mon blocage est par là.
Merci pour le range.copy, c'est effectivement plus direct comme code.
J'ai une erreur 1004 quand je lance la macro, vous voyez une grosse erreur dans ma boucle While?  
Merci
 

Code :
  1. Option Explicit
  2. Sub Macro2()
  3. '
  4. ' Macro2 Macro
  5. '
  6. Dim Ref As String 'Valeur à rechercher
  7. Dim l As Long 'Numero de la ligne résultat dans la feuille Base
  8. Dim i As Long 'Numéro de la ligne de recherche dans la feuille Bilan
  9. i = 1
  10. Ref = Range("A", i).Value
  11. While Ref <> "" 'recherche tant que cellule non vide
  12.     Sheets("Base" ).Activate 'on se met actif dans la feuille Base
  13.     Cells.Find(What:="Ref", After:=ActiveCell, LookIn:= _
  14.         xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
  15.         xlNext, MatchCase:=False, SearchFormat:=False).Activate 'on recherche la valeur de la cellule dans la feuille Base
  16.     MsgBox ActiveCell.Address 'message box de verification de la pertinence de la recherche - temporaire
  17.     l = ActiveCell.Row 'on enregistre le numero de la ligne résultat
  18.     Range("D" & l & ":F" & l).Copy = Worksheets("Bilan" ).Range("D", i)
  19.     Ref = Range("A", i + 1).Value 'on met la valeur de la ligne suivante dans la variable de recherche
  20. Wend
  21. End Sub


Message édité par darksnyper le 09-12-2014 à 14:18:02

---------------
http://www.facebook.com/NicolasIssalyPhotography
n°2245497
Marc L
Posté le 09-12-2014 à 14:49:13  profilanswer
 

 
           Quelle est le n° de la ligne déclenchant l'erreur ?
 
           Sinon mauvaise utilisation de la méthode Find car quand il n'y pas de correspondance, erreur à coup sûr !
           C'est pourtant simple : la coder comme dans l'exemple de l'aide VBA intégrée.
 
           Si la recherche doit s'effectuer sur une colonne, il faut la préciser car là c'est sur l'intégralité de la feuille de calculs !
 
           J'espère aussi qu'il n'y a pas de formule de calculs dans la plage recherchée car là aussi,
           mauvais paramétrage : revoir alors l'aide de cette méthode Find
           Si mauvais paramétrage, mauvaise utilisation alors de la fonction de recherche depuis la feuille de calculs
           avec le Générateur de macros ! Donc pour obtenir un code fiable, recommencer en complétant bien l'assistant de la recherche …
 
           Tenter de comprendre en traduisant un code non abouti est une perte de temps !
           Le demandeur doit présenter une problématique claire & exhaustive, bref avec des tenants & aboutissants limpides,
           sinon les intervenants éventuels ne peuvent que théoriser à l'infini …
  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA-Excel] Copier-coller sélection à partir d'une recherche

 

Sujets relatifs
Formulaire web pour accéder à des données sur fichier exceleclatement de fichier excel
Une sélection de cellule en fonction de la position d'un bouton..Couper coller plage de cellules dans une nouvelle feuille
Macro Excel supprimer une ligneGestion de Base de données partagées Excel
Macro VBA Powerpoint - Suppression de plusieurs slidesBatch : Faire une boucle de recherche de répertoire
VBA et écriture en APPEND d'un fichierHELP please : supprimer ligne excel si cellule = 2, 3,4 ou 5
Plus de sujets relatifs à : [VBA-Excel] Copier-coller sélection à partir d'une recherche


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR