Vu que je souhaite apprendre en même temps et que ça passe par de la compröhension, est-ce que vous pouvez mettre des commentaires pour que je sache quelle ligne de code correspond ä quelle manipulation?
Macro à mettre dans le worsheet de la feuille 1 (ALT F11 pour ouvrir l'editeur VBA puis double clic sur Feuil 1 dans arborescence et copier et coller la macro)
Private Sub Worksheet_Change(ByVal Target As Range)
' Verification que c'est la cellule D3 qui a changé
If Not Intersect(Target, Range("D3")) Is Nothing Then
' et si c'est le cas :
' effacement de la plage où doit être être effectuée la copie
ActiveSheet.Range("J33:AG42").ClearContents
' recherche de la colonne du mois choisi en D3 dans la plage ligne 10
' la fonction Match trouve la 1ere occurence du mois et on ajoute 1 pour obtenir la colonne suivante
col = Application.WorksheetFunction.Match(ActiveSheet.Range("D3"), ActiveSheet.Range("A10:AG10"), 0) + 1
' selection de la plage à copier dans la feuille active et copie
ActiveSheet.Range(Cells(13, 10), Cells(22, col)).Select
Selection.Copy
' selection de la 1ere cellule où coller dans la page dans la page active et collage
ActiveSheet.Range("J33").Select
ActiveSheet.Paste
End If
End Sub
J'avoue être tenté par la première solution vu qu'elle semble plus simple et que je vais devoir l'adapter à mon cas en réalité plus complexe.
La macro prend bien compte le fait qu'il y ait 2 fois le même mois et c'est ce qu'il faut.
Dans la solution de Gyrus, je ne comprend pas où se situe le copier/coller.
Sub Macro1()
Dim Mois_C As String Dim Mois As String
Mois_C = Range("D3") Mois = Range("J10:AG10")
'Copier Coller Mois_C
Cells.Find(Mois_C).Activate
Row((Mois_C), 3 To 10)
End Sub
J'aimerais développer ce code pour faire un copier/coller en fonction du mois d'une plage différente à chaque fois vers des fichiers tous similaires.
Par exemple, je choisi novembre alors sur la plage 1 il fait le copier/coller de janvier à novembre vers le fichier 1. Puis il va vers la plage 2 pour refaire la même chose. Et ainsi de suite pour une vingtaine de fichier et de plages.
Ma question est: où est-ce que je dois insérerer le code pour ouvrir le fichier et préciser où se fait le copier/coller dans ton code ci-dessus?
Changement de code. Je suis parti sur la version de Via55. J'ai alors pu intégrer des modifications telles que la plage de copier/coller. Ainsi la macro prend une plage et la colle dans un autre fichier où je veux.
Le problème est que sur l'exemple très simple, j'avais mis qu'une seule plage à copier/coller.
En fait il y en a plusieurs qui sont rangées à la ligne.
Première plage de J à AG ensuite de AH à BE et ainsi de suite.
J'ai donc démultiplié le code pour qu'il s'occupe dans un premier temps de la preimière plage puis ensuite de la deuxième plage, etc etc
Mais je bloque dès la seconde plage. En effet, je n'arrive pas à sélectionner la bonne plage pour le copier coller.
1° pour que les 2 parties de la macros s'enchainent il faut supprimer le 1er End if et le 2eme If not intersect ..., puis changer les plages qui sont effacées (ActiveSheet.Range("F8:AC17").ClearContents) sinon tu vas effacer ce qui a été copié par la 1ere partie de la macro et changer également l'endroit à partir duquel coller la plage (ActiveSheet.Range("F8").Select) sinon même problème !
2° dans la seconde partie de la macro la fonction MATCH renvoie dans la variable col le rang de la valeur trouvée dans la plage, comme la 2eme plage est décalée de 34 par rapport au départ il faut aussi décaler de 34 dans la ligne de copie
ActiveSheet.Range(Cells(13, 34), Cells(22, col+34)).Select