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   -
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

3 réponses

  1. 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
    0
    1. cigales73
       
      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
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > cigales73
         
        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
      2. cigales73 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
    2. cigales73
       
      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
  2. 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.
     
    0
    1. cigales73
       
      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
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > cigales73
         
        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
      2. cigales73 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
  3. 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
    0
    1. cigales73
       
      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
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > cigales73
         
        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
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
      3. cigales73 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
      4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > cigales73
         
        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