Microsoft 365 Excel - effacer des lignes des 3 derniers jours de mois + insérer des lignes

JOELLEDV

XLDnaute Nouveau
Bonjour,

j'essaie de constituter pas à pas un fichier (dont modèle ci-annexé-onglet DELON) dans celui-ci, j'ai plein de choses à faire et j'essaie de me débrouiller (merci les tutos:) mais un coup de main serait le bienvenu pour les points suivant ..
Il s'agit d'un fichier qu'un de mes clients va compléter et dont je devrai extraire les données via un fichier SAIAU pour les injecter dans un autre programme.. Bref, mon modèle doit donc suivre un canevas que mon client ne devrait pas avoir à modifier sauf que..

je ne connais rien au VBA (j'essaie mais je n'arrive pas ..)

Ci-annexé le fameux modèle.. Un peu de clémence je suis novice et auto didacte.

1) le client va modifier lui même le mois et la date via les cellules C3 et C4. Il faudrait donc masquer les colonnes des éventuels 29, 30 et 31 jours de certains mois. Sachant que le client est susceptible de devoir ajouter une ligne dans le tableau si d'aventure un de ses travailleurs travaille sur plusieurs chantiers le même jour (donc en bref, nous aurons alors 2 lignes avec la même date)

2) SI justement le client insère une ligne comment se dépêtrer du problème des dates qui font références à la cellule précédente +1 mais aussi comment faire pour que les différentes formules se recopient dans la ligne qu'il insère?

3) comment pourrais-je proposer au client d'adapter tous les mois le modèle et ensuite générer (automatiquement) des onglets par travailleur repris dans l'onglet intitulé "liste ouvriers (il pourrait y avoir jusqu'à 100 travailleurs) --> eureka j'ai résolu ce point :)

4) j'ai tenté une macro que j'ai liée au bouton en C3.. Ensuite j'ai supprimé le visual basic créé mais j'ai chaque fois un message d'erreur en changeant de mois mais je n'arrive pas à désactiver l'affectation à cette macro supprimée :


Merci d'avance
Joelle
 

Pièces jointes

  • test pour février.xlsm
    74.2 KB · Affichages: 8
Dernière édition:

JOELLEDV

XLDnaute Nouveau
Bonsoir à tous, bonsoir @JOELLEDV

Juste une question préliminaire :
Est-ce-que tes clients ont tous Microsoft365 ?​
(peut-on utiliser des fonctionnalités propre à MS365 ?)​

Amicalement
Alain
Bonjour, excusez-moi il faut croire que je n'ai pas validé ma réponse la dernière fois puisque je ne la vois plus.. En réalité je vois Excel version 2108 (build 74326.20738 Office - je n'ai pas trouvé cela dans la liste déroulante. Donc non je ne peux garantir l'utilisation Microsoft 365... Merci d'avance si vous arrivez quand même à m'aider car je devrais arriver à finaliser ce fichier au plus vite :(
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonne nuit !
J'ai créer des tableau structurés dans les onglets "Liste Ouvriers", "Chantier Liste" et dans l'onglet modèle.
Le nom de l'onglet modèle change si l'on change le nom de l'ouvrier.
Pour régler le problème de formule lors des insertions suppressions de lignes, j'ai mis les dates en dur.
Lorsque l'on change la période (Mois ou Année) la taille du tableau et les dates sont mises à jour automatiquement.
Pour insérer une nouvelle ligne après une date, il suffit de faire un double clic sur cette date et acquiescer à la question posée.
Le code se trouve dans le code de ThisWorkbook ou je gère les 2 événements Workbook_SheetChange et Workbook_SheetBeforeDoubleClick
Enrichi (BBcode):
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     Dim Nf$, Liste, Continuer As Boolean, i As Long, _
         DateDéb As Date, Nbjours As Byte, Dates(), Nr As Long
     Dim Lo As ListObject
     Liste = [_Tb_Ouvriers]
     Nf = Sh.Name
     Continuer = False
    
     For i = 1 To UBound(Liste, 1)
          If Liste(i, 4) = Nf Then Continuer = True: Exit For
     Next
     If Not Continuer Then Exit Sub
     Select Case Target.Address
          Case Sh.[_Mois].Address, Sh.[_Année].Address
          Case Sh.[_Nom].Address
               Sh.Name = [_Nom]: Continuer = False
          Case Else
          Continuer = False
     End Select
     If Not Continuer Then Exit Sub   
    
     DateDéb = DateValue("1 " & [_Mois] & " " & [_Année])
     Nbjours = CLng(WorksheetFunction.EoMonth(DateDéb, 0)) - CLng(DateDéb) + 1
     ReDim Dates(0 To Nbjours - 1)
     For i = 0 To Nbjours - 1
          Dates(i) = CLng(DateDéb) + i
     Next
    
     Set Lo = Sh.ListObjects(1)   
     With Lo
          Application.ScreenUpdating = False
          Application.EnableEvents = False
          Nr = .ListRows.Count
          If Nr > Nbjours Then .ListRows(Nr).Range.Offset(Nbjours - Nr + 1).Resize(Nr - Nbjours).Clear
          .ListColumns(2).DataBodyRange.ClearContents
          .Resize .Range.Resize(Nbjours)
          .ListColumns(2).DataBodyRange.Value = WorksheetFunction.Transpose(Dates)
          Application.EnableEvents = True
          Application.ScreenUpdating = True
     End With 
End Sub
Enrichi (BBcode):
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)    
     Dim Nf$, Liste, Continuer As Boolean, i As Long, lgn As Long, Lr As Long, Rép
     Dim Lo As ListObject
     Liste = [_Tb_Ouvriers]
     Nf = Sh.Name
     Continuer = False
    
     For i = 1 To UBound(Liste, 1)
          If Liste(i, 4) = Nf Then Continuer = True: Exit For
     Next
     If Not Continuer Then Exit Sub
    
     Set Lo = Sh.ListObjects(1)
     If Intersect(Target, Lo.ListColumns(2).Range) Is Nothing Then Exit Sub
    
     Cancel = True
     lgn = Target.Row
     Rép = MsgBox("Insérer une ligne " & Format(Target.Value, "dddd d mmmm yyyy") & " sous cette ligne ?", vbYesNo, Nf)
     If Rép = vbNo Then Exit Sub
     Lr = Target.Row - Lo.Range.Row + 1
     Lo.ListRows.Add Lr + 1
     Intersect(Sh.Rows(lgn + 1), Lo.ListColumns(2).Range).Value = Target.Value    
End Sub

Amicalement
Alain
 

Pièces jointes

  • test pour février B.xlsm
    81.4 KB · Affichages: 3

Discussions similaires

Réponses
14
Affichages
639

Statistiques des forums

Discussions
311 727
Messages
2 081 962
Membres
101 852
dernier inscrit
dthi16088