2016-12-05 3 views
-1

Dans la feuille INPUT, les lignes de données pour la planification de semaine sont saisies. Plusieurs lignes par jour est possible. La colonne A contient les dates de la semaine d'origine de l'horaire. Lorsque la planification complète est définie dans la feuille INPUT (disons 15 lignes par 10 colonnes de données), une macro peut être exécutée qui copie la planification dans la feuille OUTPUT et la crée pour une année complète. Par conséquent, je code VBA pour copier le bloc de données et le coller sous la semaine précédente et mettre à jour les dates par 7 jours.Ajouter une semaine à une plage de dates dans VBA

Je rencontre des difficultés avec la fonction DateAdd.

Est-ce que quelqu'un connaît une bonne solution?

Dim i As Integer 
Dim rowCount As Long 
Dim columnCount As Long 

Sheets("OUTPUT").Select 
Sheets("OUTPUT").Cells.Clear 
Sheets("INPUT").Select 
rowCount = Sheets("INPUT").Range("A6", Sheets("INPUT").Range("A6").End(xlDown)).Rows.Count - 1 
columnCount = Sheets("INPUT").Range("A5", Sheets("INPUT").Range("A5").End(xlToRight)).Columns.Count - 1 
Range("A5").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.Copy 
Sheets("OUTPUT").Select 
Range("A1").Select 
ActiveSheet.Paste 

For i = 1 To 51 

    Range("A" & Rows.Count).End(xlUp).Select 
    Range(Selection, Selection.Offset(-rowCount, columnCount)).Copy 
    Range("A" & Rows.Count).End(xlUp).Select 
    ActiveCell.Offset(1, 0).PasteSpecial 
    Range("A" & Rows.Count).End(xlUp).Select 
    Range(Selection, Selection.Offset(-rowCount, 0)).Value = DateAdd("d", 7, Range(Selection, Selection.Offset(-rowCount, 0)).Value) 

Next i

+1

Évitez d'utiliser le produit ... http: //stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros – Rdster

+0

http://stackoverflow.com/questions/16259166/add -x-nombre-de-jours-a-date-avec-vba-in -excel/16259223 # 16259223 –

+2

Je suis enclin à fermer ceci en tant que doublon sauf si vous pouvez montrer un code supplémentaire qui démontre comment ce problème diffère des autres Q similaires tels que celui lié ci-dessus (au-delà de votre 'Selection', qui est vraiment hors de propos au problème à portée de main). –

Répondre

1
Variable= DateAdd("d", 7, Variable) 
0

Je ne suis pas tout à fait sûr de ce que vous faites avec columnCount donc il faudra peut-être modifiée, mais je pense que quelque chose comme cela devrait vous aider à démarrer

Dim dateVals 
Dim destRange as Range 
Dim cl as Range 
For i = 1 To 51 
    ' initial data 
    ' this gets a range from the last cell in column A, offset by the rowCount variable, and resized based on row/col counters 
    Set rng = Range("A" & Rows.Count).End(xlUp).Offset(-rowCount).Resize(rowCount,colu‌​mnCount) 
    ' similar size range beginning in row after 'rng' 
    Set destRange = rng.Offset(rng.Rows.Count) 

    ' Instead of copying the cells/paste special, just transfer the values directly 
    ' Range(rng, rng.Offset(-rowCount, columnCount)).Copy 
    destRange.Value = rng.Value 

    ' Add 7 days to each cell value 
    ' I assume you only have date values in column 1 
    For Each cl in destRange.Columns(1).Cells 
     cl.Value = DateAdd("d", 7, CDate(cl.Value)) 
    Next 

Next i 
+0

Le contexte complet est; dans la feuille INPUT, les lignes de données pour l'horaire de la semaine sont saisies.Plusieurs lignes par jour est possible. Lorsque la planification complète est définie dans la feuille INPUT (disons 15 lignes par 10 colonnes), une macro peut être exécutée qui copie la planification dans la feuille OUTPUT et la crée pour une année complète. J'ai expérimenté avec votre code mais il ne fait que copier la dernière ligne. Il faut copier le bloc entier de 15 par 10 et changer les dates pour les 15 lignes. J'ai modifié le code ci-dessus pour afficher le scénario complet. – JoshuaTievoor

+0

Essayez 'Définir rng = Range (" A "& Rows.Count) .End (xlUp) .Offset (-rowCount) .Resize (rowCount, columnCount)' –

+0

Je reçois une erreur de type incompatibilité '13' lorsque je fais un pas par le 'cl.Value = DateAdd (" d ", 7, cl)' – JoshuaTievoor