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 Sub

Bonsoir,

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 Sub

Ta solution marche parfaitement

C'est ce que je voulais

Par contre j'aurai souhaiter la faire fonctionner depuis un module.

Merci bcp

Re,

Sophie123 a écrit :

Par contre j'aurai souhaiter la faire fonctionner depuis un module.

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 ...)

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 Sub

Toujours 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.Copy

Tu peux écrire

Sheets("Données jour").Range("G5:G11").Copy
Rechercher des sujets similaires à "copier coller fonction date"