Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cours

Chri8Ed

XLDnaute Occasionnel
Bonjour à tous

Je souhaiterais pourvoir recopier toutes les données contenues de ma feuille « DATA » dans mon « TABLEAU »
(Il n’y a que 5 lignes de remplies dans mon exemple, Mais ce nombre de ligne peut varier en plus ou moins au cours des mois).

De manière que cette recopie se fasse dans la première cellule vide, soit dans la cellule B17 dans mon exemple
Mais surtout de manière que les dates contenues dans la colonne B de ma feuille « DATA » prennent la valeur du mois en cours si la date du jour est inférieure au 20 du mois, soit la date du mois suivant si elle est postérieure au 20.

Exemple si nous sommes le 15 Décembre
La date du 05/01/14 en B5 dans DATA devienne 05/12/14 en B17
Si nous somme le 21 Décembre
La date du 05/01/14 en B5 dans DATA devienne 05/01/15 en B17
(Les date des jours ne doivent pas changer)

Je n’arrive pas à trouver de solution stable
Si quelqu’un à une idée ou a déjà réalisé de genre de macro ???
Je veux bien son aide

Merci d'avance
Cordialement
 

Pièces jointes

  • Rcopie data avec MAJ de la date.xlsm
    16.6 KB · Affichages: 30
  • Rcopie data avec MAJ de la date.xlsm
    16.6 KB · Affichages: 38
  • Rcopie data avec MAJ de la date.xlsm
    16.6 KB · Affichages: 39

Papou-net

XLDnaute Barbatruc
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Bonjour Chri8Ed,

Voici ton fichier modifié.

Un clic sur le bouton Démo mettra ton tableau à jour.

Mais surtout de manière que les dates contenues dans la colonne B de ma feuille « DATA » prennent la valeur du mois en cours si la date du jour est inférieure au 20 du mois, soit la date du mois suivant si elle est postérieure au 20
Ce point est à confirmer mais, dans le doute, j'ai considéré qu'on ne passait au mois suivant qu'à compter du 21.

Cordialement.
 

Pièces jointes

  • Rcopie data avec MAJ de la date.xlsm
    25.8 KB · Affichages: 33
  • Rcopie data avec MAJ de la date.xlsm
    25.8 KB · Affichages: 40
  • Rcopie data avec MAJ de la date.xlsm
    25.8 KB · Affichages: 42
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Bonjour à tous

Même remarque que Papou-net quant à la date limite. (dans l' " énoncé" la date du 20 n'est pas prise en compte.

une autre version

Code:
Sub Chri8Ed()
 Dim DerLigS As Long, DerLigC As Long
 Dim Plage, i

 DerLigS = Worksheets("Data").Range("B" & Rows.Count).End(xlUp).Row
 DerLigC = Worksheets("Tableau").Range("B" & Rows.Count).End(xlUp).Row + 1
 Plage = Worksheets("Data").Range("B1:I" & DerLigS)

 For i = LBound(Plage) To UBound(Plage)
        Plage(i, 1) = DateSerial(Year(Plage(i, 1)), Month(Date) + 1 * Day(Plage(i, 1)) > 20, Day(Plage(i, 1)))
 Next

 Worksheets("Tableau").Range("B" & DerLigC).Resize(UBound(Plage, 1), UBound(Plage, 2)) = Plage

End Sub

A+
 

Chri8Ed

XLDnaute Occasionnel
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Bonjour Papou-net

Merci tout d'abord pour ton aide

Ce point est à confirmer mais, dans le doute, j'ai considéré qu'on ne passait au mois suivant qu'à compter du 21.
Je confirme, c'est bien ce que j'attendais

Par contre, je vois que je n'ai pas mis assez d'exemples
Car c'est toutes les dates qui doivent se mettre au même mois
Je détaille :
Le 20 du mois est passé, 21 décembre donc par exemple
les dates du 05/01/14 doivent devenir 05/01/15
La date du 15/01/14 doit devenir 15/01/15
La date du 20/01/14 Doit devenir 20/01/15
Le date du 25/01/14 Doit devenir 25/01/15 (Celle-là est Ok dans ta solution :eek:)

Si nous sommes avant le 21 du mois, Soit le 20 décembre par exemple
les dates du 05/01/14 doivent devenir 05/12/14
La date du 15/01/14 doit devenir 15/12/14
La date du 20/01/14 Doit devenir 20/12/14
Le date du 25/01/14 Doit devenir 25/12/14

La recopie semble être parfaite, mais c'est la gestion des dates qui pause problème
Excuse moi si je n'ai pas su être assez clair dans ma demande.

A+
 

Papou-net

XLDnaute Barbatruc
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

RE:

Si j'ai bien compris, c'est le 20 du mois en cours qui fait référence, et pas celui de la date à recopier?

Je te propose donc de tester le fichier corrigé ci-joint.

A +

Cordialement.
 

Pièces jointes

  • Rcopie data avec MAJ de la date-1.xlsm
    25.9 KB · Affichages: 32

Chri8Ed

XLDnaute Occasionnel
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Bonjour Paf

Merci également pour ton aide

La gestion de la recopie est parfaite
Mais curieusement les dates se mettent pour les mois de novembre 2013 et décembre 2013
Comme nous sommes en décembre 2014
Suivant que nous sommes avant le 21 ou après le 20 décembre
Les dates désirées ne peuvent être que décembre 2014 ou janvier 2015
Les jours comme je l'avais mis, eux ne changent jamais
Mais je vois que manifestement, je n'ai pas su me faire comprendre.
excuse-moi de ne pas avoir été assez clair

a+
 

Chri8Ed

XLDnaute Occasionnel
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Re Papou-net

Si j'ai bien compris, c'est le 20 du mois en cours qui fait référence, et pas celui de la date à recopier?

Exactement, c'est bien cela
ET cette nouvelle solution est bonne

Par contre je pense que je vais avoir un problème dans mon fichier Originale
Il faudrait que ce ne soit pas en Insertion, mais en Recopie
Car j'ai des formules dans d'autres colonnes après la colonne I (Elles ne sont pas présentes dans mon fichier exemple)
Et aussi par ce que je suis sous forme de tableau.

Je vais faire l'essai de ce pas

a+
 

Chri8Ed

XLDnaute Occasionnel
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Re Papou-net

Je viens de faire l'essai dans mon tableau originale
De fait j'obtiens une erreur 1004
Pas de cellules correspondantes.

Je ne sais pas si cette erreur est du au fait que ce soit en insertion ???
Probablement quand même, car on ne peut pas faire d’insertion dans un tableau.

A+
 

Papou-net

XLDnaute Barbatruc
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

RE:

Vois si la modification suivante convient:

Code:
Sub Recopie()
Dim Cel As Range, Col As Integer, Dte As Date, Lg As Integer

For Each Cel In Feuil2.Range("B:b").SpecialCells(xlCellTypeConstants)
  Dte = Day(Cel) & "/" & Month(Date) & "/" & Year(Date)
  If Day(Date) > 20 Then Dte = DateAdd("m", 1, Dte)
  With Feuil1
    Lg = .Range("B" & Rows.Count).End(xlUp).Row + 1
    .Range("B" & Lg & ":i" & Lg).Insert
    Feuil2.Range("B" & Cel.Row & ":I" & Cel.Row).Copy .Range("B" & Lg & ":I" & Lg)
    .Range("B" & Lg) = Dte
  End With
Next
End Sub
A défaut, peux-tu joindre ton fichier réel afin d'avoir tous les éléments en main?

Cordialement.
 

Papou-net

XLDnaute Barbatruc
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Une nouvelle version, avec les données en tableau nommé "Tableau1".

Ca fonctionne correctement, à condition qu'il n'y ait pas de lignes vides dans le tableau.

Bonne soirée.

Cordialement.
 

Pièces jointes

  • Rcopie data avec MAJ de la date-2.xlsm
    27.2 KB · Affichages: 37

Paf

XLDnaute Barbatruc
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

re

une correction qui fonctionne

Code:
For i = LBound(Plage) To UBound(Plage)
    If Day(Plage(i, 1)) > 20 Then
        Plage(i, 1) = DateSerial(Year(Plage(i, 1)), Month(Date) + 1, Day(Plage(i, 1)))
    Else
        Plage(i, 1) = DateSerial(Year(Plage(i, 1)), Month(Date), Day(Plage(i, 1)))
    End If
Next

A+

edit :

ou bien
Code:
For i = LBound(Plage) To UBound(Plage)
        Plage(i, 1) = DateSerial(Year(Plage(i, 1)), Month(Date) - (1 * Day(Plage(i, 1)) > 20), Day(Plage(i, 1)))
Next
 
Dernière édition:

Chri8Ed

XLDnaute Occasionnel
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Bonjour Papou-net

J'ai bien essayé ta dernière solution hier soir
Mais cela ne fonctionne pas, car j'ai bien des lignes vides dans mon tableau
et je ne peux pas m'en passer.
J'ai fait pas mal d'essais, mais cela parait incontournable
Les tableaux offrent certains avantages
Mais en contre-partie ils procurent aussi certains désavantages

Par contre, c'est la gestion des dates qui m'importe le plus
Si je dois sélectionner la première cellule vide où doit s'opérer la recopie
Ce n'est pas vraiment grave.
Comme la gestion de ces dates est maintenant Ok
Si tu peux modifier ta macro pour que cette recopie se fasse sur la ligne active
Cela pourra très bien me satisfaire

A+
 

Papou-net

XLDnaute Barbatruc
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Bonjour Chri8Ed,

Ma compréhension s'améliore avec tes explications supplémentaires.

Voici donc une 3ème version qui devrait te convenir. La structure du tableau avec ses lignes vides est préservée.

Espérant la question résolue.

A +

Cordialement.
 

Pièces jointes

  • Rcopie data avec MAJ de la date-3.xlsm
    28 KB · Affichages: 34

Chri8Ed

XLDnaute Occasionnel
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

Bonjour

Je te remercie pour ta persévérance
Dans ton exemple, effectivement cela fonctionne bien
Mais dès que je l’intègre dans mon fichier
J'ai une erreur 1004
La méthode Range de l'objet_worksheteet a échoué
La ligne en surbrillance est :
Code:
Lg = .Range("Tableau1").Columns(1).SpecialCells(xlCellTypeConstants).Count + 1

Mais je m’interroge sur Tableau1 ?
Je pense que tu cible mon tableau ?
Je pourrais très bien avoir plusieurs tableaux dans mon fichier
comment savoir le N° de celui-ci ?

A+
 

Papou-net

XLDnaute Barbatruc
Re : Recopie de données entre feuilles avec MAJ des dates en fonction du mois en cour

RE:

Mais je m’interroge sur Tableau1 ?
Je pense que tu cible mon tableau ?
Je pourrais très bien avoir plusieurs tableaux dans mon fichier
comment savoir le N° de celui-ci ?
Effectivement, j'ai oublié de te préciser de remplacer "Tableau1" par le nom de ton tableau. Pour retrouver celui-ci, tu sélectionnes l'ensemble de ses cellules et tu obtiendras son nom dans la barre d'adresse des cellules.

Cordialement.
 

Discussions similaires

Réponses
15
Affichages
426

Statistiques des forums

Discussions
312 078
Messages
2 085 110
Membres
102 783
dernier inscrit
Basoje