Copier coller en fonction d'une date
Bonjour à tous,
Je cherche à copier les données d'une feuille ("Données jour") sur une autre ("archives")
à l'emplacement correspondant à la date
Merci d'avance pour votre aide
Sophie
Bonsoir Sophie123,
En te lisant et en observant la pièce jointe, on arrive (je crois!) à comprendre ce que tu veux faire ... mais il nous manque le contexte: on suppose que le lendemain, les chiffres du jour vont être modifiés. Toute solution basée sur une formule sera donc caduque!?
... Reste donc une solution par vba (mais là aussi, quelques détails supplémentaires auraient été utiles: à quel moment les valeurs sont-elles copiées? Qu'est-ce qui déclenche la copie? Que doit-il se passer si les cellules "cibles" n'étaient pas vides? Doit-on effacer les données, une fois la copie réalisée? Que fait-on si la date n'est pas renseignée? Quid si elle n'existe pas dans la feuille "Archives"? etc.)
Un début de solution (si j'ai compris!) pourrait être de copier les quelques lignes ci-dessous dans la fenêtre de code de la feuille "Données du jour"
Sub test()
colCible = Application.Match([E2], Sheets("Archives").[2:2], 0)
Sheets("Archives").Cells(3, colCible).Resize(7, 1).Value = [G5:G11].Value
End SubBonsoir,
Effectivement j'aurai pu être plus précise
Il s'agit d'un fichier test mais les données du jour sont importées quotidiennement via un bouton.
A la suite de la macro pour importer mes données, je souhaite incrémenter le tableau archives qui lui ne doit pas bouger.
La date sera toujours présente dans la cellule "E2".
Pas besoin d'effacer les données, l'import de mes données le fait déjà.
La date sera toujours présente dans le fichier archives
En espérant avoir clarifié ma demande.
Sophie
PS: J'ai tenté ça mais bien sur ça ne fonctionne pas
Sub copier()
col = 2
jour = Sheets("Données jour").Cells(2, 5)
With Sheets("Données jour")
Range("G5:G11").Select
Selection.Copy
End With
With Sheets("Archives")
While Cells(2, col) <> jour
col = col + 1
Wend
Cells(3, col).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End With
End SubTa solution marche parfaitement
C'est ce que je voulais
Par contre j'aurai souhaiter la faire fonctionner depuis un module.
Merci bcp
Re,
Alors, il faudra que tu veilles à préciser à quelle feuille s'applique chacune des manipulations (dans ton bout de code, je crois que c'est le seul aspect qui empêche que ça fonctionne ...)Sophie123 a écrit :Par contre j'aurai souhaiter la faire fonctionner depuis un module.
Par exemple, quand tu écris With Sheets("Données jour") ça ne veut pas dire que toutes les lignes qui suivent concernent ou s'appliquent à la feuille ainsi désignée! Pour qu'à la ligne suivante, ton Range("G5:G11").Select, il faut placer un '.' devant le Range. Ce '.' devant chaque référence (à un cellule ou plage de cellule, par exemple) fera référence à la feuille "Données jour", jusqu'au premier End With qui suivra.
Sachant cela, essaie de coller mes deux lignes dans un module et d'y apporter les modifs nécessaires pour désigner correctement les feuilles. Dis-nous si tu coinces!
Merci pour ces explications.
ça permet vraiment de progresser
Je m'y met de suite
Bon j'ai pas réussie à modifier ton code.
Mais grâce à tes précieux conseils je suis parvenue à modifier le code que j'avais commencé.
Sub copier()
Dim col As Integer
Dim jour As Date
col = 2
jour = Sheets("Données jour").Cells(2, 5)
Sheets("Données jour").Select
Range("G5:G11").Select
Selection.Copy
Sheets("Archives").Select
While Cells(2, col) <> jour
col = col + 1
Wend
Cells(3, col).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Subça a l'air de fonctionner.
Merci énormément pour ton aide.
Bonne soirée
Bonjour,
Si la chose t'intéresse, voilà ma proposition adaptée:
Sub test()
colCible = Application.Match(Sheets("Données jour").[E2], Sheets("Archives").[2:2], 0)
Sheets("Archives").Cells(3, colCible).Resize(7, 1).Value = Sheets("Données jour").[G5:G11].Value
End SubToujours si tu es curieuse, tu aurais intérêt à "élaguer" un peu ton code: les instructions .Select en ralentissent l'exécution. À la place de
Sheets("Données jour").Select
Range("G5:G11").Select
Selection.CopyTu peux écrire
Sheets("Données jour").Range("G5:G11").Copy