Copier et coller selon la date

Bonjour, je veux copier une plage de cellule d'un classeur et les coller dans un autre classeur selon la date. J'ai une colonne de date et 3 cellules de renseignements juxtaposé. Je veux copier les 3 cellules et les coller dans un autre classeur vis-à-vis la date correspondante. J'ai un programme d'entrainement qui comprend 3 exercices et je veux comptabiliser le tout par semaine dans un autre onglet. Quel macro / code VBA peut m'aider svp?

Merci à l'avance.

19training.xlsm (9.02 Ko)

Bonjour,

As-tu réellement besoin de passer par une macro pour faire ça ? Une simple formule RECHERCHEV suffirais.

oui j'ai besoin d'une macro car j'ai simplifier mon fichier au plus simple pour le diffuser sur le forum. Aucune formule ne doit aller dans l'onglet "Données". Je dois passer par un bouton sur l'onglet "saisie" qui transférera les données par tranche de semaine.

Merci

oui j'ai besoin d'une macro car j'ai simplifier mon fichier au plus simple pour le diffuser sur le forum. Aucune formule ne doit aller dans l'onglet "Données". Je dois passer par un bouton sur l'onglet "saisie" qui transférera les données par tranche de semaine.

Merci

Si tu as simplifié ton fichier, alors j'ai 2 ou 3 questions concernant ce que tu copies :

  • Tes dates sont-elles toujours rangées par ordre croissant ?
  • Peut-il y avoir des trous entre 2 dates (par exemple on passe du 21 au 23) ?
  • Les 2 lignes vides au dessus de tes données sont-elles utiles ou tes données pourraient-elles être remontées ?

Bonjour Pedro, premièrement, merci pour ton aide!

Dans l'onglet saisie, il y aura les dates une semaine à la fois d'affichée mais toujours en ordre croissant.

Dans l'onglet données, la liste de date sera en ordre croissant en incluant tous les jours de l'année.

Donc, aucun trou dans les dates.

Merci

Voilà une proposition:

Sub Copier()

Dim N As Long

With Sheets("Données")
    Sheets("Saisie").Range("B4:D10").Copy 'plage de données fixe : toujours 7 jours et 3 colonnes
    For N = 3 To .Range("A" & Rows.Count).End(xlUp).Row 'parcourir les lignes de l'onglet "Données"
        If .Cells(N, 1) = Sheets("Saisie").Cells(4, 1) Then 'Chercher la date correspondant à la valeur en A4 de l'onglet "Saisie"
            .Cells(N, 2).Select
            ActiveSheet.Paste
            Application.CutCopyMode = False
            Exit For
        End If
    Next N
End With

End Sub

Pedro22, j'obtiens une erreur 1004 à la ligne:

.Cells(N, 2).Select

Euh, moi ça marche. As-tu copié le code en entier ? Sur le même fichier ?

Oui j'ai copié le code en entier.

J'ai essayé d'effacer le "." avant cell et il n'y a plus d'erreur mais les données ne se copient pas dans le bon onglet.

Je regarde pour associer la bonne worksheet avant le "paste".

Si tu as une idée pour moi car je suis vraiment débutant dans le code VBA.

Merci

Tous les objets avec un "." devant font référence à la même feuille, à savoir la feuille "Données". Je complète les commentaires de mon code pour mieux comprendre.

Sub Copier()

Dim N As Long

With Sheets("Données") 'Par défaut on travail sur cette feuille quand l'instruction débute par "."
    Sheets("Saisie").Range("B4:D10").Copy 'plage de données fixe : toujours 7 jours et 3 colonnes
    For N = 3 To .Range("A" & Rows.Count).End(xlUp).Row 'parcourir les lignes de l'onglet "Données"
        If .Cells(N, 1) = Sheets("Saisie").Cells(4, 1) Then 'Chercher la date correspondant à la valeur en A4 de l'onglet "Saisie"
            .Cells(N, 2).Select 'Se placer sur la cellule B correspondant à la date
            ActiveSheet.Paste 'Coller à cet emplacement
            Application.CutCopyMode = False 'Ne pas conserver les données copiées en mémoire
            Exit For 'Arrêter de parcourir les lignes (puisqu'on à trouvé)
        End If
    Next N 'Continuer à parcourir les lignes (tant qu'on a pas encore trouvé)
End With

End Sub

J'ai copié en entier ton code et j'ai encore la même erreur (1004) La méthode sélect de la classe range a échoué.

Le débogage me renvoit à la ligne :

.Cells(N, 2).Select 'Se placer sur la cellule B correspondant à la date

Est-ce une question de version d'excel? Moi j'ai 2016.

Merci

Bonjour pedro22,fran6fre7,

L'erreur n'est-elle pas ici

 .Cells(N, 2).Select 'Se placer sur la cellule B correspondant à la date

Ce ne serait pas plutôt

 .Cells(N, 1).Select 'Se placer sur la cellule B correspondant à la date

Cordialement,

Bonjour xorsankukai,

J'ai essayé et cela ne fonctionne pas non plus!

Merci

Bonjour pedro22,fran6fre7,

L'erreur n'est-elle pas ici

 .Cells(N, 2).Select 'Se placer sur la cellule B correspondant à la date

Ce ne serait pas plutôt

 .Cells(N, 1).Select 'Se placer sur la cellule B correspondant à la date

Copie de training.xlsm

Cordialement,

Non, l'idée est bien de se placer à côté, car je n'ai pas copié la date et je ne souhaite donc pas que le collage ne l'écrase.

Bonjour xorsankukai,

J'ai essayé et cela ne fonctionne pas non plus!

Merci

Peux-tu envoyer ton fichier, par ce qu'en se basant sur ton premier fichier, la macro fonctionne de mon côté.

Désolé, message supprimé...

Mais je confirme, sous excel 2010, ton code fonctionne parfaitement,

Cordialement,

Voilà le fichier!

Merci

15training.xlsm (15.79 Ko)

Voilà le fichier!

Merci

@fran6fre7 : La macro ne fonctionne pas sur ce fichier précisément ou sur un autre fichier plus complet ?

Sur ce fichier précisément. Mon but est qu'une fois que cela fonctionnera sur ce fichier, je l'adapterai sur le fichier plus complet. Je veux m'assurer d'obtenir quelque chose avec ma version d'Excel avant de transposer.

Merci.

Sur ce fichier précisément. Mon but est qu'une fois que cela fonctionnera sur ce fichier, je l'adapterai sur le fichier plus complet. Je veux m'assurer d'obtenir quelque chose avec ma version d'Excel avant de transposer.

Merci.

Encore une fois de mon côté tout fonctionne, et les instructions étant basiques, je doute que ce soit dû à ta version d'Excel... Essaie de substituer cette ligne par :

.Range("B" & N).Select 'Se placer sur la cellule B correspondant à la date
Rechercher des sujets similaires à "copier coller date"