Macro VBA me sup lignes non vide

momo1992 -  
 momo1992 -
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

1 réponse

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. momo1992
       
      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
    2. momo1992
       
      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