Pourquoi Erreur 13 sur cette macro

Staple1600

XLDnaute Barbatruc
Bonjour le forum

En modifiant une macro trouvée ici
https://www.excel-downloads.com/threads/suppression-lignes.77404/
J'obtiens un message d'erreur dont je comprend pas l'origine.

Code:
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Left(Cells(i, 1), 4) = "Subj" Then MsgBox Rows(i).Address(False, False)
Next
Le code ci-dessus fonctionne puis s'arrete : Erreur Exécution 13

Le code ci-dessous lui génère l'erreur 13 des le départ
Code:
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If IsEmpty(Cells(i, 1)) Or Not Left(Cells(i, 1), 4) = "Subj" Then Rows(i).Delete
Next

Merci de votre aide
 

Staple1600

XLDnaute Barbatruc
Re : Pourquoi Erreur 13 sur cette macro

Bonjour

Merci pour vos réponses

En modifiant la macro de cette facon

For i = Range("A65536").End(xlUp).Row To 1 Step -1
If IsEmpty(Cells(i, 1)) Then Rows(i).Delete
If IsError(Cells(i, 1)) Then Rows(i).Delete
If Not Left(Cells(i, 1), 4) Like "Subj" Then Rows(i).Delete
Next

Je n'ai plus d'erreur (mais l'éxécution du code n'est pas trés rapide)

Je joindrai un fichier après avoir oter les données confidentielles.
 

Staple1600

XLDnaute Barbatruc
Re : Pourquoi Erreur 13 sur cette macro

Re

Donc voici un fichier exemple

Sur celui-ci la macro ListeOBJET()

fonctionne sans erreur.


Mais de cette facon ca ne fonctionne pas

For i = Range("A65536").End(xlUp).Row To 1 Step -1
If IsEmpty(Cells(i, 1)) _
Or IsError(Cells(i, 1)) _
Or Not Left(Cells(i, 1), 4) Like "Subj" Then Rows(i).Delete
Next

Je ne comprends pas ou est l'erreur


PS: pour mieux comprendre le but cette macro, voir ce post, svp
https://www.excel-downloads.com/thr...ents-envoyes-outlook-express-seulement.77389/
 
Dernière édition:

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Pourquoi Erreur 13 sur cette macro

Re

En fait quand ta cellule est une erreur il plante sur le left alors que dans ta version qui marche vu que tu as déjà traité l'erreur il ne plante pas

essaies ainsi

For i = Range("A65536").End(xlUp).Row To 1 Step -1
If IsError(Cells(i, 1)) Then
Rows(i).Delete
ElseIf IsEmpty(Cells(i, 1)) Or Left(Cells(i, 1), 4) <> "Subj" Then
Rows(i).Delete
End If
Next
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Pourquoi Erreur 13 sur cette macro

Re

D'ailleurs pour t'en convaincre ta macro qui marche si tu bouges l'ordre des tests

For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Not Left(Cells(i, 1), 4) Like "Subj" Then Rows(i).Delete
If IsEmpty(Cells(i, 1)) Then Rows(i).Delete
If IsError(Cells(i, 1)) Then Rows(i).Delete
Next

Là elle plante

quand tu mets les 3 tests ensemble il teste les 3 même si le premier est mauvais donc plante
 

Staple1600

XLDnaute Barbatruc
Re : Pourquoi Erreur 13 sur cette macro

Re

Merci Pascal de ton aide

Je vais tester ta macro sur le fichier original
(qui doit contenir plus de 7000 lignes)

Edit: je viens de tester sur plus de 10000 lignes
le temps d'éxécution est trés long (j'ai du faire un CTRL+PAUSE)

Comment faire pour accélérer le temps d'exécution, svp,

Problème de macro a priori résolu

Reste le problème que je posais ici
https://www.excel-downloads.com/thr...ents-envoyes-outlook-express-seulement.77389/

Car cette macro est censée résoudre ce problème

Je reste donc preneur de vos solutions.

Merci.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Pourquoi Erreur 13 sur cette macro

Re

C'était déja sur false
extrait code de la macro
Code:
With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
End With
'ici le code modifié de Pascal76
With Application
    .ScreenUpdating = True
    .Calculation = CalcMode
    .CutCopyMode = False
End With

Je n'ai pas pu tester la macro jusqu'a la fin de l'exécution
mais ca dépasse déjà les 3 minutes (sur un fichier de plus de 10000 lignes)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Pourquoi Erreur 13 sur cette macro

Re

Pour information:

La macro de Pascal76
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If IsError(Cells(i, 1)) Then
Rows(i).Delete
ElseIf IsEmpty(Cells(i, 1)) Or Left(Cells(i, 1), 4) <> "Subj" Then
Rows(i).Delete
End If
temps d'éxécution: 00.00.04

Celle-ci
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If IsEmpty(Cells(i, 1)) Then Rows(i).Delete
If IsError(Cells(i, 1)) Then Rows(i).Delete
If Not Left(Cells(i, 1), 4) Like "Subj" Then Rows(i).Delete
Next
temps d'éxécution: 00.00.03

Testé sur le fichier exemple contenu dans le zip (voir précedent message)
cad sur 200 lignes
 

tirex28

XLDnaute Occasionnel
Re : Pourquoi Erreur 13 sur cette macro

Bonjour,

En utilisant le filtre automatique ca devrait aller plus vite:

Code:
Sub FastDelete()
On Error Resume Next
     With Range(Range("A1"), Range("A65536").End(xlUp))
        .AutoFilter field:=1, Criteria1:="<>Subj*"
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
End Sub

Cordialement,

tirex28
 

Staple1600

XLDnaute Barbatruc
Re : Pourquoi Erreur 13 sur cette macro

Re

14 secondes sur un fichier de 12 lignes

avec cette macro
(merci à tous les contributeurs)
Code:
Sub FastDelete()
Dim debut As Date
Dim fin As Date
Dim Duree As Date
debut = Time

With Application
    CalcMode = .Calculation
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
End With

On Error Resume Next
     With Range(Range("A1"), Range("A65536").End(xlUp))
        .AutoFilter 1, "<>Subj*"
        .SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    
With Application
    .ScreenUpdating = True
    .Calculation = CalcMode
    .CutCopyMode = False
End With

fin = Time
Duree = fin - debut
MsgBox "Temps d'éxécution de la macro : " & Duree
End Sub
 

Discussions similaires

Réponses
6
Affichages
130

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16