Supprimer lignes contenant la valeurs déterminées

anasimo

XLDnaute Occasionnel
Bonjour

je cherche une macro ou autre.

Dans ma colonne I de ma feuille "utilisateurs" je vais mettre les matricules de certaines personnes (alimentée au fur et à mesure).

Dans ma feuille "BD" qui contiennent des données...je veux supprimer les lignes qui contiennent les matricules des personnes énumérées dans la colonne I de ma feuille "utilisateurs"

NB les personnes énumérées se trouvent dans la colonne J de la feuille BD

J'espère que j'ai bien expliquer :) et Merci d'avance
 

job75

XLDnaute Barbatruc
Bonsoir anasimo,

Testez cette macro :
VB:
Sub SupprimerLignes()
Dim tablo, d As Object, i&, x$, tablo1()
With Sheets("Utilisateurs") 'nom modifiable
    tablo = .Range("A1", .UsedRange).Columns("I:J") 'matrice, plus rapide, au moins 2 éléments
End With
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For i = 1 To UBound(tablo)
    x = CStr(tablo(i, 1))
    If x <> "" Then d(x) = "" 'liste sans doublon
Next i
Application.ScreenUpdating = False
With Sheets("BD") 'nom modifiable
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    .Columns(1).Insert 'insère une colonne auxiliaire
    With .Range("A1", .UsedRange)
        tablo = .Columns("K:L") 'matrice, plus rapide, au moins 2 éléments (colonnes J:K à l'origine)
        ReDim tablo1(1 To UBound(tablo), 1 To 1)
        For i = 1 To UBound(tablo)
            tablo1(i, 1) = IIf(d.exists(CStr(tablo(i, 1))), "a", 1)
        Next i
        .Columns(1) = tablo1
        .Sort .Columns(1), xlAscending, Header:=xlNo 'tri pour regrouper et accélérer
        On Error Resume Next 'si aucune SpecialCell
        .Columns(1).SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete 'supprime les valeurs textes
    End With
    .Columns(1).Delete 'supprime la colonne auxiliaire
    With .UsedRange: End With 'actualise les barres de défilement
End With
End Sub
Elle est très rapide car elle utilise des tableaux VBA, le Dictionary et un tri avant suppression.

Attention , il ne faut pas de cellules fusionnées car alors le tri n'est pas possible.

A+
 
Dernière édition:

anasimo

XLDnaute Occasionnel
Dans la macro précédente j'ai ajouté des CStr pour les cas où :

- il y aurait des valeurs d'erreur

- un même matricule puisse être tantôt un nombre tantôt un texte.
Ah merci beaucoup.....exactement certaines personnes ont des matricules (en fait c'est leur code identifiant accès syst) ....parfois c'est 1230 parfois c'est 1230B ) j'allais les aojuter à chaque fois....votre code amélioré va me rendre bcp de service
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 345
Membres
102 868
dernier inscrit
JJV