Copier-Coller des lignes en fonction d'une date

7test-excel.xlsm (33.37 Ko)

Bonjour,

Après de multiples recherches sur divers forums, je m’en remets à poster un appel à l’aide.

Mon but est d’arriver à copier des lignes d’un tableau provenant de 5 fichiers différents et à les coller sur un même fichier.

Le but est d’analyser la production de la veille et cette manipulation est à réaliser chaque jour de la semaine.

Je souhaite copier les lignes dont la date (qui se trouve en colonne C sur 4 fichiers et en colonne B sur 1 fichier) est égale :

A la date du jour -1 si la date du jour est un mardi, mercredi, jeudi ou vendredi

A la date du jour – 1, -2 et -3 si la date du jour est un lundi

Plus simplement, si nous sommes un lundi, alors la macro doit permettre de copier les lignes du vendredi du samedi et du dimanche.

Le reste du temps, (mardi à vendredi), elle ne prend que les lignes de la veille.

Je joins mon fichier de base sur lequel j’ai une première feuille « Liste Fichiers » dans laquelle on peut accéder aux 5 fichiers via une macro d’ouverture de fichier.

Dans la deuxième feuille « Bilan » se trouve le tableau sur lequel les données doivent venir se coller en fonction du fichier dans lequel elles ont été copiées.

J’ai aussi une macro qui permet de « mettre en page » avant d’imprimer..

Je suppose que vous allez halluciner en voyant cette macro… mais c’est le seul moyen efficace que j’ai trouvé pour mettre en page et imprimer directement. Elle n’est pas du tout optimisée… mais elle fonctionne.

Ce que je souhaite, c’est un bouton qui permette de copier les lignes des 5 fichiers et de les insérer dans la feuille « Bilan », aux endroits correspondants. Ensuite, pouvoir mettre à la suite la macro de Mise en page et d’impression.

Dites-moi si je ne suis pas clair..

J’espère vraiment que vous pourrez m’aider et m’aiguiller.

PS : Je n’ai pas réalisé les macros qui sont déjà dans le fichier, je suis ultra débutant en macro.

Je suis par contre très motivé à l’idée d’apprendre.

Merci de m’avoir lu et de l’aide que vous pourrez m’apporter.

13fichier-1.xlsx (13.66 Ko)

Bonjour,

Si tu veux, j'i un outil qui permet de compiler tous les fichiers d'un même dossier.

2 solutions :

  • soit tu retravailles la macro pour sélectionner selon la date
  • soit après compilation tu filtres selon tes critères avant mise en forme et édition

bonjour,

bonjour Steelson

une autre proposition

30test-excel.xlsm (33.34 Ko)

Bonjour,

Merci pour vos réponses.

J'ai testé ta solution h2so4, seulement, la macro ouvre tous les fichiers puis les ferme tous sans copier coller..

J'ai un peu de mal à comprendre le code pour pouvoir le faire fonctionner.

rebonjour,

voici le resultat de l'execution de la macro sur ton fichier 1.xlsx recopié 4 fois.

si pas de lignes copiées, il est possible que ce soit problème avec la date (non trouvée), j'ai ajouté un message d'erreur.

29test-excel.xlsm (34.02 Ko)

Bonjour,

Merci pour ta réponse, seulement le problème est effectivement que la date est non trouvée. Je ne peux pas copier les lignes, le message d'erreur apparaît..

Il me semble que tu l'as prids en compte, mais les dates à chercher se trouvent en colonne C pour les fichiers 1, 2, 4 et 5 et en colonne B pour le fichier 3..

Merci pour ton aide

bonjour,

bonjour Steelson, !

pour le fichier 3 quelles colonnes faut-il copier ? B à P ?

Oui effectivement il faut copier les colonnes B à P.

Je ne comprends pas pourquoi le message d'erreur apparaît pour tous les fichiers.

Bonjour,

c'est que les dates n'ont pas le format correct. puis-je voir un de tes fichiers ?

Les cellules sont pourtant au format Date, le Fichier 1 que je vous ai envoyé est un de mes fichiers dans lequel j'ai remplaçé les informations confidentielles.

Quand j'essaie avec mon fichier test que vous m'avez envoyé, cela ne fonctionne pas non plus..

C'est effectivement un problème de format de date puisque j'ai remplacé le fichier 1 par un nouveau classeur dans lequel j'ai inscrit des dates aléatoirement, et cela fonctionne.

J'essaie de creuser pour trouver l'origine.

J'ai enfin trouvé le problème !

Cela ne fonctionnait pas puisque les données à copier sont dans la feuille 2 et pas dans la feuille 1, existe-il une solution pour que la macro récupère les données de la feuille 2 (en lui donnant un petit nom?) ou alors est cre que je suis obligé de déplacer ma feuille 2 en première position ?

Merci d'avance

bonjour,

macro adaptée pour fichier 3 et pour prendre le nom de la feuille sur la feuille "liste fichiers"

29test-excel-2.xlsm (33.60 Ko)

Bonjour,

J'ai essayé la macro et cela fonctionne, merci beaucoup !

Cependant, aujourd'hui nous sommes lundi 30, la macro est censée récupérée les données de vendredi 27, samedi 28 et dimanche 29, ce qu'elle fait très bien.

Le problème est qu'elle ne s'arrête pas de tourner et affiche ensuite "Erreur 400" qui d'après ce que j'ai pu lire sur l'aide Excel correspond à l'ouverture d'une feuille déjà ouverte. Ce qui ne correspond pas vraiment à ma situation.

Auriez-vous une idée pour résoudre ceci svp ?

Merci d'avance

bonjour,

merci de mettre les fichiers qui permettent de reproduire l'erreur.

Bonjour h2so4,

A défaut de pouvoir mettre le fichier, je mets le code qui provoque l'erreur.

Merci de votre aide.

[Sub CopyPaste450()

With ThisWorkbook.Sheets("Bilan Déchets")

For Each f In ThisWorkbook.Sheets("Liste Fichiers").Range("A1:A5")

q = q + 1

k = 0

c = 0

While c < q

k = k + 1

If .Cells(k, 1) = "DATE" Then c = c + 1

Wend

Workbooks.Open f

Set wb = ActiveWorkbook

Set ws = wb.Sheets(f.Offset(0, 1).Value)

js = Application.WorksheetFunction.Weekday(Date, 12) '4 = vendredi, 5 samedi, 6 dimanche, 7 lundi, 1 mardi, 2 mercredi, 3 jeudi

If q = 3 Then col = "B": colf = "P" Else col = "C": colf = "Q"

If js < 5 Then fd = Date - 1: ld = Date - 1 Else fd = Date - 3: ld = Date - 1

Set re = ws.Columns(col & ":" & col).Find(fd, lookat:=xlWhole, LookIn:=xlValues)

If Not re Is Nothing Then

I = re.Row

While ws.Cells(I, col) <= ld

k = k + 1

ws.Range(col & I & ":" & colf & I).Copy .Cells(k, 1)

I = I + 1

Wend

Else

MsgBox "date " & fd & " non trouvée dans " & f

End If

wb.Close False

Next

End With

End Sub]

bonjour,

ce code fonctionne sans problème chez moi avec les fichiers de test que je me suis construits. le problème doit provenir du fait que le code n'est pas adapté à tes fichiers, d'où ma demande. sans possibilité de reproduire le problème chez moi, je ne peux pas aider.

Bonjour,

Je comprends bien votre demande mais je ne peux poster mes fichiers, c'est pour cela que je vous avais posté des fichiers "Tests" mais qui ne devaient pas correspondre à 100% à mes fichiers.

Je pense que le problème vient du fait que sur mes fichiers, des formules sont tirées jusqu'aux lignes 3-4000 ce qui fait perdre du temps à la macro (qui doit chercher la date parmi ces valeurs ?).

Peut-être faudrait-il qu'elle s'arrete lorsque la ligne suivante ne comporte pas de date.

J'essaie de creuser, peut-être que je pourrais vous poster mes fichiers mais cela demande beaucoup de traitements.

Merci beaucoup

Pour information, le problème se situe au niveau de la boucle Wend.

Rechercher des sujets similaires à "copier coller lignes fonction date"