![]() |
|
Forum
|
|
|
#1 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: avril 2007
Messages: 30
|
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
|
|
|
|
| ANNONCES | |||
|
|
|
|
#2 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
|
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
c'est toi qui nous le dira |
|
|
|
|
|
#3 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: juillet 2006
Messages: 41
|
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
|
|
|
|
|
|
#4 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: avril 2007
Messages: 30
|
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 = ""
Merci pour votre aide |
|
|
|
|
|
#5 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
|
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 |
|
|
|
|
|
#6 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: avril 2007
Messages: 30
|
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 |
|
|
|
|
|
#7 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
|
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
|
|
|
|
|
|
#8 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
|
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
si celle-ci devait etre conservée, le signaler et je regarderais |
|
|
|
|
|
#9 (permalink) |
|
XLDnaute Accro
Date d'inscription: février 2005
Localisation: Aubenas
Version Excel : Excel 2000 (PC)
Messages: 1 128
|
Bonjour à tous
Penser aussi à figer l'écran... application.screenupdating=false au début et true à la fin
__________________
A+ Michel_M |
|
|
|
|
|
#10 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
|
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 |
|
|
|
|
|
#11 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: avril 2007
Messages: 30
|
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. |
|
|
|
|
|
#12 (permalink) |
|
XLDnaute Barbatruc
Date d'inscription: janvier 2006
Localisation: 69400 LIMAS
Version Excel : Excel 2000 (PC)
Messages: 6 023
|
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
|
|
|
|
|
|
#13 (permalink) |
|
XLDnaute Nouveau
Date d'inscription: avril 2007
Messages: 30
|
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 |
|
|
|
| ANNONCES | |
![]() |
| Liens sociaux |
| Outils de la discussion | |
|
|
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 |