Macro pour copier/coller données en fonction de la date

Florian95

XLDnaute Nouveau
Bonjour,

je souhaite créer une macro pour copier les données de mon tableau de la feuille FP vers la feuile Data time.
La macro doit copier les données et les recoller en fonction de la date.

Merci de votre aide !

PS : fichier simplifié joint
 

Pièces jointes

  • FP Macro copie.xlsx
    25.6 KB · Affichages: 47
  • FP Macro copie.xlsx
    25.6 KB · Affichages: 54
  • FP Macro copie.xlsx
    25.6 KB · Affichages: 49

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro pour copier/coller données en fonction de la date

Bonsoir Florian, bonsoir le forum,

Peut-être comme ça :

Code:
Sub Macro1()
Dim F As Object 'déclare la variable F (onglet)
Dim D As Object 'déclare la variable D (onglet)
Dim R As Range 'déclare la variable R (Recherche)
Dim DEST As Range 'déclare la variable DEST (CEllule de DEstination)
Dim PL As Range 'déclare la variable PL (PLage)

Set F = Sheets("Fiche Paie") 'définit  l'onglet F
Set D = Sheets("Data Time") 'définit  l'onglet D
'définit la recherche R (recherche la date en B4  de l'onglet F dans la colonne 1 (=A) de l'onglet D
Set R = D.Columns(1).Find(F.Range("B4").Value, , xlFormulas, xlWhole)
'si il existe au moins une occurrence trouvée, définit la cellule de destination DEST
If Not R Is Nothing Then Set DEST = R.Offset(0, 3)
Set PL = F.Range("B2").CurrentRegion 'définit la plage PL
Set PL = PL.Offset(2, 3).Resize(PL.Rows.Count - 2, 3) 'redéfinit la palge PL
PL.Copy 'copie la plage PL
DEST.PasteSpecial (xlPasteValues) 'colles les valeurs de la plage PL dans la cellule de destination DEST
End Sub
 

job75

XLDnaute Barbatruc
Re : Macro pour copier/coller données en fonction de la date

Bonjour Florian95, hello Robert,

Une solution utilisant un tableau VBA :

Code:
Sub Copie()
Dim mois As Range, t, i As Variant
With Sheets("Fiche Paie")
  Set mois = .[B2] 'peut varier
  t = .Range(mois(3, 4), mois(65000, 4).End(xlUp)) 'matrice
End With
With Sheets("Data Time")
  i = Application.Match(mois(3), .[A:A], 0)
  If IsNumeric(i) Then .Cells(i, 4).Resize(UBound(t)) = t
End With
End Sub
L'exécution est plus rapide s'il y a beaucoup de mois à copier.

Bien sûr il faudra ajouter une boucle pour les analyser.

A+
 

job75

XLDnaute Barbatruc
Re : Macro pour copier/coller données en fonction de la date

Re,

Avec CurrentRegion comme Robert c'est mieux en effet :

Code:
Sub Copie()
Dim mois As Range, t, i As Variant
Set mois = Sheets("Fiche Paie").[B2].CurrentRegion 'peut varier
t = mois(3, 4).Resize(mois.Rows.Count - 2) 'matrice, plus rapide
With Sheets("Data Time")
  i = Application.Match(mois(3, 1), .[A:A], 0)
  If IsNumeric(i) Then .Cells(i, 4).Resize(UBound(t)) = t
End With
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Macro pour copier/coller données en fonction de la date

Re,

Une dernière solution :

Code:
Sub Copie()
Dim mois As Range, t, i As Variant
Set mois = Sheets("Fiche Paie").[B2] 'peut varier
t = mois(3, 4).Resize(Application.Count(mois.EntireColumn) - 1) 'matrice
With Sheets("Data Time")
  i = Application.Match(mois(3), .[A:A], 0)
  If IsNumeric(i) Then .Cells(i, 4).Resize(UBound(t)) = t
End With
End Sub
C'est celle que je préfère car elle permet, si nécessaire, d'avoir des tableaux de mois jointifs.

A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro pour copier/coller données en fonction de la date

Bonjour le fil, bonjour le forum,

@Job... Il faut que tu arrêtes de picoler ces alcools forts ! Tu vois le résultat, Malin ? Tu deviens transparent...
@Florian... pas très gentil pour Job qui en plus propose des solutions plus efficaces et élaborées que la mienne...
 

Florian95

XLDnaute Nouveau
Re : Macro pour copier/coller données en fonction de la date

Mea culpa !!

@Robert : j'avais opté pour cette solution quelques secondes après avoir vu le poste. Merci encore

@Job : j'ai vu vos solutions à l'instant et merci beaucoup pour vos solutions que je vais regarder également ! merci aussi !
 

Discussions similaires

Statistiques des forums

Discussions
312 857
Messages
2 092 865
Membres
105 545
dernier inscrit
pourmanger