Bonjour le forum,
j'avais besoin de trier une base de données en supprimant des lignes inutiles.
Je pense isoler ces lignes en ajoutant à côté de chaque ligne "OUI" ou "NON" si c'est une ligne à conserver ou non. Au départ je pensais mettre une formule classique ( si(cnum(gauche(d1;1)= 607.... seulement ma formule était trop longue pour être transcrite dans ma macro.
J'ai donc été obligée de créer des boucles en vba. Cela fonctionne très bien seulement comme il y a 18000 lignes à traiter et que mes boucles doivent 'analyser' chaque ligne, cela prend un temps fou (15 bonnes minutes) alors même si le résultat correspond à ce que je veux j'aimerais savoir si vous auriez une solution alternative à ce petit casse-tête.
J'ai remplacé ces lignes qui bug :
Par ces boucles :
J'espère que vous pourrez m'aider
En vous remerciant
Marion
j'avais besoin de trier une base de données en supprimant des lignes inutiles.
Je pense isoler ces lignes en ajoutant à côté de chaque ligne "OUI" ou "NON" si c'est une ligne à conserver ou non. Au départ je pensais mettre une formule classique ( si(cnum(gauche(d1;1)= 607.... seulement ma formule était trop longue pour être transcrite dans ma macro.
J'ai donc été obligée de créer des boucles en vba. Cela fonctionne très bien seulement comme il y a 18000 lignes à traiter et que mes boucles doivent 'analyser' chaque ligne, cela prend un temps fou (15 bonnes minutes) alors même si le résultat correspond à ce que je veux j'aimerais savoir si vous auriez une solution alternative à ce petit casse-tête.
J'ai remplacé ces lignes qui bug :
Code:
[COLOR="Blue"][B][I][B]ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]<>0,IF(LEFT(RC[-9]=""0"",IF(VALUE(LEFT(RC[-9],3))=66,""OUI"",""NON""),IF(OR(AND(607<VALUE(RC[-9],3)),VALUE(LEFT(RC[-9],3))<700),VALUE(LEFT(RC[-9],3))>709),IF(OR(VALUE(RC[-9],2))=75,VALUE(LEFT(RC[-9],2))=76,VALUE(LEFT(RC[-9],3))=771,VALUE(LEFT(RC[-9],3))=609,VALUE(LEFT(RC[-9],3))=675,VALUE(LEFT(RC[-9],3))=676,VALUE(LEFT(RC[-9],3))=671,VALUE(LEFT(RC[-9],3))=772,VALUE(LEFT(RC[-9],3))=775,VALUE(LEFT(RC[-9],1))=8,VALUE(LEFT(RC[-9],1))=9),""NON"",""OUI""),""NON"")),""NON"")"
'"=IF(OR(LEFT(RC[-9],2)=""06"",LEFT(RC[-9],2)=""07"",LEFT(RC[-9],1)=""6"",LEFT(RC[-9],1)=""7""),""OUI"",""NON"")"
Range("M1").Select
Selection.AutoFill Destination:=Range("M1:M" & dligne2 - 1)[/B][/I][/B][/COLOR]
Par ces boucles :
Code:
[COLOR="blue"][I][B][B]For y = 1 To dligne2 - 1
If ActiveSheet.Range("L" & y).Value = 0 Then
ActiveSheet.Range("M" & y) = "NON"
Else
If Left(ActiveSheet.Range("D" & y).Text, 1) = "0" Then
If Left(ActiveSheet.Range("D" & y).Value, 3) = 66 Then
ActiveSheet.Range("M" & y) = "OUI"
Else
ActiveSheet.Range("M" & y) = "NON"
End If
Else
If Left(ActiveSheet.Range("D" & y).Value, 3) > 607 And Left(ActiveSheet.Range("D" & y).Value, 6) <= 649000 Or Left(ActiveSheet.Range("D" & y).Value, 6) > 740000 And Left(ActiveSheet.Range("D" & y).Value, 6) <= 741113 Then
If Left(ActiveSheet.Range("D" & y).Value, 3) = 609 Or Left(ActiveSheet.Range("D" & y).Value, 6) = 633000 Or Left(ActiveSheet.Range("D" & y).Value, 6) = 633001 Or Left(ActiveSheet.Range("D" & y).Text, 7) = "634010F" Or Left(ActiveSheet.Range("D" & y).Value, 3) = 641 Or Left(ActiveSheet.Range("D" & y).Value, 3) = 646 Then
ActiveSheet.Range("M" & y) = "NON"
Else
ActiveSheet.Range("M" & y) = "OUI"
End If
Else
If Left(ActiveSheet.Range("D" & y).Value, 3) = 673 Or Left(ActiveSheet.Range("D" & y).Value, 3) = 690 Or Left(ActiveSheet.Range("D" & y).Value, 6) = 747902 Or Left(ActiveSheet.Range("D" & y).Value, 6) = 749000 Or Left(ActiveSheet.Range("D" & y).Value, 3) = 773 Then
ActiveSheet.Range("M" & y) = "OUI"
Else
ActiveSheet.Range("M" & y) = "NON"
End If
End If
End If
End If
Next y[/B][/B][/I][/COLOR]
J'espère que vous pourrez m'aider
En vous remerciant
Marion
Dernière édition: