Macro VBA me sup lignes non vide

Fermé
momo1992 - Modifié par samgunsjovirow le 22/09/2015 à 12:00
 momo1992 - 22 sept. 2015 à 15:21
J ai une macro de mise en forme qui fait plusieurs modif dont elle doit supprimer des lignes vides ou inutiles. sauf qu'elle me supprime des lignes non vides pour klk données. ci dessous les parties de suppression de ma macro si vous pouvez m'expliquer la macro et d'ou vient le problème : (je suis nul en VBA je raisonne plutot en SQL) MERCII D'AVANCE !!
1/
'Cacher l'écran durant l'exécution de la macro
Application.ScreenUpdating = False

'Suppression des lignes vides
Rows("18:19").Select
Selection.Delete Shift:=xlUp
Rows("51:51").Select
Selection.Delete Shift:=xlUp
Range("A1").Select


'Calcul du nombre de lignes de la sélection
Nb_Lignes_Calcul = Range("E1048576").End(xlUp).Row 'Compte le nombre de lignes non vides à partir de la dernière ligne d'Excel - Variable de stockage pour la suite
Nb_Lignes_BDD = Nb_Lignes_Calcul - 8 'On retire les lignes d'en-tête pour qu'elles ne soient pas prises en compte dans le total

2/
Columns("M:Z").Select
Selection.Delete Shift:=xlToLeft
Columns("T:X").Select
Selection.Delete Shift:=xlToLeft
Range("U8").Select
ActiveCell.FormulaR1C1 = "Code"
Columns("T:T").Select
Selection.Delete Shift:=xlToLeft


Merciiiiiiiiiiiiiiiiiiii
A voir également:

1 réponse

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié par ThauTheme le 22/09/2015 à 12:13
Bonjour Momo, bonjour le forum,

Quand tu supprimes les lignes 18 et 19, la ligne 51 se retrouve en ligne 49. Donc, quand après tu supprimes la ligne 51 elle correspond à la ligne 53 d' avant la première suppression... Essaie :

Range("A18:A19, A51").EntireRow.Delete 

Pour supprimer les 3 lignes en une seule fois...

Sinon, en règle générale, évite autant que tu le peux les Select qui ne font que ralentir l'exécution du code...

À plus,
ThauTheme
0
Mercii beaucoup ThauTheme, j'ai compris.
et j'ai une autre macro je voudrais m'assurer qu'elle est correcte c'est pour supprimer les lignes vides :
Sub Suppression_lignes_Proposition_du_Forum()

' Macro servant à supprimer les lignes dont les montants sont à 0 et les lignes erronnées avec des "-"
' Solution trouvée à partir du forum Excel-Pratique via les différentes propositions : http://forum.excel-pratique.com/excel/accelerer-une-boucle-t62158.html


'Suppression des lignes à 0

derligne = Range("A1").End(xlDown).Row

'Déterminer la plage de données sur laquelle le code va s'exécuter
Columns("A:T").Select
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Add Key:=Range( _
"L2:L" & derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("BDD à trier").Sort
.SetRange Range("A1:T" & derligne)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

'Prise en compte du critère de suppression numéro 1

Rows(Sheets("Paramètres de tri").Range("B2") & ":" & Sheets("Paramètres de tri").Range("B3")).Select 'Sélectionner la plage de cellule de la ligne mentionnée dans la cellule B2 à la ligne dans la cellule B3
Selection.Delete Shift:=xlUp 'Supprimer la sélection

derligne = Range("A1").End(xlDown).Row 'Détermine le nombre de lignes maxi sur lequel les tris vont s'effectuer

Columns("A:T").Select
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Add Key:=Range( _
"A2:A" & derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("BDD à trier").Sort
.SetRange Range("A1:T" & derligne)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

'Suppression des lignes avec des tirets pour montant

derligne = Range("A1").End(xlDown).Row

'Déterminer la plage de données sur laquelle le code va s'exécuter
Columns("A:T").Select
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Add Key:=Range( _
"L2:L" & derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("BDD à trier").Sort
.SetRange Range("A1:T" & derligne)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

'Prise en compte du critère de suppression numéro 2

Rows(Sheets("Paramètres de tri").Range("B7") & ":" & Sheets("Paramètres de tri").Range("B8")).Select 'Sélectionner la plage de cellule de la ligne mentionnée dans la cellule B7 à la ligne dans la cellule B8
Selection.Delete Shift:=xlUp 'Supprimer la plage de données

derligne = Range("A1").End(xlDown).Row 'Détermine le nombre de lignes maxi sur lequel les tris vont s'effectuer

Columns("A:T").Select
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BDD à trier").Sort.SortFields.Add Key:=Range( _
"A2:A" & derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("BDD à trier").Sort
.SetRange Range("A1:T" & derligne)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

End Sub

Cordialement
Momo
0
voici mon onglet qui permet l'exécution :
Critère de suppression 1 0 <<< paramétrage des suppressions des lignes à 0
Première ligne 2162
Dernière ligne 537946


Critère de suppression 2 - <<< paramétrage des suppressions des lignes dont le montant est un tiret
Première ligne 592930
Dernière ligne 696416
0