IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Supprimer toutes les lignes vides sur plusieurs feuilles en même temps!


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Dessinateur projeteur
    Inscrit en
    Mai 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Dessinateur projeteur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2023
    Messages : 5
    Par défaut Supprimer toutes les lignes vides sur plusieurs feuilles en même temps!
    Bonjour tout le monde,

    J'aurais besoin d'aide car je n'arrive pas a supprimer les lignes vides sur plusieurs feuilles en même temps.

    Merci d'avance de votre aide

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    978
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 978
    Par défaut
    Bonjour, vous n'êtes pas très précis dans votre demande donc je ne sais pas si cela correspondra à vos besoins.
    Il existe plusieurs méthodes pour supprimer les lignes vides sur plusieurs feuilles Excel en même temps. Une méthode consiste à regrouper toutes les feuilles de calcul, puis à supprimer les mêmes lignes ou plages de ces feuilles de calcul en même temps. Pour ce faire, cliquez avec le bouton droit sur n’importe quel onglet de feuille du classeur actuel, puis cliquez sur Sélectionnez toutes les feuilles dans le menu contextuel. Maintenant, toutes les feuilles de calcul sont sélectionnées, si vous supprimez certaines lignes ou plages dans une feuille de calcul, les mêmes lignes ou plages dans d’autres feuilles de calcul sont supprimées ensemble. Après avoir supprimé des lignes ou des plages sur toutes les feuilles, veuillez cliquer avec le bouton droit sur un onglet de feuille, puis cliquez Dissocier les feuilles dans le menu contextuel pour dissocier toutes les feuilles de calcul.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Dessinateur projeteur
    Inscrit en
    Mai 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Dessinateur projeteur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2023
    Messages : 5
    Par défaut Reformulation de ma demande
    Désolé je vais donner plus de précision à ma demande:

    Je dispose d'un fichier composer de plusieurs feuilles différentes ou il y a beaucoup de données mais séparé par plusieurs ligne vides a chaque fois, données exporter d'un tableau d'un autre classeur en VBA vers chaque feuille d'un fichier historique de donnée.

    Je suis donc a la recherche dune formule VBA qui me permet sois d'exporté les données a la suite en ne laissant pas de ligne vide a chaque fois dans mes feuilles ou alors une formules qui me permette de supprimer ces fameuses lignes vides.

    J'espère que ma demande est mieux formulé et compréhensible.

    Merci

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    978
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 978
    Par défaut
    Ok, voici une possibilité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub DeleteBlankRows()
        Dim ws As Worksheet
        For Each ws In ThisWorkbook.Worksheets
            ws.Activate
            Dim lastRow As Long
            lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
            Dim i As Long
            For i = lastRow To 1 Step -1
                If Application.CountA(ws.Rows(i)) = 0 Then
                    ws.Rows(i).Delete
                End If
            Next i
        Next ws
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    Dessinateur projeteur
    Inscrit en
    Mai 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Dessinateur projeteur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2023
    Messages : 5
    Par défaut
    Citation Envoyé par Franc Voir le message
    Ok, voici une possibilité:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub DeleteBlankRows()
        Dim ws As Worksheet
        For Each ws In ThisWorkbook.Worksheets
            ws.Activate
            Dim lastRow As Long
            lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
            Dim i As Long
            For i = lastRow To 1 Step -1
                If Application.CountA(ws.Rows(i)) = 0 Then
                    ws.Rows(i).Delete
                End If
            Next i
        Next ws
    End Sub


    Merci, après plusieurs essais aucune action ne se passe

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    978
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 978
    Par défaut
    Chez moi ça fonctionne. C'est possible d'avoir un fichier pour test ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Dessinateur projeteur
    Inscrit en
    Mai 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Dessinateur projeteur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2023
    Messages : 5
    Par défaut
    Citation Envoyé par Franc Voir le message
    Chez moi ça fonctionne. C'est possible d'avoir un fichier pour test ?
    Exemple.xlsx

  8. #8
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 970
    Par défaut
    Bonjour
    dans le cas ou tu as une grande base de donnée je crois que un filtre vaut mieux q'une boucle
    tester avec prudence sur une copie de ton fichier pour munir contre tt risque de perte de donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub DeleteBlankRows()
        Dim ws As Worksheet
        Application.ScreenUpdating = False
        For Each ws In ThisWorkbook.Worksheets
        ws.Activate
        i = ws.Cells(Rows.Count, 1).End(xlUp).Row
        ws.Range("A1:B" & i).AutoFilter Field:=1, Criteria1:=""
        ws.Range("A1:B" & i).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        ws.ShowAllData
        Next ws
        Application.ScreenUpdating = True
    End Sub

  9. #9
    Membre à l'essai
    Homme Profil pro
    Dessinateur projeteur
    Inscrit en
    Mai 2023
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Dessinateur projeteur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2023
    Messages : 5
    Par défaut
    Citation Envoyé par BENNASR Voir le message
    Bonjour
    dans le cas ou tu as une grande base de donnée je crois que un filtre vaut mieux q'une boucle
    tester avec prudence sur une copie de ton fichier pour munir contre tt risque de perte de donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub DeleteBlankRows()
        Dim ws As Worksheet
        Application.ScreenUpdating = False
        For Each ws In ThisWorkbook.Worksheets
        ws.Activate
        i = ws.Cells(Rows.Count, 1).End(xlUp).Row
        ws.Range("A1:B" & i).AutoFilter Field:=1, Criteria1:=""
        ws.Range("A1:B" & i).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        ws.ShowAllData
        Next ws
        Application.ScreenUpdating = True
    End Sub
    Merci de ta réponse mais un message d'erreur apparait?Nom : Capture d'écran 2023-05-09 143006.png
Affichages : 212
Taille : 37,4 Ko

  10. #10
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 970
    Par défaut
    dans ton fichier exemple les données sont dans les colonne A et B
    si non adapte cette partie de code et remplace le B par la dernière colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ws.Range("A1:B" & i).AutoFilter Field:=1, Criteria1:=""
        ws.Range("A1:B" & i).SpecialCells(xlCellTypeVisible).EntireRow.Delete

  11. #11
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    978
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 978
    Par défaut
    D'après ton fichier exemple, je constate qu'il y a environ 1250 lignes contenant des données, réparties sur environ 27000 lignes, on passe donc beaucoup de temps à effacer des lignes vides.
    Je fais donc la démarche inverse, je copie les cellules contenant des valeurs dans un tableau en mémoire, j'efface la feuille et y recopie le tableau, chez moi l'opération prend 0.04 secondes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Sub MoveRowsInAllSheets()
        Dim ws As Worksheet
        Dim lastRow As Long
        Dim i As Long
        Dim nextRow As Long
        Dim data As Variant
     
        ' Désactiver le rafraîchissement de l'écran
        Application.ScreenUpdating = False
     
        ' Désactiver le calcul automatique des formules
        Application.Calculation = xlCalculationManual
     
        ' Parcourir toutes les feuilles du classeur
        For Each ws In ThisWorkbook.Worksheets
            ' Trouver la dernière ligne utilisée dans la feuille
            lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
     
            ' Lire les données des colonnes A et B dans un tableau
            data = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, 2)).Value
     
            ' Parcourir toutes les lignes en partant de la ligne A jusqu'à la dernière ligne utilisée
            nextRow = 1
            For i = 1 To lastRow
                ' Vérifier si la colonne A de la ligne contient des données
                If Not IsEmpty(data(i, 1)) Then
                    ' Copier les données des colonnes A et B
                    data(nextRow, 1) = data(i, 1)
                    data(nextRow, 2) = data(i, 2)
                    data(i, 1) = Empty
                    data(i, 2) = Empty
                    nextRow = nextRow + 1
                End If
            Next i
     
            ' Effacer la feuille complète
            ws.Cells.ClearContents
     
            ' Écrire les données finales dans les colonnes A et B de la feuille
            ws.Range(ws.Cells(1, 1), ws.Cells(nextRow - 1, 2)).Value = data
        Next ws
     
        ' Réactiver le calcul automatique des formules
        Application.Calculation = xlCalculationAutomatic
     
        ' Réactiver le rafraîchissement de l'écran
        Application.ScreenUpdating = True
    End Sub

  12. #12
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 259
    Par défaut
    Bonjour

    Pour ma part, je travaillerai plus en amont pour éviter de récupérer de vos sources toutes ces lignes vides.
    il faut utiliser Power Query et non VBA pour extraire vos données (Sauf si vous avez une version très ancienne d'Excel)

    Stéphane

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/08/2017, 13h58
  2. Réponses: 8
    Dernier message: 23/08/2017, 08h31
  3. Macro pour masquer des lignes vides sur plusieurs feuillés.
    Par baloote69 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 03/11/2015, 11h38
  4. Macro permettant de masquer toutes les lignes vides d'une feuille
    Par edouardmartin dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/05/2010, 17h34
  5. Supprimer toutes les lignes vides
    Par Lorenzole+bo dans le forum Contribuez
    Réponses: 2
    Dernier message: 22/09/2008, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo