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

Résolu/Fermé
momo1992 - 22 sept. 2015 à 14:57
 momo1992 - 24 sept. 2015 à 09:33
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

A voir également:

1 réponse

Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 22/09/2015 à 15:38
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
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
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
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
22 sept. 2015 à 16:02
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
je dois supprimer les lignes dont les cellules de la colonne "L" (qui contient les montant) contient "0" ou "-"

Cordialement.
0
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 22/09/2015 à 16:42
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