Suppression de ligne conditionnelle

arnaud95000 Messages postés 46 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 18 décembre 2007 - 5 nov. 2007 à 15:20
caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007 - 5 nov. 2007 à 17:22
Bonjour à tous,
En fait j'ai un problème sous VBA j'ai réussi à le résoudre mais c'est un peu long je voudrais savoir si vous auriez une procédure plus rapide.
En fait j'ai sur la feuille un des données avec le critère département en colonne G. Sur une deuxieme feuille j'ai le critère département à retenir en colonne A. Ce que je souhaiterai c'est supprimer la ligne entière sur la feuille un si le département n'ést pas dans la liste des départements à retenir de la feuille 2. Merci beaucoup de votre aide et bonne journée.

 

1 réponse

caco64 Messages postés 69 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 14 décembre 2007
5 nov. 2007 à 17:22
Le test sur le département est simple, tu récupères son nom dans la
feuille 1 et tu le compares à tous les noms de départements de la
feuille 2.
Un premier moyen de gagner du temps est de stocker ces noms dans une variable au tout départ :

for i = 1 to ni             '(n à définir)
    nom_département(i) = sheets("feuil2").cells(3,2).offset(i,0).value
next i

Ca évite de les rechercher 100 fois.

Ensuite
tu fais ton test. La aussi, tu peux gagner du temps en sortant de la
boucle dès qu'il a trouvé un même nom (le test sur les noms suivants ne
présente plus d'intérêt).

Le dernier moyen que je vois pour gagner du temps est d'utiliser la fonction union.


Un truc du genre ci-dessous devrait te permettre de stocker les lignes à virer.

dim ligne_a_virer() as long, j_a_virer as long
dimdepartement_cherché(1 to nj) as string, nom_département(1 to ni) as string

j_a_virer = 0

for j = 1 to nj

    departement_cherché(j) = sheets("feuil1").cells(5,4).offset(j,0).value

    for i = 1 to ni

       if departement_cherché(j) = nom_département(i)

           exit for

       end if

       if i = ni then

          j_a_virer = j_a_virer + 1

          redim preserve lignes_à_virer(1 to j_a_virer)

          ligne_a_virer(j_a_virer) = 5+j

    next i

next j


Ensuite il faut faire l'union de tous ces n° de ligne

dim lignes_suppr as range

for i = 1 to ubound(lignes_à_virer)

    set lignes_suppr = union(lignes_suppr,rows(ligne_a_virer(i)))
next i

lignes_suppr.delete


Je n'ai pas testé ce code, c'est simplement pour illustrer ce que je dis.

Mais ça ne doit pas être loin de marcher.

La haine aveugle n'est pas sourde
0
Rejoignez-nous