Créer des onglets avec un modèle pour une plage de date

Fermé
cigales73 Messages postés 6 Date d'inscription jeudi 30 novembre 2017 Statut Membre Dernière intervention 11 avril 2019 - 1 déc. 2017 à 20:40
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 19 déc. 2017 à 12:04
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
A voir également:

3 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
1 déc. 2017 à 22:00
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
0
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > cigales73
14 déc. 2017 à 21:05
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.
0
cigales73 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
15 déc. 2017 à 08:49
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
0
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.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
15 déc. 2017 à 19:49
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.
 
0
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.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > cigales73
Modifié le 16 déc. 2017 à 16:20
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.
0
cigales73 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
18 déc. 2017 à 11:18
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.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 déc. 2017 à 13:53
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
0
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > cigales73
18 déc. 2017 à 17:53
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.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
18 déc. 2017 à 18:29
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
0
cigales73 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
19 déc. 2017 à 09:20
bonjour
je dois être débile, je ne comprends pas.
j'ai copié la semaine1 jusqu'à la semaine5.
je te joins mon fichier, est-ce que tu peux voir où je me suis trompée ? merci beaucoup.
https://www.cjoint.com/c/GLtiqFXLwK2
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > cigales73
19 déc. 2017 à 12:04
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
0