Créer des onglets avec un modèle pour une plage de date
cigales73
Messages postés
6
Statut
Membre
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
bonjour
j'ai un onglet "matrice" que je veux dupliquer par rapport à une plage de date bien précise.
J'ai créé un onglet "période de paie".
J'ai créé une macro pour que la matrice se multiplie en fonction des dates mais je n'arrive pas à modifier la plage des dates dans la macro.
enfin j'espère que mon explication est claire !!
est-ce que quelqu'un peut m'aider ?
merci beaucoup.
https://www.cjoint.com/c/GLbtKMgiXi1
j'ai un onglet "matrice" que je veux dupliquer par rapport à une plage de date bien précise.
J'ai créé un onglet "période de paie".
J'ai créé une macro pour que la matrice se multiplie en fonction des dates mais je n'arrive pas à modifier la plage des dates dans la macro.
enfin j'espère que mon explication est claire !!
est-ce que quelqu'un peut m'aider ?
merci beaucoup.
https://www.cjoint.com/c/GLbtKMgiXi1
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonsoir, tu n'expliques pas ce que tu veux faire, ni ce qui ne fonctionne pas.
à tout hasard, je suggère ceci:Option Explicit Sub copie_matrice() Dim i As Integer, z As Integer Dim x As Date, y As Date Dim année As String année = Val(InputBox("Quelle année ?")) If année = 0 Then Exit Sub x = DateSerial(année, 1, 1) - 1 y = DateSerial(année, 1, 3) z = y - x For i = 1 To z Sheets("matrice").Copy After:=Sheets(i) ActiveSheet.Name = Format(x + i, "dd-mmm-yyyy") ActiveSheet.Range("C3") = Format(x + i, "dd-mmm-yyyy") Next i End Sub-
bonjour
excusez-moi d'avoir répondu si tard.
ce que j'aimerais, c'est créer des onglets par jour pour un mois.
quand j'ouvre mon fichier, je voudrais que les onglets de "janvier" s'ouvre automatiquement (voir onglet "PERIODE DE PAIE"
je pensais créer une macro en haut de chaque colonne de chaque mois. merci par avance
https://www.cjoint.com/c/GLom1YvwRg2- peux-tu prendre un peu de temps et être plus précis?
tu avais écrit "J'ai créé une macro pour que la matrice se multiplie en fonction des dates". où se trouve le code de cette macro?
voudrais-tu que les boutons en ligne 2 de l'onglet "PERIODE DE PAIE" soit associés à une macro qui créerait un onglet pour chacune des valeurs dans la colonne sous le bouton, et que ces onglets soient une copie de l'onglet "MATRICE"?
merci d'être le plus factuel et le plus précis possible. - bonjour
oui c'est ça, tu as tout compris, il faut que la "matrice" soit copiée autant de fois que de date dans la colonne de chaque mois de l'onglet "PERIODE DE PAIE".
par exemple pour la période de paie de janvier, j'aimerais appuyer sur le bouton macro "janvier" et que tous les onglets soient créés et que sur chaque onglet, la date soit mise aussi.
je n'ai pas réussi à créer la macro pour chaque mois.
ensuite, je fais "enregister sous" et je refais la manipulation pour le mois suivant, ainsi de suite.
merci d'avance
-
bonjour
oui c'est ça, tu as tout compris, il faut que la "matrice" soit copiée autant de fois que de date dans la colonne de chaque mois de l'onglet "PERIODE DE PAIE".
par exemple pour la période de paie de janvier, j'aimerais appuyer sur le bouton macro "janvier" et que tous les onglets soient créés et que sur chaque onglet, la date soit mise aussi.
je n'ai pas réussi à créer la macro pour chaque mois.
ensuite, je fais "enregister sous" et je refais la manipulation pour le mois suivant, ainsi de suite.
merci d'avance.
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonsoir, je propose ceci: https://www.cjoint.com/c/GLpsTYK64L1
je n'ai pas fait de bouton. il faut sélectionner une cellule dans l'onglet "PERIODE DE PAIE" , puis faire maj-ctrl-K.
-
bonjour
c'est parfait, mais maintenant j'aimerais que les 7 premiers jours soient récapitulés dans la semaine 1, les 7 jours suivants dans la semaine 2, les 7 jours suivants dans la semaine 3 et ce jusqu'à la semaine 5.
est-ce possible ? je voudrais utiliser ce fichier tous les ans aussi. merci beaucoup.- tout est possible. il est cependant mieux de savoir à l'avance tout ce qu'on veut faire, cela permet de choisir dès le début la meilleure solution.
commençons pas le plus facile: ne peux-tu pas utiliser le fichier tel qu'il est chaque année, en changeant simplement les dates dans l'onglet "periode de paie"? souhaites-tu faire quelque-chose de plus?
pour le récapitulatif par semaine, j'imagine que tu souhaites "simplement" faire comme tu as fait dans SEMAINE1, mais tu veux que les formules s'adaptent en fonction des noms des feuilles de chaque jour.
c'est bien cela?
je proposerais ceci:
- tu ferais "à la main" une feuille MATRICESEMAINE (qui est sans doute déjà faite, c'est semaine1
- la macro créerait pour chaque semaine de la colonne dans "periode de paie" une feuille recopiée de matricesemaine, l’appellerait comme tu décides (peut-être avec le nom du premier jour de la semaine), et modifierait le titre en A1, et les formules pour tenir compte des bons noms de feuilles. - bonjour
oui, je veux garder le même fichier et je change les dates dans l'onglet "PERIODE PAIE".
j'aimerais que la semaine 1 récupère toutes les informations des onglets "lundi au dimanche de la semaine 1" et ainsi de suite pour la semaine 2, la semaine 3 et l'onglet RECAP PAIE récupère les onglets de la semaine 1, 2 , 3, 4, et 5.
je suis obligée de créer une feuille par jour car les horaires et les informations ne sont pas toujours les mêmes.
tu vois, j'avais réussi à mettre un onglet DC avant le lundi et un onglet FC après le dimanche et le récapitulatif se faisait bien dans la SEMAINE1. mais je n'arrive à faire la même chose pour les semaines suivantes.
ensuite, j'enregistre sous JANVIER et je refais la manipulation pour février, ainsi de suite.
merci beaucoup.
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
je propose ceci:
- tu copies SEMAINE1 vers SEMAINE2, ..., SEMAINE5
- tu utilises le code suivant:Option Explicit Sub copie_matrice() Const c_shdate As String = "PERIODE DE PAIE" Const c_shmatr As String = "MATRICE" Const c_premlig As Long = 3 Dim nomdate As String Dim nomdebsem As String, dcur As Date Dim cellcur As Range Dim nsem As Integer If ActiveSheet.Name = c_shdate Then Set cellcur = Worksheets(c_shdate).Cells(c_premlig, ActiveCell.Column) nomdebsem = "" nsem = 1 Do While IsDate(cellcur) dcur = cellcur nomdate = Replace(cellcur, "/", "-") If nomdebsem = "" Then nomdebsem = nomdate End If Sheets(c_shmatr).Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = nomdate If Weekday(dcur) = vbSunday Then Call recapsemaine(nsem, nomdebsem, nomdate) nsem = nsem + 1 nomdebsem = "" End If Set cellcur = cellcur.Offset(1, 0) Loop If nomdebsem <> "" Then Call recapsemaine(nsem, nomdebsem, nomdate) End If End If End Sub Sub recapsemaine(numsem As Integer, debut As String, fin As String) Const c_form As String = "DC:FC" Debug.Print numsem, debut, fin Dim wssem As Worksheet Dim cell As Range Set wssem = Worksheets("SEMAINE" & numsem) wssem.[A1] = "RECAP SEMAINE DU " & debut & " AU " & fin For Each cell In wssem.UsedRange If cell.HasFormula Then If InStr(cell.Formula, c_form) Then cell.Formula = Replace(cell.Formula, c_form, "'" & debut & ":" & fin & "'") End If End If Next cell End Sub-
je n'ai pas compris.
ça veut dire quoi "tu copies SEMAINE1 vers SEMAINE2, ..., SEMAINE5 "
c'est le "vers" je dois faire quoi ?
j'ai copié ta formule dans le développeur et ensuite j'ai lancé l'exécution, mais aucun résultat.
merci- tu dois remplacer SEMAINE2 à 5 par une copie de SEMAINE1.
sans aucun résultat? cela n'a pas créé des feuilles par jour, et modifié les formules dans SEMAINE1?
attention, il faut que les cinq feuilles semaines soient intactes (comme SEMAINE1 était dans le fichier que tu as partagé, avec les formules contenant DC:FC) pour que le code fonctionne. - petite améliortaion, ceci fonctionera même si les formules dans les feuilles semaine ont été adaptées pour un mois:
Option Explicit Sub copie_matrice() Const c_shdate As String = "PERIODE DE PAIE" Const c_shmatr As String = "MATRICE" Const c_premlig As Long = 3 Dim nomdate As String Dim nomdebsem As String, dcur As Date Dim cellcur As Range Dim nsem As Integer If ActiveSheet.Name = c_shdate Then Set cellcur = Worksheets(c_shdate).Cells(c_premlig, ActiveCell.Column) nomdebsem = "" nsem = 1 Do While IsDate(cellcur) dcur = cellcur nomdate = Replace(cellcur, "/", "-") If nomdebsem = "" Then nomdebsem = nomdate End If Sheets(c_shmatr).Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = nomdate If Weekday(dcur) = vbSunday Then Call recapsemaine(nsem, nomdebsem, nomdate) nsem = nsem + 1 nomdebsem = "" End If Set cellcur = cellcur.Offset(1, 0) Loop If nomdebsem <> "" Then Call recapsemaine(nsem, nomdebsem, nomdate) End If End If End Sub Private Sub recapsemaine(numsem As Integer, debut As String, fin As String) Debug.Print numsem, debut, fin Dim wssem As Worksheet Dim cell As Range Dim parenthese As Integer, exclamation As Integer Dim ancienneformule As String, debutformule As String, finformule As String Set wssem = Worksheets("SEMAINE" & numsem) wssem.[A1] = "RECAP SEMAINE DU " & debut & " AU " & fin For Each cell In wssem.UsedRange If cell.HasFormula Then ancienneformule = cell.Formula parenthese = InStr(ancienneformule, "(") exclamation = InStr(ancienneformule, "!") If parenthese > 0 And exclamation > parenthese Then debutformule = Left(ancienneformule, parenthese) finformule = Right(ancienneformule, Len(ancienneformule) - exclamation + 1) cell.Formula = debutformule & "'" & debut & ":" & fin & "'" & finformule End If End If Next cell End Sub - quelques points:
- tu as laissé une fois de trop "end sub" en fin de code
- en copiant le code, tu as "cassé" le lien entre la macro et la touche maj-ctrl-K (pour rétablir: ALT+F8, tu sélectionnes ta macro et Options en bas)
- en ajoutant des lignes blanches au milieu de la feuille "periode de paie", la macro s’arrête après la première semaine
-