Suppression de lignes sous conditions pour calendrier auto

Bonjour à tous,

Ça fait longtemps que je n'ai pas utilisé VBA. J'essaie en ce moment de développer une note de frais avec calendrier automatique pour le boulot mais je fais face à plusieurs difficultés qui à mon avis sont simples à résoudre mais plus à mon niveau.

Si vous pouviez m'aider ça serait sympa de votre part.

Alors concernant la difficulté n°1 :

Mon calendrier est sur une base de 31 jours, j'essaie donc pour des mois plus court de créer une macro qui permettrait de supprimer les jours du mois suivant.

exemple : pour le mois de février 2016 supprimer les cellules A44 et A45 qui sont du mois de mars.

La difficulté numéro 2 :

Je cherche à créer une macro qui reconnaîsse automatiquement la dernière ligne du tableau de manière à ce que si l'on insère des lignes entre temps (pour les charges ponctuelles par exemple), le calendrier s'adapte.

En m'aidant d'un exemple, j'ai pu créer une macro qui me semblait pas mal.

Malheureusement, elle ne fonctionne pas et je ne comprends pas pourquoi...

Voici la macro :

Sub Masquer_Jour()

Dim Num_lignes As Long

For Num_lignes = Cells(Rows.Count, 1).End(xlUp) To 1 Step -1

If Month(Cells(Num_lignes, 2)) <> Cells(3, 3) Then

Rows(Num_lignes).Delete

End If

Next

End Sub

Quelqu'un a une soluce ?

Merci d'avance !

Bonjour,

For Num_lignes = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1


NB- Petit conseil supplémentaire : en l'état de ton projet et en tenant compte de ses développements ultérieurs, un module standard est largement suffisant. Il n'y a lieu d'en ajouter que si cela est justifié par une utilisation spécifique...

C'est un peu la même chose pour les Userforms. Difficile de voir la finalité sur ces ébauches, cependant, il n'est pas judicieux de les multiplier sans raison, pour des utilisations similaires...

Cordialement.

Bonjour et merci MFerrand !

Malheureusement, même en modifiant ma ligne de code comme tu l'as écrit ça ne fonctionne pas.

Ajouter ce module est très important pour ce projet puisque sans celui ci le calendrier automatique ne le sera pas vraiment puisqu'on sera obligé de supprimer manuellement les lignes en trop donc aucun gain de temps.

Tu fournis un fichier ne contenant aucune macro...

Ta macro réécrite un peu plus intelligiblement :

Sub Masquer_Jour()
    Dim n%, i%
    With ActiveSheet
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = n To 1 Step -1
            If Month(.Cells(i, 2)) <> .Cells(3, 3) Then
                .Rows(i).Delete
            Else
                Exit For
            End If
        Next i
    End With
End Sub

Et elle fonctionne... ! Ceci étant, si elle ne supprime rien en janvier, en février elle va supprimer 3 lignes, et lorsque tu passes en mars, il te manquera 3 lignes !

La méthode est donc inadéquate ou au moins incomplète !

Je n'ai pas mis ma macro dans mon fichier car elle était fausse.

Mais je peux la mettre la prochaine fois pas de soucis !

Merci pour ton aide en tout cas mais du coup cette macro ne fonctionne pas puisque comme tu l'as remarqué ça fausse les mois suivants. Je ne comprends pas pourquoi puisque elle est sensée s'appliquer à chaque fois que je change de mois !

Y -a-t'il une meilleure méthode ?

Voilà qui devrait améliorer un peu...

Sub Masquer_Jour()
    Dim n%, i%
    With ActiveSheet
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        i = .Cells(n, 1): .Cells(n, 1) = 31
        Application.ScreenUpdating = False
        Do While i < 31
            .Cells(n, 1).Resize(, 20).Insert xlShiftDown
            .Cells(n - 1, 1).Resize(, 20).Copy .Cells(n, 1)
            .Cells(n, 1) = i: n = n + 1: i = i + 1
        Loop
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Cells(n - 1, 2).Copy .Cells(n, 2)
        For i = n To 1 Step -1
            If Month(.Cells(i, 2)) <> .Cells(3, 3) Then
                .Rows(i).Delete
            Else
                Exit For
            End If
        Next i
    End With
End Sub

Il te faut déjà au moins rectifier ta formule en C : H2:H14 doit être en références absolues : $H$2:$H$14

Il n'y a pas que cela à revoir d'ailleurs, Pâques et les fériés dépendant sont mobiles. Il faut pour chaque année calculer la date de Pâques pour les déterminer...

Ton fichier à nouveau. J'y ai ajouté une fonction de calcul de la date de Pâques...

Cordialement.

Je ne savais pas pour les jours fériés bien vu !

Merci beaucoup pour ton aide

Rechercher des sujets similaires à "suppression lignes conditions calendrier auto"