Chercher puis copier coller

J

JB

Guest
Bonjour le Forum, Bonjour à tous,

Je cherche a écrire une macro qui dans un premier temps me recherche une donnée dans une base sachant que cette donnée peut si trouver plusieurs fois et pas forcement à la suite puis qui dans un deuxième temps me copie/colle (dans un autre fichier) les lignes correspondantes à cette donnée.
Merci de votre aide
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour JB, bonjour le forum,

Oui JB, je pense que c'est faisable mais plutôt que de te proposer une macro dans le vague, tu devrais nous envoyer une pièce jointe reprenant les caractéristiques de ton projet. Allez, un petit effort et tu verras que nous serons nombreux à te venir en aide.
 
J

jb

Guest
Voici un petit exemple que je pensai avoir joint lors de mon premier message.

Cordialement [file name=Chercheretcopiercoller.zip size=1903]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Chercheretcopiercoller.zip[/file]
 

Pièces jointes

  • Chercheretcopiercoller.zip
    1.9 KB · Affichages: 49

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir JB, bonsoir le forum,

Comme tu n'as pas indiqué la destination des copies (nom du classeur, nom de l'onglet et cellule de départ) j'ai dû inventer. Tu adapteras le code... Dans mon exemple le classeur se nomme 'Autre Classeur.xls' et c'est dans l'onglet 'Feuil1' à partir de la cellule A1 que se font les copie. Pour que cela fonctionne il faut impérativement que le classeur de destination soit lui aussi ouvert.

Je te propose cette macro événementielle qui agit au chagement d'édition dans l'onglet 'N° cherché' :


Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet

Dim Cl As Workbook 'déclare la variable Cl (Classeur)
Dim Dest As Range 'déclare la variable Dest (Destination)
Dim BD As Worksheet 'déclare la variable BD (Base de Données)
Dim Pl As Range 'déclare la variable Pl (Plage)
Dim R As Range 'déclare la variable R (Recherche)
Dim PA As String 'Déclare la variable PA (Première Adresse)

'condition : si le changement se fait alleurs qu'en B3 ou si B3 est effacé, sort de la procédure
If Target.Address <> '$B$3' Or Range('B3').Value = '' Then Exit Sub

'définit la variable Cl (remplace par le nom du classeur qui accepte les copies)
Set Cl = Workbooks('Autre Classeur.xls')

'définit la variable Cib (à adapter à ton cas)
Set Dest = Cl.Sheets('Feuil1').Range('A1')

Set BD = Sheets('Base de données') 'définit la variable BD
Set Pl = BD.Range('A2:A' & BD.Range('A65536').End(xlUp).Row) 'définit la variable Pl

With Pl 'prend en compte la plage Pl
Set R = .Find(Target.Value) 'définit la variable R
If Not R Is Nothing Then 'condition : si la recherche n'est pas infructueuse
PA = R.Address 'définit la variable PA
Do 'exécute
R.EntireRow.Copy Destination:=Dest 'copie la ligne et la colle dans la destination
Set Dest = Dest.Offset(1, 0) 'redéfinit la variable Dest (une ligne en dessous)
Set R = .FindNext(R) 'redéfinit la variable R (recherche le suivant)
'tourne en boucle tant que R existe et que son adresse n'est pas la première
Loop While Not R Is Nothing And R.Address <> PA
Else 'sinon
MsgBox 'LA valeur éditée n'existe pas.' 'message
End If 'fin de l acondition
End With 'fin de la prise en compte

End Sub

Et puisqu'il est si difficile d'obtenir de ton aide, essaye de ne pas faire comme la grande majorité des visiteurs que j'ai aidé ces derniers temps... Dis-moi si ça te convient !!!
 

Discussions similaires

Réponses
56
Affichages
1 K
Réponses
9
Affichages
379

Statistiques des forums

Discussions
312 305
Messages
2 087 081
Membres
103 457
dernier inscrit
fab2614