VBA recopier une année

  • Initiateur de la discussion Initiateur de la discussion C@thy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

C@thy

XLDnaute Barbatruc
Bonjour le forum,

je dispose de dates en colonne A et de montants en colonne B à BG.

Chaque année on recopie (à la main!) les valeurs des colonnes B à BG de l'année en cours vers l'année suivante,
et pour les dates de la colonne A on fait une série incrémentée des jours ouvrés (= tous les jours, même les fériés, sauf les samedi et les dimanche).

Le but est donc d'automatiser la chose par macro.

Il faut donc
1- créer une série incrémentée des jours ouvrés pour l'année à venir en colonne A, du 1er jour ouvré de l'année (qui peut être le 1er janvier si il tombe en semaine) au dernier jour ouvré de l'année

2- sélectionner le 1er jour de l'année en cours qui n'est pas un samedi, ou un dimanche jusqu'au dernier jour ouvré (= hors samedi et dimanche) et copier

3- coller les cellules dans la nouvelle plage.

4- formater la nouvelle plage avec les mêmes couleurs que l'ancienne

Problème : il n'y a pas forcément le même nombre de jourds ouvrés d'une année sur l'autre...🙄

J'ai commencé à écrire du code, mais j'ai quelques soucis... et je ne vois pas trop comment m'en sortir, aussi toute aide serait la bienvenue.

Un super grand MERCI à vous,

Big bisous

C@thy
 

Pièces jointes

Re : VBA recopier une année

Bonjour à tous,
Salut Cathy,

Peux-tu essayer avec ceci :

VB:
Option Explicit


Sub CopierAnnée()
    Dim Derl%
    Derl = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
    Cells(Derl + 1, 1) = DateSerial(Year(Date) + 1, 1, 1)
    Range(Cells(Derl + 1, 1), Cells(Derl + 524, 1)).DataSeries Rowcol:=xlColumns, Type:=xlChronological, Date:= _
            xlWeekday, Step:=1, Stop:=DateSerial(Year(Date) + 2, 12, 31), Trend:=False
    Rows(Derl).Copy
    Rows(Derl & ":" & Derl + 524).Select
    Selection.PasteSpecial Paste:=xlPasteFormats
    Cells(Derl + 1, 1).Select
End Sub

Bises et A++
A+ à tous
 
Re : VBA recopier une année

Bises C@thy
Salut JC

une proposition:

Code:
Sub annee(an)
ligne = 9
For n = CDate("01/01/" & an) To CDate("31/12/" & an)
 If Weekday(n) <> 1 And Weekday(n) <> 7 Then
  Range("A" & ligne) = n
  ligne = ligne + 1
 End If
Next
Sheets("SORTIE").Range("A10").Copy
ActiveSheet.Range("A9:A" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub



Sub test()
Call annee("2013")
End Sub
 
Re : VBA recopier une année

Mille Mercis à vous deux.

JC, les dates ça fonctionne très bien, et la couleur aussi, mais les valeurs ne sont pas recopiées.
deuxième bémol : il se peut que les dates futures existent déjà, mais que le reste des lignes soit vides, dans ce cas il ne faut pas rechercher la dernière ligne mais le 01/01 de l'année, ce qu'a bien vu PJ.

PJ, je suis en dépassement de capacité (erreur 6) sur le for 🙁

Bizz

C@thy
 
Re : VBA recopier une année

l'erreur se produt sur l'instruction
For n = CDate("01/01/" & an) To CDate("31/12/" & an)

j'ai essayé de mettre : an = year(date) mais ça ne marche pas mieux,
peut-être est-ce dans la définition de ma variable an,
je l'ai mise en integer.
J'ai essayé en string l'erreur est la même.

Merci à toi, PJ, tu vas surement comprendre mieux que moi de quoi il s'agit, mais ce n'est pas une grosse erreur.

Edit : j'ai bien vérifié, en 2013 le 1er janvier et le 31 décembre sont en semaine, donc les dates sont dans ma colonne A, mais pour d'autres années elles pourraient bien ne pas y être, et cela doit fonctionner quand même.

Bises
++

C@thy
 
Dernière édition:
Re : VBA recopier une année

Ah j'ai compris, Pierre-Jean, il ne faut pas juste recopier le format, mais aussi les données des colonnes,

et en-dessous de l'année en cours.

je m'étais sans doute mal exprimée.😱

En réalité : je dois sélectionner les données du 1er jour ouvré de 2013 (ou plutôt l'année en cours) jusqu'au dernier jour ouvré de 2013 (l'année en cours) et recopier toutes les données sur la ligne après le dernier jour ouvré de 2013 (l'année en cours)
(attention, la colonne A n'est pas obligatoirement vide, elle peut avoir déjà des dates de l'année suivante)

ensuite (ou avant, peu importe), je dois faire en colonne A une série de dates ouvrées de l'année suivante. Tu vois ce que je veux dire???

JC a bien commencé la chose, mais le seul truc c'est qu'il ne faut pas rechercher la dernière ligne de la colonne A mais la dernière ligne de l'année en cours

Bibises

C@thy
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
527
Réponses
11
Affichages
564
Réponses
8
Affichages
469
Retour