XL 2019 Date

le___destin

XLDnaute Occasionnel
Je veux créer une colone d'un tableau lorsque je rempli la premiere case emplie automatiquement les autre cellule jusqu'à la date du fin du moi
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous
Bonjour le fil, le forum,

En VBA je préfère nettement ceci, sans boucle :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not IsDate(Target(1)) Or Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
With Target.Resize(DateSerial(Year(Target), Month(Target) + 1, 1) - Target)
    .NumberFormat = Target.NumberFormat
    .DataSeries
    .Offset(.Count).Resize(Rows.Count - .Count - .Row + 1).Delete xlUp 'RAZ dessous
End With
Application.EnableEvents = True
End Sub
Bonne journée.
@job75 je connaissais pas cette methode de resize avec target (intéressant)

j'airais fait comme ca

VB:
Sub test2()
    Set Target = [A1]
    If Not IsDate(Target(1)) Or Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False

    With Target.Resize(Day(DateSerial(Year(Target), Month(Target) + 1, 0)) - Day(Target) + 1, 1)
        .NumberFormat = Target.NumberFormat
        .DataSeries
        .Offset(.Count).Resize(Rows.Count - .Count - .Row + 1).ClearContents
    End With

    Application.EnableEvents = True
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
et pour ne pas supprimer éventuellement des lignes au cas ou il y aurais d'autres tableaux a gauche ou a droite de cette colonnes
on ne clear que les 1/2/3 cellules en trop
VB:
Sub test2()
    Set Target = [A1]
    If IsDate(Target(1)) And Target.Count = 1 Then
        Application.EnableEvents = False
        With Target.Resize(Day(DateSerial(Year(Target), Month(Target) + 1, 0)) - Day(Target) + 1, 1)
            .NumberFormat = Target.NumberFormat
            .DataSeries
            Range(Target.Offset(30, 0), .Cells(.Count + 1)).ClearContents
        End With
        Application.EnableEvents = True
    End If
End Sub

ou meme encore plus simple
on clear avant
Code:
Sub test2()
    Set Target = [A1]
    If IsDate(Target(1)) And Target.Count = 1 Then
        Application.EnableEvents = False
        With Target.Resize(Day(DateSerial(Year(Target), Month(Target) + 1, 0)) - Day(Target) + 1, 1)
            .Cells(2).Resize(30).ClearContents
            .NumberFormat = Target.NumberFormat
            .DataSeries
        End With
        Application.EnableEvents = True
    End If
End Sub
 

le___destin

XLDnaute Occasionnel
Bonjour,

Essaie le code de job75 modifié :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not IsDate(Target(1)) Or Target.Count > 1 Then Exit Sub
If Target.Address <> "$K$11" Then Exit Sub
If Day(Target) <> 1 Then Exit Sub
Application.EnableEvents = False
[K12:K41] = ""
Rows("12:41").Hidden = False
With Target.Resize(DateSerial(Year(Target), Month(Target) + 1, 1) - Target)
    .NumberFormat = Target.NumberFormat
    .DataSeries
End With
With Application
  If .CountA([K39:K41]) < 3 Then
    Rows(41).Offset(-2 + .CountA([K39:K41])).Resize(3 - .CountA([K39:K41])).Hidden = True
  End If
End With
Application.EnableEvents = True
End Sub

Dans le classeur joint, j'ai ajouté des mises en forme pour colorer en bleu les samedis et dimanche. Les modifs sont seulement sur la feuille tab. Je peux les reporter sur les autres.

Daniel
merciiiii bien
juste un petit problem dans la somme des cellules
il garde des valeurs masque alors la resultat est fosse
 

danielco

XLDnaute Accro
Certaines cellules de la colonne J contiennent des formules et d'autres, des valeurs. Est-ce une erreur ?

y'a t'il solution aussi que si je saisi un valeur dans les cellule des colonnes J et I prend zéro si le jour samedi ou dimanche

Très exactement, que veux-tu ? Si c'est un samedi ou un dimanche, si tu saisis une valeur en colonne I, qu'elle ne soit pas prise en compte dans la formule de la colonne J, ou qu'elle soit effacée par une macro dans la colonne I ?

Daniel
 

danielco

XLDnaute Accro
J'ai supprimé ls macros situées dans les feuilles et je les ai remplacées par celle-ci, dans le module "ThisWorkbook". Elle ne s'applique qu'aux feuilles dont le nom commence par "tab" :

VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim C As Range
  If Left(Sh.Name, 3) <> "tab" Then Exit Sub
  If Target.Address = "$K$11" Then
    If Not IsDate(Target(1)) Or Target.Count > 1 Then Exit Sub
    If Day(Target) <> 1 Then Exit Sub
    Application.EnableEvents = False
    [C11:C41,I11:I41].Value = 0
    [K12:K41] = ""
    Rows("12:41").Hidden = False
    With Target.Resize(DateSerial(Year(Target), Month(Target) + 1, 1) - Target)
        .NumberFormat = Target.NumberFormat
        .DataSeries
    End With
    With Application
      If .CountA([K39:K41]) < 3 Then
        Rows(41).Offset(-2 + .CountA([K39:K41])).Resize(3 - .CountA([K39:K41])).Hidden = True
      End If
    End With
    Application.EnableEvents = True
  ElseIf Not Intersect(Target, [C11:C41,I11:I41]) Is Nothing Then
    Application.EnableEvents = False
    For Each C In Intersect(Target, [C11:C41,I11:I41])
      If Application.Weekday(Cells(C.Row, 11), 2) > 5 Then
        C.Value = 0
      End If
    Next C
    Application.EnableEvents = True
  End If
End Sub

Regarde le classeur joint. Teste-le.

Daniel
 

Pièces jointes

  • le___destin test.xlsm
    39.4 KB · Affichages: 4

le___destin

XLDnaute Occasionnel
J'ai supprimé ls macros situées dans les feuilles et je les ai remplacées par celle-ci, dans le module "ThisWorkbook". Elle ne s'applique qu'aux feuilles dont le nom commence par "tab" :

VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim C As Range
  If Left(Sh.Name, 3) <> "tab" Then Exit Sub
  If Target.Address = "$K$11" Then
    If Not IsDate(Target(1)) Or Target.Count > 1 Then Exit Sub
    If Day(Target) <> 1 Then Exit Sub
    Application.EnableEvents = False
    [C11:C41,I11:I41].Value = 0
    [K12:K41] = ""
    Rows("12:41").Hidden = False
    With Target.Resize(DateSerial(Year(Target), Month(Target) + 1, 1) - Target)
        .NumberFormat = Target.NumberFormat
        .DataSeries
    End With
    With Application
      If .CountA([K39:K41]) < 3 Then
        Rows(41).Offset(-2 + .CountA([K39:K41])).Resize(3 - .CountA([K39:K41])).Hidden = True
      End If
    End With
    Application.EnableEvents = True
  ElseIf Not Intersect(Target, [C11:C41,I11:I41]) Is Nothing Then
    Application.EnableEvents = False
    For Each C In Intersect(Target, [C11:C41,I11:I41])
      If Application.Weekday(Cells(C.Row, 11), 2) > 5 Then
        C.Value = 0
      End If
    Next C
    Application.EnableEvents = True
  End If
End Sub

Regarde le classeur joint. Teste-le.

Daniel
merci bien


Sub Masque_lig() ' masque les lignes ou la valeur dans les cellules de la colonne F sont ="- -"
Dim cellule As Range
For Each cellule In Range("F12:F14")
If Range("B12") > "0" And cellule.Value = "- -" Then cellule.EntireRow.Hidden = True
Next cellule
End Sub

çà marche bien mai si la valeur change comment les lignes masque s'affiche de nouveau
merci d'avance
 

danielco

XLDnaute Accro
Pour une exécution automatique, mets ce code dans le module de la feuille :


VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim cellule As Range
  If Not Intersect(Target, [F12:F14]) Is Nothing Then
    Application.EnableEvents = False
    For Each cellule In Intersect(Target, [F12:F14])
      If Range("B12") > "0" And cellule.Value = "- -" Then
        cellule.EntireRow.Hidden = True
      Else
        cellule.EntireRow.Hidden = False
      End If
    Next cellule
    Application.EnableEvents = True
  End If
End Sub

Daniel
 

le___destin

XLDnaute Occasionnel
bon soire et merci beaucoup pour ton aide

aide moi pour ce tab
si F12="- -" masqué ligne mai si F12 F13 F14 tous = "- -" ne masque pas mais fusionner G12:M14
pour 6 et 7 eme journée masqué tous meme les trois cellule = "- -"
vraiment merci bien Daniel
 

Pièces jointes

  • destin.xlsm
    45.8 KB · Affichages: 6

Discussions similaires

Réponses
7
Affichages
308
Réponses
2
Affichages
847

Statistiques des forums

Discussions
312 076
Messages
2 085 084
Membres
102 772
dernier inscrit
bluetesteur