Copier une plage de cellule selon données d'un autre

Bonjour à tous et merci pour ce forum.

voilà mon problème :

j'ai en A2, feuil1 une donnée : par exemple L3:L15

Je souhaite connaitre le code qui permet de copier les cellules qui correspondent à cette valeur, (ici donc L3:L15) de cette feuille et les coller feuil2 en A3:A15.

Ceci afin de l’inclure dans une macro qui actualisera les données de la feuil2 si A2 de la feuil1 change.

Je ne sais pas si c'est très clair, en tous cas merci de votre aide.

Bonjour BONNEGO, le forum,

Pas sur d'avoir compris, mais à priori pas besoin de macro....

Si Feuil2!A3:A15 doit toujours correspondre à Feuil1!L3:L15 , i l suffit de lier les cellules avec une formule....

En A3 :

=Feuil1!L3

à tirer vers le bas jusqu'à A15

Si tu modifies tes valeurs sur la feuille 1, elles sont alors également modifiées sur la feuille 2...

2classeur1.xlsx (8.61 Ko)

Cordialement,

Merci pour votre réponse,

En fait malheureusement ce que que veux copier dans la feuil2 est variable. Il s'agit de données d'une colonne de la feuil1.

je trouve la référence à copier en A2 de la feuil1.

Par Ex

si A2 = L4:L15 alors je copie les données L4:L15 sur la feuille feuil2 en B4:B15

si A2 = N4:N15 alors je copie les données N4:N15 sur la feuille feuil2 en B4:B15

si A2 = U4:U15 alors je copie les données U4:U15 sur la feuille feuil2 en B4:B15

Je souhaite en lançant une macro actualiser les données de la feuil2 si feuil1A2 a été modifié

Mais ce n'est peut être pas réalisable ?

Cdlt

Re,

Je crois que je viens de comprendre......

Un truc du genre....

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim plage As Range

   Application.ScreenUpdating = False

 If Not Application.Intersect(Target, Range("A2")) Is Nothing Then
  If Target.Value = "" Then Sheets("Feuil2").Range("B4:B15").ClearContents: Exit Sub
  cancel = True
   Set plage = Range(Target.Value)
   plage.Copy
   Sheets("Feuil2").Range("B4").PasteSpecial Paste:=xlValues
 End If
   Application.CutCopyMode = False
   Application.ScreenUpdating = True
End Sub

La macro se déclenche après le choix en A2...

3bonnego.xlsm (16.36 Ko)

Cordialement,

Merci beaucoup je regarde ça ce soir et je vous tiendrai au courant

C'est exactement ça, merci beaucoup.

Et du coup, j'ai deux questions complémentaires !

  • quel serait le code pour que les cellules feuil2 ne s'effacent pas si A2 est vide ?
  • quel serait le code pour la même chose mais que la copie se fasse sur un autre classeur ?

Re,

Merci pour ton retour,

quel serait le code pour que les cellules feuil2 ne s'effacent pas si A2 est vide ?

Il faut supprimer:

Sheets("Feuil2").Range("B4:B15").ClearContents:

quel serait le code pour la même chose mais que la copie se fasse sur un autre classeur ?

Un exemple:

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim plage As Range

   Application.ScreenUpdating = False

 If Not Application.Intersect(Target, Range("A2")) Is Nothing Then
  'If Target.Value = "" Then Sheets("Feuil2").Range("B4:B15").ClearContents: Exit Sub
   If Target.Value = "" Then Exit Sub
  cancel = True
   Set plage = Range(Target.Value)
   plage.Copy
   'Sheets("Feuil2").Range("B4").PasteSpecial Paste:=xlValues
   On Error Resume Next
    Workbooks("Classeur1.xlsx").Sheets("Feuil1").Range("A8").PasteSpecial Paste:=xlValues
 End If
   Application.CutCopyMode = False
   Application.ScreenUpdating = True
 If err.Number > 0 Then MsgBox "Le fichier de destination n'est pas ouvert :" & Chr(10) & "Copie des données impossible"
End Sub

Attention, le fichier source doit être ouvert !

J'ai rajouté une gestion d'erreur si ce n'est pas le cas.

3bonnego-v2.xlsm (17.26 Ko)

Cordialement,

Tout est nickel, c'est parfait merci beaucoup.

Génial !

A Bientôt

Re,

Merci pour ton retour, et ravi que cela te convienne,

Cordialement,

Bonjour BONNEGO, le forum,

Bonjour Xorsankukai,

Ce problème est résolu mais néanmoins j’ai encore une question complémentaire si tu peux y répondre. J’ai fait évoluer mes deux fichiers.

Comment peut-on modifier le code en macro dans un module qui se déclenche sur demande.

L’idée est que le la cellule où se trouve l'info sur la plage recherchée est dans le WB1feuil1, la plage à copier dans le WB2feuil1, la destination WB1feuil2.

Merci Bcp

Bonnego

Un essai:

Sub test()

 Dim WB1 As Workbook, WB2 As Workbook
 Dim cible As Range, plage As Range

   Application.ScreenUpdating = False

   Set WB1 = ThisWorkbook
   Set cible = WB1.Sheets("Feuil1").Range("A2")

On Error Resume Next
   Set WB2 = Workbooks("TEST.xlsx")
    With WB2
     Set plage = WB2.Sheets("Feuil1").Range(cible.Value)
         plage.Copy
         .Sheets("Feuil2").Range("A8").PasteSpecial Paste:=xlValues
    End With

   Application.CutCopyMode = False
   Application.ScreenUpdating = True
If err.Number > 0 Then
   MsgBox "Le fichier de destination n'est pas ouvert :" & Chr(10) & "Copie des données impossible"
Else
   MsgBox "Copie effectuée"
End If

End Sub
6bonnego-v3.xlsm (20.06 Ko)
3test.xlsx (9.26 Ko)

Cordialement,

Rechercher des sujets similaires à "copier plage donnees"