Sélectionner une plage de cellule selon le mois [Résolu/Fermé]

Signaler
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
-
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
-
Bonjour,


Encore bien trop débutant sur VBA, je sollicite votre aide.

En faite la question est déjà donnée dans le titre. :)

Comment sélectionner des colonnes selon un critère mois pour ensuite copier/coller les valeurs sur une autre plage?




Plus précisément, voici un fichier exemple:

https://www.cjoint.com/c/DLtqIHF2KCE


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?

Je vous remercie d'avance pour votre aide.



Cordialement,

3 réponses

Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
509
Bonjour,

Un essai avec une procédure évènementielle qui est lancée lorsqu'une modification est détectée dans la cellule D3.

https://www.cjoint.com/c/DLtrqVpfdBF

N'hésites pas à demander des éclaircissements si nécessaire.

A+
Messages postés
12907
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2021
2 107
Bonjour Koalacid

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


Cdlmnt
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
1
Hello Via55, Hello Gyrus,

Merci pour vos réponses et bonne année à vous.

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?


Cordialement,
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
1
Du coup j'ai intégré le code pour ouvrir le fichier vers lequel le copier coller doit être fait.

Je l'ai écrit en-dessous de la ligne " 'Copier Coller Mois_C".

Mais là j'ai un message d'erreur qui s'affiche:

"Erreur de compilation
Instruction incorrecte à l'extérieur de type"

Je ne comprend pas, mais alors pas du tout!
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
1 >
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016

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.

Je vous joins mon fichier exemple avec la macro.

https://www.cjoint.com/?0AglOUwORRD

Les fichiers destinataires sont des classeurs vides (pour l'exemple).


Cordialement
Messages postés
12907
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
18 janvier 2021
2 107 >
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016

Bonjour

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

Cdlmnt
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
1
Formidable! Tout fonctionne sur mon fichier exemple. Reste plus qu'à refaire ça pour le cas réel.


Merci beaucoup à vous deux!


Cordialement,