Supression de lignes sous conditions multiple

Résolu/Fermé
Micky_Willys Messages postés 5 Date d'inscription samedi 29 mars 2008 Statut Membre Dernière intervention 2 avril 2008 - 29 mars 2008 à 16:01
Micky_Willys Messages postés 5 Date d'inscription samedi 29 mars 2008 Statut Membre Dernière intervention 2 avril 2008 - 2 avril 2008 à 19:46
Bonjour,

Je desire nettoyer un fichier, en supprimant des lignes inutiles. Mon code fonctionne mais j'ai au moins 20 condition et je trouve que le code n'est pas pratique car la condition est trop longue. Auriez vous des suggestions?

Merci d'avance.

code partiel (seulement 5 conditions)

Range("A1").Select
Do Until ActiveCell = ""
If ActiveCell.Offset(0, 12) = "CASH BALANCES" Or ActiveCell.Offset(0, 12) = "CASH" Or ActiveCell.Offset(0, 12) = "MARGIN" Or ActiveCell.Offset(0, 12) = "EXTERNAL FX HEDGE" Or ActiveCell.Offset(0, 12) = "HEDGE FORWARD" Then
ActiveCell.Offset(0, 0).Rows("1:1").EntireRow.Select
Selection.Delete Shift:=xlUp
Else
ActiveCell.Offset(1, 0).Select
End If
Loop

2 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
29 mars 2008 à 16:45
hello
mettre les arguments de test (CASH BALANCES, CASH, MARGIN,... ) dans un tableau et faire une boucle en comparant ActiveCell.Offset(0, 12) avec chaque élément du tableau ?
0
Micky_Willys Messages postés 5 Date d'inscription samedi 29 mars 2008 Statut Membre Dernière intervention 2 avril 2008
29 mars 2008 à 16:52
En effet, ca pourrait faire le job. Penses tu qu'il serait possible de creer une espece de variable dans le code qui permettrait d'eviter la creation d'un tableau.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
29 mars 2008 à 17:28
même en mettant la liste dans une seule variable, il faut tester chaque élément en manipulant la chaine de caractères, il me semble plus simple d'utiliser un tableau
0
Micky_Willys Messages postés 5 Date d'inscription samedi 29 mars 2008 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 13:09
Un grand merci, j'ai suivi votre conseil et il est vrai que c'est beaucoup plus lisible.
0
Micky_Willys Messages postés 5 Date d'inscription samedi 29 mars 2008 Statut Membre Dernière intervention 2 avril 2008
2 avril 2008 à 19:46
Bonjour,

Ma question va peut etre sonnée stupide ou bizarre, mais je me demande si une macro peut etre trop rapide pour l'execution de certaines taches.
En effet, lorsque j'execute la macro tache par tache (avec F8) j'obtiens le résultat excompté mais des que je l'execute en mode lecture, no results!

Le principe de ma macro est de comparer une valeur a un ensemble de valeur afin de supprimer les lignes inutiles de ma feuille Excel.

Voici mon code:

'create a table with all the securities you don't want to see appaer in the report

Range("Z10001").Select
ActiveCell.Formula = "CASH BALANCES"
Range("Z10002").Select
ActiveCell.Formula = "MARGIN"
Range("Z10003").Select
ActiveCell.Formula = "EXTERNAL FX HEDGE"
Range("Z10004").Select
ActiveCell.Formula = "FX CASH BALANCES"
Range("Z10005").Select
ActiveCell.Formula = "FUNDING FOREX"
Range("Z10006").Select
ActiveCell.Formula = "FUTURE"
Range("Z10007").Select
ActiveCell.Formula = "HEDGE FORWARD FX"
' select the first row of the file

Range("A1").Select
'going to go until the last cell populated
Do Until ActiveCell = ""
'initialize the counter
i = 10001

'going to compare the column M (Type) to the table created previously

Do Until i = 10008
If ActiveCell.Offset(0, 12).Value = Range("Z" & i).Value Then
ActiveCell.Offset(0, 0).Rows("1:1").EntireRow.Select
Selection.Delete Shift:=xlUp

Else
i = i + 1

End If

Loop

ActiveCell.Offset(1, 0).Select
Loop

'delete the table

Range("Z8001:Z10007").Select
Selection.ClearContents

Range("A1").Select

Merci d'avance,
M.
0