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
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
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.
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
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
Chez moi ça fonctionne. C'est possible d'avoir un fichier pour test ?
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
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
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
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
Partager