Effectuer un saut de ligne automatiquement [VBA]

Résolu
kimalg Messages postés 13 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,
Je vous serai très reconnaissante si vous pourriez m'aider à effectuer un saut de ligne dans mon fichier Excel chaque 288 lignes afin que je puisse travailler merci infiniment.

6 réponses

  1. Raymond PENTIER Messages postés 58219 Date d'inscription   Statut Contributeur Dernière intervention   17 485
     
    Bonjour.

    Je n'ai pas bien compris ce que tu veux faire :
    Il s'agit de 288 retours à la ligne dans une même cellule ? ce serait assez énorme et incongru ;
    ou de 288 lignes de saisies de données ; dans ce cas, une fois saisie la dernière donnée de la ligne 288, tu fais Entrée 2 fois et tu te retrouves à la ligne 290 !

    Si ton problème est de compter les lignes, tu insères une colonne avant la colonne A, tu saisis 1 pour la première ligne de ta série (par exemple en A3), dans la cellule suivante tu saisis la formule =A3+1 que tu recopies jusqu'à voir affiché le nombre 288.
    Et tu recommences à partir de la cellule A290 ...
    Tu peux aussi saisir, en cellule A3, =SI(A2="";1;SI(A2=288;"";A2+1)) et la recopier jusqu'à la dernière ligne de ton tableau ...
    0
    1. kimalg Messages postés 13 Statut Membre
       
      Bonjour Raymond, non pas du tout j'ai du mal expliquer tout simplement je voudrais faire un saut de ligne après chaque changement du n° du jour, le fichier c'est pas moi qui le saisit il est récupéré d'une acquisition de données, seulement parfois le nombre de données dans une journée n'est pas forcement 288 valeurs parfois moins donc c’est aléatoire et de ce fait il faudrait faire un saut après chaque changement de date du jour par exemple 01/05/2017 y'a plusieurs données (peu importe le nombre) donc juste entre deux numéro du jour différents il faut qu'il ait un saut de ligne (une seule ligne). je crois qu'il serai meilleur de faire cela en VBA, merci de m'aider
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Et pour ajouter aux propositions de Raymond
    Tu as un fichier avec beaucoup de lignes remplies, tu veux insérer automatiquement une ligne vide toutes les 288 lignes, là, il faut passer par une macro

    Cdlmnt
    0
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Et pour ajouter aux commentaires de Raymond et de ccm81 (bonjour à vous deux), laisser une ligne vide dans un tableau, c'est pas une bonne idée car ça crée une rupture dans les données et Excel ignore le reste du tableau.
    0
  4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Bien que je pense que ce ne soit pas une bonne idée, voici une macro qui regroupe les données d'une feuille en blocs de 288 lignes (sans ligne vide) séparés par une ligne vide.
    Sub DécouperTableauEnBlocDe288Lignes()
    Dim D As Range  'Début
    Dim V As Range  'Vide
    Dim T As Range  'Tableau
    
      Application.ScreenUpdating = False
      'Début du tableau
      Set D = ActiveSheet.Cells(1, "A")
      Do
        'Tableau
        Set T = D.CurrentRegion
        If T.Rows.Count > 288 Then
          'Ajouter une ligne vide après la 288ème
          Set D = D.Offset(288)
          D.EntireRow.Insert
        Else
          '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 = True
    
    End Sub


    Cordialement
    Patrice
    0
    1. kimalg Messages postés 13 Statut Membre
       
      Bonjour Patrice, Merci indéfiniment pour votre précieuse aide, le code VBA a bien fonctionné ouf vous m'avez rendu un énorme service je vous suis très reconnaissante.
      Respectueuses salutations.
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ne manque-t-il pas un
      end if
      ?
      0
      1. victor > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonsoir yg_be,
        Exact : après la ligne #25, pour le Else de la ligne #23 ; le End If de la ligne #26
        correspond au Else de la ligne #16 ; kimalg a dû corriger d'elle-même l'erreur
        de compilation que ça a dû générer.
        Cordialement
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kimalg Messages postés 13 Statut Membre
     
    un grand MERCI à Patrice33740, votre code VBA marche bien, Merci infiniment pour votre précieuse aide!
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Mets ce post en résolu.
      0
      1. victor > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
         
        Bonjour Patrice,

        Pas déjà en résolu, car il y a eu une suite : insérer une ligne blanche
        si la date d'une ligne est différente de celle de la ligne précédente ;
        yg_be a donné une solution dans son message de 15:00 :

        https://forums.commentcamarche.net/forum/affich-34773732-effectuer-un-saut-de-ligne-automatiquement-vba#12

        Tu peux lire la réponse de kimalg à Raymond :

        https://forums.commentcamarche.net/forum/affich-34773732-effectuer-un-saut-de-ligne-automatiquement-vba#9

        Cordialement
         
        0
      2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784 > victor
         
        Bonjour Victor,

        Je demande à kilmag que de mettre le post en résolu, pour éviter que ce fil continue alors qu'il a été résolu en MP.

        Je lui ai précisé que « pour ce genre de problème il aurait été préférable d'ouvrir un post sur le Forum plutôt que passer par MP : ce genre de problème est assez général et il pourrait concerner d'autres personnes ».

        J'ai donné à kimalg, il y a 4 jours en MP un solution identique à celle de yg_be (bonjour à lui) qu'il n'a vu qu' avant-hier et qui lui convient parfaitement: https://mon-partage.fr/f/apXwcxHM/

        Cordialement
        Patrice
        0
      3. victor > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
        ok, merci pour tes renseignements complémentaires ; donc laissons kimalg
        passer ce sujet en résolu : en haut de page, sous le titre du 1er message,
        cliquer sur le lien « Marquer comme résolu » => titre du sujet en vert.
        0
      4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
        :-(
        ce qui montre bien les désavantages de fournir de l'assistance par MP: encore pire que de travailler sur des doublons.
        0
  7. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    suggestion pour insérer une ligne blanche à chaque changement de date:
    Option Explicit
    
    Sub decouperparjour()
    Dim ligne As Long
    Dim jour As Date, cejour As Date
    Dim valeur As Range
    
    jour = Int(CDate(ActiveSheet.Cells(1, "A")))
    ligne = 2
    Do
        Set valeur = ActiveSheet.Cells(ligne, "A")
        If Not IsDate(valeur) Then
            Exit Do
        Else
            cejour = Int(CDate(valeur))
            If (cejour <> jour) Then
                jour = cejour
                ' ajouter une ligne vide avant
                valeur.EntireRow.Insert
                ligne = ligne + 1
            End If
        End If
        ligne = ligne + 1
    Loop
    End Sub
    0