suppression de ligne suivant conditions

D

David

Guest
Bonjour le forum

J'ai pris dans un précédent post le code suivant:
Code:
Dim i As Integer
i = 4

With Feuil3
    For i = .Range('a65536').End(xlUp).Row To 2 Step -1
        If .Cells(i, 32) = 'E' Then Rows(i).Delete
    Next i
    For i = .Range('a65536').End(xlUp).Row To 2 Step -1
        If .Cells(i, 32) = '' Then Rows(i).Delete
    Next i
End With

Le problème est que mon tableau possede plusieurs milliers de ligne et que la macro met plusieur minutes a s'exécuter.

Quelqu'un a t'il une solution qui prendrait moins de temps?

David
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

essaies déjà comme ceci

application.screenupdating=false

With Feuil3

For i = .Range('a65536').End(xlUp).Row To 2 Step -1

If .Cells(i, 32) = 'E' or .Cells(i, 32) = '' Then Rows(i).Delete

Next i

End With

application.screenupdating=true
 

JYLL

Nous a quitté
Repose en paix
Bonjour David,

Tu peux mettre le test sur une seule ligne comme ce qui suit,

Code:
If .Cells(i, 32) = 'E' or .Cells(i, 32) = '' Then Rows(i).Delete

Bon test.

Amicalement;

Jean-Yves

Pardon pour la réponse, j'avais pas rafraichi.

Message édité par: jyll, à: 16/01/2006 12:22
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

En fait au lieu de faire deux boucles on en fait qu'un et on teste tes 2 cas en un seul coup

Mon ajout de application.screenupdating = false en début de macro evite la mise à jour de l'affichage et permet de gagner beaucoup de temps

Bon courage
 
D

David

Guest
OK mais j'ai du mal a l'adapter

Peut tu m'expliquer à l'aide du petit exemple ci joint.
Savoir ce que réalise l'ordinateur (parce que j'ai récupérer le code et je croyais que j'avais compris comment il fonctionnait mais a prioris pas trop vu que j'arrive pas a l'adapter).

Merci d'avance, je sais que je suis chiant mais j'apprend

[file name=TEST_20060116161336.zip size=7644]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TEST_20060116161336.zip[/file]

David
 

Pièces jointes

  • TEST_20060116161336.zip
    7.5 KB · Affichages: 12

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

Voici modifié

Tu comptais tes lignes sur la colonne A qui est vide alors que ta colonne est vide et tu ne supprimais pas les éléments de la colonne E [file name=TEST_20060116161839.zip size=7550]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TEST_20060116161839.zip[/file]
 

Pièces jointes

  • TEST_20060116161839.zip
    7.4 KB · Affichages: 17
D

David

Guest
Re
J'aurai besoin encore une fois de tes lumières.

Code:
Sub Essai()
'création d'un feuille de calcul
Feuil1.Select
Feuil1.Copy After:=Feuil1
ActiveSheet.Name = 'Tableau de synthèse'

'Met la formule =SI(ESTVIDE(N8);'';RECHERCHEV(N8;BDD_EXCLURE;2;0))
'dans la cellule AF8
Range('AF8').FormulaR1C1 = '=IF(ISBLANK(R[0]C[-18]),'''',VLOOKUP(R[0]C[-18],BDD_EXCLURE,2,0))'

'Trouve la dernière ligne du tableau
ligne = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count
Rows(ligne & ':' & ligne - 9).Select
Selection.Delete Shift:=xlUp

'Nouveau calcul de la dernière ligne du tableau (après suppression de ligne)
ligne2 = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count
Range('AF8').Select
Selection.AutoFill Destination:=Range('AF8' & ':AF' & ligne2), Type:=xlFillDefault

Numero = ActiveSheet.CodeName

Dim i As Integer
i = 1
Application.ScreenUpdating = False
With Sheets('Tableau de synthèse')

For i = .Range('C65536').End(xlUp).Row To 8 Step -1

If .Range('AF' & i) = 'E' Or .Range('AF' & i) = '' Then Rows(i).Delete

Next i


End With

Application.ScreenUpdating = True

End Sub

Le débogeur me marque qu'il y a une erreur sur cette ligne

Code:
If .Range('AF' & i) = 'E' Or .Range('AF' & i) = '' Then Rows(i).Delete

Imcompatibilité de type
Je ne comprend pas, pourtant cela focntionne dans l'exemple que tu m'as transmis.

David
 
D

David

Guest
Re

Je pense qu'il est plus facile de voir une erreur avec un exemple plutot qu'avec un code.

Donc si vous voulez bien jettez un coup d'oeil sur le fichier joint.

Je pense que l'erreur vient du fait que lorsque l'ordinateur exécute la formule ci dessous:
=SI(ESTVIDE(B4);'';RECHERCHEV(B4;BDD_INFO;2;0))

et que la valeur recherché n'est pas comprise dans la base de donnée INFO, la valeur renvoyé est donc #N/A.

Et que c'est cette valeur qui pose problème.

Si vous avez une explication je suis preneur.
Peut etre remplacé tous les #N/A par une autre valeur mais ca je ne sais pas faire.


David

[file name=TEST_20060116161839_20060116174439.zip size=12092]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TEST_20060116161839_20060116174439.zip[/file]
 

Pièces jointes

  • TEST_20060116161839_20060116174439.zip
    11.8 KB · Affichages: 9

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

Voici avec la modif sur la macro essai [file name=TEST_20060117092510.zip size=10774]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TEST_20060117092510.zip[/file]
 

Pièces jointes

  • TEST_20060117092510.zip
    10.5 KB · Affichages: 17

Discussions similaires

Réponses
4
Affichages
233

Statistiques des forums

Discussions
312 472
Messages
2 088 709
Membres
103 928
dernier inscrit
MIKETUAU