Repartir les données selon la date

Bonjour à tous,

Débutant en VBA, j'ai besoin d'un peu d'aide pour un fichier pour mon travail!

Vous trouverez ci joint les fichiers d'exemple tel que je les imagines:

- Un fichier "extraction": Naturellement, c'est le fichier à traiter extrait de ma base de données. En première colonne, il y a le numéro de la semaine à répartir, ensuite vient la référence, et la date de son utilisation (c'est un exemple).

- Un fichier par mois, comme vous pouvez le voir les données sont bien répartis dans le mois. Je les aurais bien répartis par semaine, mais vu qu'une semaine peut chevaucher deux mois, je n'ai pas le choix.

- Un dernier fichier avec le bouton qui s'occupe de tout répartir. J'aimerai bien sur que les données se copie à la suite d'autres. Par exemple, nous somme le mois de septembre, au début. Je sors le fichier "extraction", qui contiendra les données de août, mais aussi début septembre (la première semaine se chevauche avec la fin d'aout). J'appuie sur le bouton, ça répartie le tout entre mes deux fichiers (un fichier par mois). Je refais une extraction la semaine suivante pour le mois de septembre, et je reclique sur le bouton. Le but est que les nouvelles données extraites se collent aux précédentes.

Je sais faire un peu de macro : je sais ouvrir des fichiers, copier les données, je ne maitrise pas encore les boucles pour copier les données à la suite, ni la répartition. J’espère que vous pourrez m'aider. Si vous avez besoin de précision ou autre n'hésitez pas.

Merci d'avance!

13fevrier.xlsx (8.08 Ko)
13extraction.xlsx (8.20 Ko)
8mars.xlsx (8.12 Ko)
11janvier.xlsx (8.12 Ko)
18repartition.xlsx (10.90 Ko)

Bonjour à tous,

J'ai un peu avancé dans mon code mais je bloque au moment de faire la boucle. Je n'arrive pas à passer à la cellule C3 une fois la cellule C2 vérifié, pourtant je suis sur que c'est quelque chose de facile à faire...

Sub test()

Do While ActiveCell.Value <> ""

If Range("c2").Value Like "*01/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Janvier.xlsx"

Else

If Range("c2").Value Like "*02/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Fevrier.xlsx"

If Range("c2").Value Like "*03/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Mars.xlsx"

If Range("c2").Value Like "*04/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Avril.xlsx"

If Range("c2").Value Like "*05/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Mai.xlsx"

If Range("c2").Value Like "*06/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Juin.xlsx"

If Range("c2").Value Like "*07/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Juillet.xlsx"

If Range("c2").Value Like "*08/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Aout.xlsx"

If Range("c2").Value Like "*09/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Septembre.xlsx"

If Range("c2").Value Like "*10/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Octobre.xlsx"

If Range("c2").Value Like "*11/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Novembre.xlsx"

If Range("c2").Value Like "*12/2017*" Then

Workbooks.Open Filename:=ThisWorkbook.Path & "\Decembre.xlsx"

End If

End If

End If

End If

End If

End If

End If

End If

End If

End If

End If

End If

Loop

End Sub

Merci d'avance!

Bonjour et bienvenue sur le forum

Un essai à tester. Te convient-il ?

Bye !

30ppplll.zip (60.03 Ko)

Merci beaucoup pour ta réponse!

ça m'as l'air parfaitement fonctionnel! Tu viens de me faire de la magie!

Je sais que je vais abuser un peu, mais est-ce que c'est possible de décrire ligne par ligne precisemment? Par exemple, je n'arrive pas à comprendre cette ligne :

lgn = f.Range("A" & Rows.Count).End(xlUp)(2).Row

Le but étant que j'apprenne le VBA!

Mais merci encore pour ton fichier!

Ppplll a écrit :

je n'arrive pas à comprendre cette ligne :

 lgn = f.Range("A" & Rows.Count).End(xlUp)(2).Row
lgn = f.Range("A" & Rows.Count).End(xlUp)(2).Row

lgn : c’est le nom que l’on donne à un variable

f : c’est le nom que l’on a donné à la feuille active (ligne juste au-dessus)

Rows.Count : c’est le nombre de lignes de la feuille :1 048 576

f.Range("A" & Rows.Count) : c’est la dernière cellule de la feuille en colonne A

f.Range("A" & Rows.Count).End(xlUp) : c’est la première cellule non vide que l’on atteint en partant de la dernière cellule de la colonne A et en remontant vers le haut de la feuille

f.Range("A" & Rows.Count).End(xlUp)(2) : c’est cette même cellule décalée d’une ligne vers le bas ; c’est donc une cellule vide sous une cellule non vide

f.Range("A" & Rows.Count).End(xlUp)(2).Row : c’est le numéro de la ligne de cette cellule ; cette valeur est donnée à la variable lgn

OK ?

Bye !

Justement, j'étais en train de regarder les variables, je n'ai pas compris pourquoi déclarer "fe" si tu as déjà déclarer "f" pour la feuille

Idem pour "chemin$", je ne connais pas cette variable.

Et pour les variables omM$, i&, et lgn&, ont elles une signification en VBA? Ou est-ce toi qui vient de les inventer pour aller plus vite?

Merci d'avance!

Je suis vraiment débutant!

Ppplll a écrit :

, je n'ai pas compris pourquoi déclarer "fe" si tu as déjà déclarer "f" pour la feuille

Chacun a sa façon de faire et ses petites habitudes…

Pour ma part, j’aime bien donner un nom à des feuilles auxquelles je vais faire appel dans la macro. Ce nom est choisi court et si possible doit rappeler le nom de la feuille qu’il représente.

Ainsi, dans le cas présent, j’appelle fe la feuille ‘’Extraction’’. Ce sera plus facile à écrire que ‘’Sheets(‘’Extraction’’ et la macro sera plus claire, au moins pour moi.

Pour ce qui est de la variable f, c’est différent. Cette variable va représenter une feuille qui ne sera pas toujours la même. Ce sera le nom donnée à la feuille active au moment où un fichier de mois (Janvier, Février…) vient de s’ouvrir.

Il ne s’agit donc pas de la même feuille que fe.

"chemin$", je ne connais pas cette variable.

Normal : c’est auteur d’une macro qui définit le nom de ses variables.

En l’occurrence, il s’agit de donner un nom au chemin d’accès du fichier que l’on veut ouvir. Comme ce fichier est dans le même dossier que le fichier qui contient la macro (ThisWorkbook), ce chemin est donné par la fonction ‘’Path’’ (chemin en anglais) :

chemin = ThisWorkbook.Path & "\"

On ajoute le ‘’\’’ et il ne manquera qu’à ajouter le nom du fichier pour avoir l’adresse complète.

Et pour les variables omM$, i&, et lgn&, ont elles une signification en VBA? Ou est-ce toi qui vient de les inventer pour aller plus vite?

Comme je l'ai dit plus haut, chacun donne le nom qu'il veut à ses variables.

*J'ai appelé

* ''nomM'' la variable qui représentera le nom du mois de la date contenue dans la valeur de la cellule en colonne C de la feuille ''Extraction''

* '' lgn'' le numéro de la ligne où je vais écrire les données dans la feuille du mois ouverrt

OK ?

Bye !

Bonjour,

Je reviens vers toi car j'ai un problème. En fait la macro n'ouvre pas le fichier avec le mois comme voulu, mais un fichier que j'ai créé pour faire un calendrier, et qui s'appelle donc "calendrier.xslx", et je n'arrive absolument pas à comprendre pourquoi... y a t'il une explication?

(plus précisemment c'est cette ligne qui ouvre le calendrier:

Set classeur = Workbooks.Open(chemin & Dir(chemin & nomM & "*.xls*"))

Merci d'avance!

Bonjour

Désolé mais je ne comprends pas tes explications.

Tu devrais mieux dire ce que tu as au départ et ce que tu veux obtenir

Bye !

C'est bon, j'ai fini par y arriver!

En fait ça ouvrait le mauvais fichier car j'avais ciblé la mauvaise colonne!

Maintenant j'ai un dernier problème, c'est le temps...

ça tourne pendant très longtemps car il y a 4500 lignes et plus de 35 colonnes à copier dans les classeurs des mois avec quelques formules du style sommeprod.

Y a t'il possibilité de faire en sorte que données se repartissent dans des fichiers intermédiaires puis de les coller en valeur dans mes feuilles du mois?

Ou il n'y a aucun moyen d’accélérer la macro?

Merci d'avance!

Désolé mais je ne vois pas.

Bye !

Dommage... merci quand même

Personne d'autre n'aurait une macro à proposer qui soit rapide à executer?

Rechercher des sujets similaires à "repartir donnees date"