Excel Downloads
Forum

Précédent   Excel Downloads Forums > Excel > Forum Excel


Réponse
 
LinkBack Outils de la discussion
Vieux 09/05/2007, 15h23   #1 (permalink)
XLDnaute Nouveau
 
Date d'inscription: avril 2007
Messages: 30
Par défaut probleme lenteur suppression de ligne

Bonjour

apres avoir recherché un bout de programme dans le forum me permettant de supprimer des lignes sous certaines conditions,je me retrouve devant un phenomene de lenteur excessive du sans doute a la formule

Auriez vous une idee pour corriger cela sachant que je traite entre 10 000 et 45 000 lignes et que cela prends enormememnt de temps( plusieurs minutes)


voici le code utilisé
Code:
Sub nettoyer()
Dim I As Integer
Dim debut1 As String, debut2 As String
For I = 21 To (Range("A65536").End(xlUp).Row - 2)



debut1 = Range("D" & I).Value

debut2 = Range("E" & I).Value


If debut1 < -5.5 Or debut1 > 8.2 Or debut2 < 42 Or debut2 > 51 Then
Rows(I).Delete Shift:=xlUp
End If
Next I
End Sub
merci pour votre aide
smartbis est déconnecté   Réponse avec citation
ANNONCES
Vieux 09/05/2007, 18h59   #2 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
Par défaut Re : probleme lenteur suppression de ligne

bonsoir smartbis

je l'aurais ecrit comme cela

Code:
Sub nettoyer()
Dim I As Integer
For I = Range("A65536").End(xlUp).Row - 2 To 21
If Range("D" & I) < -5.5 Or Range("D" & I) > 8.2 Or Range("E" & I).Value < 42 Or Range("E" & I).Value > 51 Then
Rows(I).Delete
Next I
End Sub
quant a savoir si c'est plus rapide.....
c'est toi qui nous le dira
pierrejean est déconnecté   Réponse avec citation
Vieux 09/05/2007, 19h32   #3 (permalink)
bof
XLDnaute Nouveau
 
Date d'inscription: juillet 2006
Messages: 41
Par défaut Re : probleme lenteur suppression de ligne

bonsoir,
Pour aller jusqu'à 45000 integer ne convient pas.
De plus il est inutile d'évaluer la dernière ligne à chaque tour de boucle For (c'est ce qui prend le plus de temps)

Pour reprendre le code de pierrejean je mettrai :

Code:
Sub nettoyer()
Dim i As Long, k As Long
k = Range("A65536").End(xlUp).Row - 2
For i = k To 21 Step -1
If Range("D" & i) < -5.5 Or Range("D" & i) > 8.2 Or _
    Range("E" & i) < 42 Or Range("E" & i) > 51 Then Rows(i).Delete
Next i
End Sub
A+
bof est déconnecté   Réponse avec citation
Vieux 10/05/2007, 09h46   #4 (permalink)
XLDnaute Nouveau
 
Date d'inscription: avril 2007
Messages: 30
Par défaut Re : probleme lenteur suppression de ligne

salut

reponse pour pierre jean

je viens de tester ton code et une erreur s'affiche disant qu'il existe un next sans un for alors que tu l'as bien mis dans ton texte

je ne comprends pas le probleme

Pour bof

il m'indique une erreur : icomppatibilté de type pour la ligne marqué en rouge.
j'ai essayé de rajouté .value apres chaque range mais cela n'arien changé

Code:
ub nettoyer2()
Dim I As Integer, k As Long
k = (Range("A65536").End(xlUp).Row - 2)
For I = k To 21 Step -1
If Range("D" & I).Value < -5.5 Or Range("D" & I).Value > 8.2 Or Range("E" & I).Value < 42 Or Range("E" & I).Value > 51 Then Rows(I).Delete
Next I
End Sub


Pour precision

dans macolonne D et E il s'agit d'une formule qui recupere un texte que je transforme en nombre par cette formule
Code:
 Set compteurligne = Sheets(1).Range("A20:A" & Range("A65536").End(xlUp).Row)
        
    Range("A1").Value = 1
    Range("A1").Select
    Selection.Copy
    Range("D21:E" & compteurligne.Count).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply, _
    SkipBlanks:=False, Transpose:=False
    Range("A1").Value = ""
ensuite je teste donc les nombres de chaque colonne qui me permettent de supprimer des lignes inutiles pour moi

Merci pour votre aide
smartbis est déconnecté   Réponse avec citation
Vieux 10/05/2007, 10h12   #5 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
Par défaut Re : probleme lenteur suppression de ligne

bonjour smartbis

il y a effectivement une erreur dans le code que je t'ais donné (il manque un End if)
concernant le type , je suggere:
Sub nettoyer()
Dim I As Integer
For I = Range("A65536").End(xlUp).Row - 2 To 21
If Cdbl(Range("D" & I) )< -5.5 Or Cdbl(Range("D" & I) )> 8.2 Or Cdbl(Range("E" & I)< 42 Or Cdbl(Range("E" & I)) > 51 Then
Rows(I).Delete
End if
Next I
End Sub

Pour plus de sureté un petit fichier exemple avec quelques données non confidentielles serait tres utile
pierrejean est déconnecté   Réponse avec citation
Vieux 10/05/2007, 10h25   #6 (permalink)
XLDnaute Nouveau
 
Date d'inscription: avril 2007
Messages: 30
Par défaut Re : probleme lenteur suppression de ligne

je viens de reinserer ton code mais une ereeur de syntaxe empeche le fonctionnement



j'essaie de t'envoyer mon fichier auquel j'ai enle vé pas mal de chose

donc l'application ne fonctionnera pas mais je voudrais que vous regardiez uniquement le probleme de conversion de ma colonne D et E ennombre puis le tri pour lequel vous m'avez repondu

comme vous pourrez le voir je debute et mon code est un peu lourd

mais bon l'essentiel est que j'apprenne

Merci pour votre aide
Fichiers attachés
Type de fichier : zip lolo.zip (23,3 Ko, 5 affichages)
smartbis est déconnecté   Réponse avec citation
Vieux 10/05/2007, 10h38   #7 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
Par défaut Re : probleme lenteur suppression de ligne

re

premier point

Un oubli impardonnable !!

lorsque l'on parcourt des chiffres du plus grand au moins grand il faut specifier step-1

donc la sub nettoyer qui fonctionne est la suivante

Code:
 
Sub nettoyer1()
Dim I As Integer
For I = Range("A65536").End(xlUp).Row - 2 To 21 Step -1
If Range("D" & I).Value < -5.5 Or Range("D" & I).Value > 8.2 Or Range("E" & I).Value < 42 Or Range("E" & I).Value > 51 Then
Rows(I).Delete
End If
Next I
End Sub
pour le reste je regarde
pierrejean est déconnecté   Réponse avec citation
Vieux 10/05/2007, 10h59   #8 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
Par défaut Re : probleme lenteur suppression de ligne

re

pour la transformation en chiffres une proposition:

Code:
 
Sub chiffres()
Dim I As Integer
 For I = 21 To Range("A65536").End(xlUp).Row - 2
  Range("D" & I).Value = Val(Range("D" & I).Value)
  Range("E" & I).Value = Val(Range("E" & I).Value)
 Next I
End Sub
Attention: on perd la liaison avec la colonne A

si celle-ci devait etre conservée, le signaler et je regarderais
pierrejean est déconnecté   Réponse avec citation
Vieux 10/05/2007, 11h16   #9 (permalink)
XLDnaute Accro
 
Date d'inscription: février 2005
Localisation: Aubenas
Version Excel : Excel 2000 (PC)
Messages: 1 128
Par défaut Re : probleme lenteur suppression de ligne

Bonjour à tous

Penser aussi à figer l'écran...
application.screenupdating=false au début et true à la fin
__________________
A+
Michel_M
michel_m est déconnecté   Réponse avec citation
Vieux 10/05/2007, 11h30   #10 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
Par défaut Re : probleme lenteur suppression de ligne

merci Michel_M

effectivement avec un grand nombre de lignes a traiter cela s'impose

pour la transformation en nombre 2 fonctions personnalisées qui permettent de conserver la liaison avec la colonne A

Code:
 
Function dernb(x As String)
If x = "" Then dernb = ""
If Len(x) = 32 Then
dernb = "Begin"
Exit Function
End If
If Len(x) = 30 Then
dernb = "End"
Exit Function
End If
dernb = Right(x, 9)
dernb = Val(dernb)
End Function

Function premnb(x As String)
If x = "" Then premnb = ""
If Len(x) = 32 Then
premnb = "Begin"
Exit Function
End If
If Len(x) = 30 Then
premnb = "End"
Exit Function
End If
premnb = Mid(x, Len(x) - 18, 9)
premnb = Val(premnb)
End Function
pierrejean est déconnecté   Réponse avec citation
Vieux 11/05/2007, 09h21   #11 (permalink)
XLDnaute Nouveau
 
Date d'inscription: avril 2007
Messages: 30
Par défaut Re : probleme lenteur suppression de ligne

salut

je viens de renter ta proposition dans mon code malheuresement un message d'erreur d'incomptibilité de type s'affiche et la ligne du IF est surligné en jaune

j'ai cherché et je ne vois pas ce qui cloche

As tu une idée
Merci d'avance

Concernat la trasnformation en nombre je n'ai pas encore essayé ta soultion que je garde sous le coude car pour l'instant ce que j'ai fait fonctionne et c'est rapide donc on verra plus tard pour essayer
merci quand mme du tuyau

Dernière modification par smartbis ; 11/05/2007 à 09h23.
smartbis est déconnecté   Réponse avec citation
Vieux 11/05/2007, 10h07   #12 (permalink)
XLDnaute Barbatruc
 
Avatar de pierrejean
 
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
Par défaut Re : probleme lenteur suppression de ligne

bonjour smartbis

tester:

Code:
 
Sub nettoyer1()
Dim I As Integer
For I = Range("A65536").End(xlUp).Row - 2 To 21 Step -1
If Cdbl(Range("D" & I).Value) < -5.5 Or Cdbl(Range("D" & I).Value) > 8.2 Or Cdbl(Range("E" & I).Value )< 42 Or Cdbl(Range("E" & I).Value) > 51 Then
Rows(I).Delete
End If
Next I
End Sub
Note: je serais absent ce WE
pierrejean est déconnecté   Réponse avec citation
Vieux 16/05/2007, 10h07   #13 (permalink)
XLDnaute Nouveau
 
Date d'inscription: avril 2007
Messages: 30
Par défaut Re : probleme lenteur suppression de ligne

Salut

me revoila

je viens de tester ton code et cela fonctionne bien maintenant
Neammoins la lenteur est toujours aussi presente
Toute les etapes de mon programme s'execute rapidement mais celle concernant le nettoyage des lignes inutiles est tres longues et ne me convient pas
je ne vois pas comment resoudre ce probleme

Si vous avez d'autres idées je suis preneur

Dans tous les cas merci de votre aide
smartbis est déconnecté   Réponse avec citation
ANNONCES
Réponse

Liens sociaux

Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui

Discussions similaires
Discussion Auteur Forum Réponses Dernier message
Probléme de lenteur sous Excel 2003 Callaway Forum Excel 0 07/08/2006 16h31
suppression de ligne si... Maximom Forum Excel 5 28/04/2006 16h19
RECHERCHEV - probleme de lenteur Eric Forum Excel Downloads - Archives 1 15/02/2005 00h31
Problème de lenteur dans les calculs Eric Forum Excel Downloads - Archives 0 11/02/2005 17h33
probleme de lenteur dj.run Forum Excel Downloads - Archives 0 17/04/2003 11h34


Fuseau horaire GMT +2. Il est actuellement 03h42.


(C) 2006 Excel Downloads