Supprimer une ligne si février non bissextile (sans macro si possible)

Bonjour,

11test-excel.xlsx (45.13 Ko)

Je cherche à supprimer la ligne 31 de mon tableau si le mois de février est en 28 jour, afin que le 1er mars n'apparaisse pas. Il me semble que l'on peut faire cela avec une macro, mais est-il possible de s'en passer par une mise en forme particulière ou autre ?

Mon souhait est que si l'année en Détails!A1 est modifiée, le tableau s'actualise en 28 ou 29 février automatiquement, sans avoir à supprimer manuellement la dernière ligne du mois.

Merci par avance à celles et ceux qui auront une solution à cela.

Bonjour,

Supprimer une ligne sans VBA ça me semble compliqué... Si votre objectif est simplement visuel vous pouvez utiliser la fonction FIN.MOIS en format conditionnel pour "blanchir" la ligne.

Pour la ligne 31 la formule serait :

=$B31>FIN.MOIS($B30;0)

Et format le format celui que vous souhaitez (police, fond etc.)

Autrement, selon moi, l'unique moyen serait d'utiliser les formules dynamiques, mais donc impossible d'utiliser une table.

Autrement un filtrage via PowerQuery.

A voir selon vos besoins.

Merci pour ce retour détaillé. Je pensais bien que sans macro, cela serait délicat.

Mon besoin n'est pas que visuel, puisque les données du tableau sont reportées ailleurs. Je laisse le sujet ouvert pour le moment.

Bonjour à tous,

On peut aussi faire en B31:

=SIERREUR(SI(MOIS(B30+1)=MOIS(B30);B30+1;"");"")

Il faut ensuite gérer les erreurs sur les autres colonnes de cette ligne avec SIERREUR

Vous auriez intérêt ensuite à faire des tableaux de 31 lignes pour chaque mois

Merci Begood pour le partage. J'avais songé à faire cela, au début.

Salut Polymer,
Salut l'équipe,

en VBA, le code est en 'Détails'.
La macro fait le boulot demandé dès un changement d'année en [A1].
Pour ma facilité, j'ai nommé cette cellule [A1] = [ANNEE] et la cellule comptant le nombre de jours de l'année = [NB_JOURS].

Private Sub Worksheet_Change(ByVal Target As Range)
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
If Not Intersect(Target, [ANNEE]) Is Nothing Then
    With Worksheets("Février")
        If [NB_JOURS] = 365 Then
            If WorksheetFunction.CountA(.[A31:B31]) > 0 Then .Rows(31).EntireRow.Delete shift:=xlUp
        Else
            If WorksheetFunction.CountA(.[A31:B31]) = 0 Then _
                .Rows(30).EntireRow.Insert shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove: _
                .Range("A29:B29").AutoFill Destination:=.Range("A29:B31"), Type:=xlFillValues
        End If
    End With
End If
'
Application.EnableEvents = True
Application.ScreenUpdating = True
'
End Sub

A+

1polymer.xlsm (52.81 Ko)

Bonjour Curulis,

Cela fonctionne ! Merci beaucoup.

Hello,

Pour savoir si une année est bissextile il suffit de compter le nombre de jour en février de l'année en cours :

=DATE(2024;3;1)-DATE(2024;2;1)

A partir de là c'est facile.

Sinon vous pouvez combiner cette formule avec sequence pour obtenir un calendrier d'un mois donné

=DATE(2024;2;SEQUENCE(DATE(2024;3;1)-DATE(2024;2;1)))

et pour avoir un champ formaté cela donne cela

=TEXTE(DATE(2024;2;SEQUENCE(DATE(2024;3;1)-DATE(2024;2;1)));"jjjj mmmm aaaa")

Bonjour WonderAleph, et merci !

Les deux premières fonctions fonctionnent à merveille.

Toutefois, qu'est censée faire la dernière formule ? Excel m'indique une erreur #Propagation!

Autant pour moi, j'avais une formule fantôme en-dessous.

WonderAleph,

Pouvez-vous me dire ce qui génère une erreur #Propagation! en cellule B3 s'il vous plaît ?

5polymer.xlsm (49.62 Ko)

Bonjour à tous

Une formule dynamique ne peux pas être positionnée dans un tableau structuré.

Regarde plutôt du côté de la proposition de BeGood.

Cordialement

Bonjour Efgé,

Je l'ignorai, merci pour la précision.

Bonjour à tous ,

Un autre manière de faire qui ne répond pas strictement à votre besoin mais qui affiche des lignes vides ( c'est à dire contenant "") pour les jours hors du mois considéré.

La formule en colonne B a été revue pour être analogue sur la colonne du tableau structuré et bénéficier ainsi de la propagation automatique :

=SI(B2="";"";SI(ESTTEXTE(B2);DATE(Détails!A1;2;1);SI(B2+1 > FIN.MOIS(B2;0);"";B2+1)))

Pour les formules des autres colonnes que B, elles sont toutes du type =SI(B3 = "" ; ""; formule) et le résultat est "" si la cellule en colonne date est vide.

Cela fonctionne quel que soit le mois. Donc le plus simple serait de faire tous les tableaux avec 31 jours. Suivant les mois, suivant les années, il resterait en fin de tableau de 0 à 3 lignes vides (0 pour les mois à 31j, 1 pour les mois à 30j, 2 pour un février à 29 jours et 3 pour un février à 28 jours).

Faisant ainsi les formules peuvent être toutes propagées dans le tableau structuré. Pas de formule spécifique et différente des autres dans une colonne.

Efgé à 100% raison, ma proposition n'est pas adapté à un tableau structuré; désolé :)

WonderAleph, ne soyez pas désolé. Je conserve votre formule pour un futur usage :)

Bonjour mafraise,

C'est une bonne idée également, couplé à une mise en forme conditionnelle, je pense pouvoir faire une belle présentation. Merci !

Rechercher des sujets similaires à "supprimer ligne fevrier bissextile macro possible"