Aide sur Erreur sur une MACRO de suppression de lignes à 0 et -

Résolu
momo1992 -  
 momo1992 -
Bonjour, j'ai besoin de votre aide pour trouver l'erreur dans cette Macro qui me supprime beaucoup de données non nul. Merciiiiiii :

' Macro servant à supprimer les lignes dont les montants sont à 0 et les lignes erronnées avec des "-"

'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

Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

1 réponse

  1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    Cette macro est beaucoup trop complexe pour ce qu'elle est censée faire. Pourquoi faites-vous des tris systématiquement?

    Un simple :

    Sub TEST()
    
    Dim DL As Long, i As Long
    
    DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne du tableau en prenant en référence la colonne A
    
    For i = DL To 1 Step -1
    
    If Range("A" & i) = "" Or Range("A" & i) = "-" Then
       Rows(i).Delete
    End If
    
    Next i
    
    End Sub


    Ou expliquez mieux ce que vous voulez.

    Cordialement.
    0
    1. momo1992
       
      Merci pour votre réponse.
      on fait cette Macro existe déjà dans ce fichier d'entreprise et il donne une erreur maintenant et moi je sais enregistrer une macro seulement mais pas en VBA. Voila l'onglet utiliser avec la macro pour qu'elle marche si ca peut vous éclairer. (et est ce que je dois remplacer quelques données sur votre proposition ou je l'essaye directement? )

      <<< paramétrage des suppressions des lignes à 0
      Critère de suppression 1 0
      Première ligne EQUIV(B1;'BDD à trier'!L:L;0)
      Dernière ligne EQUIV(B1;'BDD à trier'!L:L;1)

      <<< paramétrage des suppressions des lignes dont le montant est un tiret
      Critère de suppression 2 -
      Première ligne EQUIV(B6;'BDD à trier'!L:L;0)
      Dernière ligne EQUIV(B6;'BDD à trier'!L:L;1)

      Je vous remercie beaucoup.
      0
    2. momo1992
       
      je peux vous envoyer le fichier si vous avez le temps de voir mais je ne sais pas si je peux le déposer ici ou vous devez me communiquer une adresse émail ?
      0
    3. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      J'ai simplement besoin de savoir :

      1:/ Quand la ligne doit-elle être supprimée? Quand elle est vide? Quand il y a "0" en A?

      2:/ le 2ème critère est "-", mais qu'est ce qui est égal à "-"? La colonne A?

      Sinon pour me joindre le fichier : https://www.cjoint.com/

      Cordialement.
      0
    4. momo1992
       
      je dois supprimer les lignes dont les cellules de la colonne "L" (qui contient les montant) contient "0" ou "-"

      Cordialement.
      0
    5. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Ah nous y voilà :)

      Allons y :

      Sub SUPPRIMER_LIGNE()
      
      Dim DL As Long
      
      DL = Cells(Application.Rows.Count, 12).End(xlUp).Row 'Définit la dernière cellule du tableau en prenant en référence la colonne L (remplacer par la colonne remplie jusque le plus bas si besoin)
      
      For i = DL To 1 Step -1 'J'ai mis 1 mais il s'agit de la première ligne du tableau, si le tableau commence à la ligne 4 par exemple, remplacer 1 par 4
      
      If Range("L" & i).Value = 0 Then Rows(i).Delete
      
      If Range("L" & i).Value = "-" Then Rows(i).Delete
      
      Next i
      
      End Sub
      


      Si le code ne vous va pas, merci de joindre un fichier afin que je puisse voir exactement quelle est la demande.

      Cordialement.
      0