2 votes

Excel 2013 - Suppression d'une ligne basée sur une référence de cellule spécifique

Je cherche à savoir comment supprimer une ligne dans Excel 2013 lorsque le contenu d'une cellule commence par un chiffre.

Par exemple, dans la colonne H, j'ai plusieurs entrées, certaines commençant par des lettres, d'autres par des chiffres. Je souhaite supprimer toutes les lignes dont le contenu des cellules de la colonne H commence par un chiffre.

Toute orientation/conseil est le bienvenu !

J'ai créé un petit code VBA qui semble fonctionner sur une seule feuille :

Sub Macro_01()
Dim L As Long, i As Long
L = Cells(Rows.Count, "F").End(xlUp).Row
For i = L To 1 Step -1
    If Left(Cells(i, "F"), 1) Like "[0-9]" Or Cells(i, "F") = "" Then
        Rows(i).Delete
    End If
Next
End Sub

J'essaie de trouver un moyen de faire fonctionner ce système sur les 284 feuilles du classeur. J'ai essayé la fonction Do/Loop, mais elle s'exécute sans fin (et ne répond plus). Comme je sais combien il y a de feuilles, y a-t-il une commande simple que je dois entrer dans le code ?

0voto

BruceWayne Points 2595

Comment cela fonctionne-t-il ? (Je suppose que le code que vous avez posté en lui-même fonctionne comme vous le souhaitez et qu'il suffit de l'exécuter sur tous feuilles.)

Sub Macro_01()

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim L As Long, i As Long
Dim ws      As Worksheet

For Each ws In ActiveWorkbook.Worksheets
    L = .Cells(Rows.Count, "F").End(xlUp).Row
    For i = L To 1 Step -1
        If Left(.Cells(i, "F"), 1) Like "[0-9]" Or .Cells(i, "F") = "" Then
            .Rows(i).Delete
        End If
    Next
Next ws

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Il suffit de parcourir chaque feuille en boucle, en veillant à réinitialiser la variable de la dernière ligne. Ensuite, le calcul/la mise à jour de l'écran est désactivé(e) jusqu'à la fin. Notez que si vous avez plus de 200 feuilles, cela peut prendre un certain temps.

Enfin, veillez à exécuter cette opération sur une copie de vos données, car, comme vous le savez peut-être, il est impossible d'annuler une macro.

0voto

Deadite Points 21

Merci pour votre aide jusqu'à présent, je pense que j'ai résolu le problème :

Sub Macro_01()
ActiveSheet.Next.Select
Do
Dim L As Long, i As Long
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
L = Cells(Rows.Count, "F").End(xlUp).Row
For i = L To 1 Step -1
If Left(Cells(i, "F"), 1) Like "[0-9]" Or Cells(i, "F") = "" Then
Rows(i).Delete
End If
Next
Next ws
If ActiveSheet.Index <> Sheets.Count Then
ActiveSheet.Next.Select
Else
Exit Do
End If
Loop
End Sub

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X