Effactuer un saut de ligne automatiquement apres chaque mois

Résolu/Fermé
kimalg Messages postés 9 Date d'inscription dimanche 6 août 2017 Statut Membre Dernière intervention 9 août 2018 - 20 août 2017 à 15:53
kimalg Messages postés 9 Date d'inscription dimanche 6 août 2017 Statut Membre Dernière intervention 9 août 2018 - 20 août 2017 à 16:30
Pourriez-vous m'aider à faire un saut de ligne automatiquement après chaque changement de mois, dans un fichier Excel très volumineux dont la date est a la 1ere colonne A qui s’écrits de cette manière :28/02/2015 04:10 merci
A voir également:

2 réponses

yg_be Messages postés 23338 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 novembre 2024 Ambassadeur 1 551
20 août 2017 à 16:13
suggestion pour insérer une ligne blanche à chaque changement de mois:
Sub decouperparmois()
Dim ligne As Long
Dim unmoment As Date
Dim lemois As Date, cemois As Date
Dim valeur As Range

unmoment = CDate(ActiveSheet.Cells(1, "A"))
lemois = DateSerial(Year(unmoment), Month(unmoment), 1)
ligne = 2
Do
    Set valeur = ActiveSheet.Cells(ligne, "A")
    If Not IsDate(valeur) Then
        Exit Do
    Else
        unmoment = CDate(valeur)
        cemois = DateSerial(Year(unmoment), Month(unmoment), 1)
        If (cemois <> lemois) Then
            lemois = cemois
            ' ajouter une ligne vide avant
            valeur.EntireRow.Insert
            ligne = ligne + 1
        End If
    End If
    ligne = ligne + 1
Loop
End Sub

 
0
kimalg Messages postés 9 Date d'inscription dimanche 6 août 2017 Statut Membre Dernière intervention 9 août 2018
20 août 2017 à 16:30
Merci infiniment ça marche bien ! quel soulagement ! Merci
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
20 août 2017 à 16:26
Bonjour,

Un petite adaptation du code précédent :
Option Explicit
Sub DécouperTableauEnBlocsMensuels()
Dim C As Long    'Compteur
Dim L As Long    'n° ligne
Dim J As Date    'Jour
Dim M As Byte    'Mois

  Application.ScreenUpdating = False
  'Supprimer les lignes vides
  Call SupprimerLesLignesVides
  'Séparer les jours (en partant de la fin)
  With ActiveSheet
    L = .Cells(Rows.Count, "A").End(xlUp).Row
    J = DateValue(.Cells(L, "A").Value)
    M = Month(J)
    For C = L - 1 To 2 Step -1
      J = DateValue(.Cells(C, "A").Value)
      If Month(J) <> M Then
        M = Month(J)
        .Rows(C + 1).Insert
      End If
    Next C
  End With
  Application.ScreenUpdating = True

End Sub

Sub SupprimerLesLignesVides()
Dim D As Range   'Début
Dim V As Range   'Vide
Dim T As Range   'Tableau
Dim S As Boolean 'ScreenUpdating
  
  S = Application.ScreenUpdating
  Application.ScreenUpdating = False
  'Début du tableau
  Set D = ActiveSheet.Cells(1, "A")
  'Supprimer les lignes vides
  Do
    'Tableau
    Set T = D.CurrentRegion
    'Ligne vide suivant le tableau
    Set V = D.End(xlDown).Offset(1)
    'Est-ce la fin des données de la feuille ...
    If ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row < V.Row Then
      '... Oui : terminer
      Exit Do
    Else
      '... Non : supprimer les lignes vides
      V.Resize(V.End(xlDown).Row - V.Row).EntireRow.Delete
    End If
  Loop
  Application.ScreenUpdating = S
  
End Sub
0