Suppression de lignes suivant un contenu

christ91

XLDnaute Nouveau
Bonjour,

Voici mon problème, j'ai dans un classeur excel 2 feuilles .

la feuille 1 contient la liste de clients que je veux supprimer de la feuille 2.

Dans ma feuille 2 il peut y avoir plusieurs fois le nom du même client, et c'est là que j'ai un problème.
je n'arrive pas à faire une boucle pour supprimer toutes les lignes contenant c'est clients.

je joints un fichier exemple.

Merci
 

Pièces jointes

  • clients.xlsx
    8.9 KB · Affichages: 48
  • clients.xlsx
    8.9 KB · Affichages: 57
  • clients.xlsx
    8.9 KB · Affichages: 55

laetitia90

XLDnaute Barbatruc
Re : Suppression de lignes suivant un contenu

re tous :):):)

comme te la expliqué l'ami job:) tu adaptes le nom des feuilles
autrement je te donne le code brut par exemple copier 10 colonnes en feuil3
tu remarques le tablo... t va de a1 a j
donc
Feuil2.Range("a1:j" & Feuil2.Cells(Rows.Count, 1).End(3).Row)
redim idem
ReDim t1(1 To UBound(t), 1 To 10)
la restitution idem 10

Feuil3.[a1].Resize(x, 10) = t1



Code:
Sub esb()
 Dim t(), t1(), t2(), i As Long, x As Long, m As Object, c As Byte
  Set m = CreateObject("Scripting.Dictionary")
 t2 = Feuil1.Range("a1:a" & Feuil1.Cells(Rows.Count, 1).End(3).Row)
 t = Feuil2.Range("a1:j" & Feuil2.Cells(Rows.Count, 1).End(3).Row)
 For i = 1 To UBound(t2)
 If Not m.Exists(t2(i, 1)) Then m.Add t2(i, 1), t2(i, 1)
 Next i
 ReDim t1(1 To UBound(t), 1 To 10)
  For i = 1 To UBound(t)
 If Not m.Exists(t(i, 1)) Then
 x = x + 1
 For c = 1 To 10: t1(x, c) = t(i, c): Next c
 End If
 Next i
  Feuil3.[a1].Resize(x, 10) = t1
 End Sub

apres on peu aller plus vite en utilisant directement Dictionary optimiser la declaration des tablos
mais bon sans plus d'infos combien de lignes en feuil1 & feuil2 ??? cela a son importance

salut Job:):) bien aime ta remarque
 

job75

XLDnaute Barbatruc
Re : Suppression de lignes suivant un contenu

Re,

Ce code utilise la méthode de Laetitia avec un nombre quelconque de colonnes :

Code:
Sub SupprimerClients()
Dim t1, t2, ncol%, d As Object, i&, n&, j%
With ActiveWorkbook.Sheets(1) '1ère feuille du classeur actif
  t1 = .Range("A1", .Range("A" & .Rows.Count).End(xlUp)(2)) 'au moins 2 éléments
End With
With ActiveWorkbook.Sheets(2) '2ème feuille du classeur actif
  t2 = .UsedRange.Resize(.UsedRange.Rows.Count + 1) 'au moins 2 éléments
End With
ncol = UBound(t2, 2)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t1)
  d(t1(i, 1)) = ""
Next
For i = 1 To UBound(t2)
  If Not d.Exists(t2(i, 1)) Then
    n = n + 1
    For j = 1 To ncol
      t2(n, j) = t2(i, j)
    Next
  End If
Next
'---restitution---
With ActiveWorkbook.Sheets(3) '3ème feuille du classeur actif
  .Cells.ClearContents 'RAZ
  If n Then .[A1].Resize(n, ncol) = t2
  .Activate 'facultatif
End With
End Sub
Bien sûr le classeur doit avoir au moins 3 feuilles, formatez la 3ème comme vous le désirez.

Edit : ah bien le bonsoir chère Laeti :)

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Suppression de lignes suivant un contenu

Re,

J'ai testé le fichier du post #1 avec 163000 lignes et les colonnes B:J remplies de 1 en Feuil2.

Sur Win 7 - Excel 2010 les macros des posts #17 et #18 s'exécutent toutes deux en 3,2 secondes.

Bonne fin de soirée.
 

christ91

XLDnaute Nouveau
Re : Suppression de lignes suivant un contenu

Bonsoir,


Merci pour vos réponses, le code répond parfaitement à mes attentes, voir plus ! car Je vais pouvoir traiter mes fichiers en 1 temps record.
Alors que j'étais parti pour faire une boucle. avec la recherche find.
D'ailleurs, savez vous...(je pense que oui...) comment gérer l'erreur, quand elle ne trouve pas la valeur recherchée dans la feuille ?


Bonne soirée
 

Discussions similaires

Réponses
22
Affichages
875

Statistiques des forums

Discussions
312 492
Messages
2 088 910
Membres
103 983
dernier inscrit
AlbertCouillard