XL 2019 VBA Date/semaine

Yazeubi

XLDnaute Junior
Bonjour,
Je cherche à créer automatiquement une colonne chaque semaine de l'année et que les données se remplissent toutes seule dans cette nouvelle colonne.
Ma demande est pour l'onglet "Indicateur PPPS" : (Il y a deux onglets avec la même demande mais pas les mêmes emplacement de cellule)
Créer une nouvelle colonne après la dernière semaine qui est S43 que l'on observe en Rouge en [BE;4]. Cette colonne est créée automatiquement en fonction de la date du jour. En l’occurrence le jour ou j’écris ce poste nous somme en Semaine 44 (S44). Cela signifie que la semaine prochaine dès lors que j’utiliserai ce code, une nouvelle colonne se créera et se nommera automatiquement (S45).
Une fois fait, il faut qu’automatiquement, la colonne [BH] de la ligne 3 à 42 soit copié dans la colonne [BF] de la ligne 3 à 42. Il faut que ce soit un copiage spécial qui ne met que les nombres et en aucun cas les formules.
A l'aide d'utilisation d'un Bouton ou Automatiquement.
Si cela est possible j'aimerais que cette demande soit faite sans l'utilisation d'un bouton mais bien automatiquement. Dès lors que j'ouvrerai le dossier tous les lundi ou autres jours de la semaine, qu'ils se mettent automatiquement à jours. La colonne avec les données seront automatiquement mis à jour chaque fois que j'ouvrerai le document.
Ma demande est terminée.
Merci beaucoup
 

Pièces jointes

  • Excel à automatiser.xlsx
    44.3 KB · Affichages: 5

Yazeubi

XLDnaute Junior
Bonjour,
Ci joint ma solution
Insertion d'une colonne, copie des données...

A+ François
Bonjour @fanfan38,

Je vous remercie pour le travaille que vous avez fournis. Il répond précisément à ma demande.

J'aimerai récupérer ce code et l'utiliser sur d'autre EXCEL, qui ont le même design, mais des positionnement de cellules différentes. Dans le code ci-dessous, je comprend comment changer les lignes en l’occurrence c'est le "4" et le "35" qui apparaît ci-dessous. J'ai cru comprendre que les colonnes sont définis selon le mot "en cours" et l'on recule d'un certains nombre de cellule. Mais je n'arrive pas à mettre le code sur un onglet différents ou même le copié dans un autre EXCEL et qu'il fonctionne.
Pouvez-vous m'aider ?
Merci

VB:
Option Explicit

Private Sub Workbook_Open()
  Dim col As Integer, prem_date As Single, nb_date_annee As Date, num_semaine As Integer
  nb_date_annee = DateValue("1 janvier " & (Year(Date)))
  prem_date = nb_date_annee
  num_semaine = Abs(Date - prem_date) / 7
  col = Rows(4).Find("en cours").Column
  If Cells(4, col - 3).Value = "s" & num_semaine Then Exit Sub 'pour ne pas faire 2 copies
  Columns(col - 2).Insert Shift:=xlToRight
  Range(Cells(4, col + 1), Cells(35, col + 1)).Copy
  'Selection.Copy
  Cells(4, col - 2).Select
  Selection.PasteSpecial Paste:=xlPasteValues
  Application.CutCopyMode = False
  Cells(4, col - 2).FormulaR1C1 = "s" & num_semaine
  Range("BG3").Select
End Sub
 

fanfan38

XLDnaute Barbatruc
Bonjour
VB:
Private Sub Workbook_Open() [B]'macro qui se lance à l'ouverture du fichier[/B]
  Dim col As Integer, prem_date As Single, nb_date_annee As Date, num_semaine As Integer, c As Range [B]'déclaration des variables[/B]
  nb_date_annee = DateValue("1 janvier " & (Year(Date))) [B]'la variable nb_date_annee prend la valeur du 1 janvier de l'année[/B]
  prem_date = nb_date_annee[B] 'changement de la date en numero[/B]
  Sheets("Indicateur PPPS").Select [B]' selection de la feuille adequat[/B]
  num_semaine = Abs(Date - prem_date) / 7 [B]'numero de la semaine=date du jour- 1° janvier de l'année/7 (valeur absolu: pas de virgule)[/B]
  col = Rows(4).Find("en cours").Column [B]'on recherche sur la ligne 4 la valeur "en cours" et la variable col devient la colonne trouvée[/B]
  If Cells(4, col - 3).Value = "s" & num_semaine Then Exit Sub[B] 'pour ne pas faire 2 copies[/B]
  Columns(col - 2).Insert Shift:=xlToRight[B] 'on insert une colonne 2 colonnes avant[/B]
  Range(Cells(4, col + 1), Cells(35, col + 1)).Copy [B]'on copy la colonne en cours[/B]
  Cells(4, col - 2).Select [B]' on se positionne sur la colonne adequat[/B]
  Selection.PasteSpecial Paste:=xlPasteValues [B]'et on copie les valeurs[/B]
  Application.CutCopyMode = False [B]'annulation du mode copie (vide le presse papier)[/B]
  Cells(4, col - 2).FormulaR1C1 = "s" & num_semaine [B]'on note le N° de la semaine ligne 4[/B]
  Range("BG3").Select
End Sub

A+ François
 

Yazeubi

XLDnaute Junior
Bonjour
VB:
Private Sub Workbook_Open() [B]'macro qui se lance à l'ouverture du fichier[/B]
  Dim col As Integer, prem_date As Single, nb_date_annee As Date, num_semaine As Integer, c As Range [B]'déclaration des variables[/B]
  nb_date_annee = DateValue("1 janvier " & (Year(Date))) [B]'la variable nb_date_annee prend la valeur du 1 janvier de l'année[/B]
  prem_date = nb_date_annee[B] 'changement de la date en numero[/B]
  Sheets("Indicateur PPPS").Select [B]' selection de la feuille adequat[/B]
  num_semaine = Abs(Date - prem_date) / 7 [B]'numero de la semaine=date du jour- 1° janvier de l'année/7 (valeur absolu: pas de virgule)[/B]
  col = Rows(4).Find("en cours").Column [B]'on recherche sur la ligne 4 la valeur "en cours" et la variable col devient la colonne trouvée[/B]
  If Cells(4, col - 3).Value = "s" & num_semaine Then Exit Sub[B] 'pour ne pas faire 2 copies[/B]
  Columns(col - 2).Insert Shift:=xlToRight[B] 'on insert une colonne 2 colonnes avant[/B]
  Range(Cells(4, col + 1), Cells(35, col + 1)).Copy [B]'on copy la colonne en cours[/B]
  Cells(4, col - 2).Select [B]' on se positionne sur la colonne adequat[/B]
  Selection.PasteSpecial Paste:=xlPasteValues [B]'et on copie les valeurs[/B]
  Application.CutCopyMode = False [B]'annulation du mode copie (vide le presse papier)[/B]
  Cells(4, col - 2).FormulaR1C1 = "s" & num_semaine [B]'on note le N° de la semaine ligne 4[/B]
  Range("BG3").Select
End Sub

A+ François
C'est plus clair,

Merci bonne journée.

Yazeubi
 

Discussions similaires