Supprimer la ligne selon les donnees contenues dans une colonne

bestsh

XLDnaute Nouveau
Bonjour à tous,

tout d'abord j'ai recherché sur pas mal de topics à avoir un peu mal à la tête.
Soit mon niveau VB est sous le manteau terrestre :confused:(fort probable) soit la solution est trop près et je suis presbyte..

En détail je souhaite supprimer les lignes d'une base sous excel 2007 lorsque les données contenues dans un classeur se retrouvent dans une colonne donnée.
En fait il s'agit de données client. je souhaite effacer les lignes de certains clients lorsque leur email ou domaine est dans une feuille blacklistée.

quelques précisions :

1) le fichier ou se trouvent les emails et domaines blacklistés est toujours le même ("bddexclu.xlsx" pour les tatillons) mais le fichier actif change de nom sans logique définie.
2) le champ blacklisté est soit un email soit un nom de domaine.
3) au cas ou l'email ou le domaine se retrouve dans la colonne R de mon classeur actif, je souhaite que la ligne correspondante soit effacée.
4) Le nombre de lignes est variable mais important à chaque fois (entre 2000 et 6000 lignes)
5) si erreur contenue dans la cellule, effacer la ligne également (#VALEUR ou autre par exemple).

Ci-joint les 2 fichiers exemple.

Merci d'avance pour vos lanternes.. Après beaucoup de recherches et des essais de personnalisations sans beaucoup de succès..Je lance un Help!:)
 

Pièces jointes

  • Exemple1.zip
    14.1 KB · Affichages: 35
  • Exemple1.zip
    14.1 KB · Affichages: 31
  • Exemple1.zip
    14.1 KB · Affichages: 37

Staple1600

XLDnaute Barbatruc
Re : Supprimer la ligne selon les donnees contenues dans une colonne

Bonsoir

Privilégie les *.xls plutôt que les *.xlsx

Ainsi plus de monde sera susceptible de t'aider.

PS: tous les membres du forum ne sont pas passés à Excel 2007ou 2010 ;)
 

bestsh

XLDnaute Nouveau
Re : Supprimer la ligne selon les donnees contenues dans une colonne

Merci Staple tu as totalement raison.

Voilà une mise à jour avec les fichier en .XLS
 

Pièces jointes

  • Exemple1.zip
    10.4 KB · Affichages: 46
  • Exemple1.zip
    10.4 KB · Affichages: 45
  • Exemple1.zip
    10.4 KB · Affichages: 46

Staple1600

XLDnaute Barbatruc
Re : Supprimer la ligne selon les donnees contenues dans une colonne

Bonjour


Test Ok avec cette macro chez moi
(Les deux fichiers Excel sont ouverts dans la même instance Excel)
VB:
Sub a()
Dim wbA As Workbook, wbB As Workbook
Dim c_rit As Range, p As Range, pf As Range
Set wbA = ThisWorkbook: Set wbB = Workbooks("bddexclu.xls")

With wbB.Worksheets(1)
Set c_rit = .Range(.[A1], .[A65536].End(3))
End With

c_rit.Copy wbA.Worksheets(1).[IV1]

With wbA.Worksheets(1)
    Set p = .[IV1].CurrentRegion
    .Range("A1").CurrentRegion.AdvancedFilter _
        Action:=xlFilterInPlace, _
        CriteriaRange:=p, _
        Unique:=False: Set pf = .[_FilterDataBase]
    pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12).Delete -4162
    .ShowAllData
    .Columns(256).Clear
End With
End Sub
 

bestsh

XLDnaute Nouveau
Re : Supprimer la ligne selon les donnees contenues dans une colonne

Merci pour ta réponse en Staple !
J'ouvre les 2 fichiers mais malheureusement elle me retourne un message d'erreur en me pointant la ligne :

Unique:=False: Set pf = .[_FilterDataBase]
..Erreur '1004' Commande n'a pu etre executée avec la plage spécifiée, sélectionnez une seule cellule dans la plage et réessayez..

J'ai laissé en A1 et essayé en .Range("R1") puis en (R:R).CurrentRegion.AdvancedFilter _
Parceque si j'ai bien compris c'est la cellule de départ et je souhaite vérifier la colonne R pour ma part.
J'ai aussi essayé de changer le unique:=True mais ce n'est apparament pas ça.. (oui je bidouille on ne sait jamais, sur un coup de chance...)

Je ne vois pas ce qui bloque.
 

bestsh

XLDnaute Nouveau
Re : Supprimer la ligne selon les donnees contenues dans une colonne

Tout dabord je te remercie pour ton aide Staples :eek:
J'aurai beaucoup aimé avoir une réponse après l'erreur mais je ne peux pas trop en demander, je suis pas seule sur le forum lol
Alors après quelques tirages de cheveux, j'ai réussi à corriger un peu ta macro de mon pauvre niveau..

Voilà le détail après beaucoup de recherches j'ai trouvé 2 erreurs. Mais j'ai toujours un problème...Elle ne fonctionne pas:mad:.

Tu es sur qu'elle a fonctionné sur ton environnement?

Code:
Sub dedoubinterclasseur()
Dim wbA As Workbook, wbB As Workbook
Dim c_rit As Range, p As Range, pf As Range

Set wbA = ActiveWorkbook
Set wbB = Workbooks("bddexclu.xls")

With wbB.Worksheets(1)
Set c_rit = .Range(.[A1], .[a65536].End(3))
End With

c_rit.Copy wbA.Worksheets(1).[IV1]

With wbA.Worksheets(1)
    Set p = .[IV1]
    .Range("Q1:Q800").AdvancedFilter Action:=xlFilterInPlace, _
        CriteriaRange:=p
Set pf = .[_FilterDataBase]
    pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12).Delete -4162
    If .FilterMode Then .ShowAllData
    .Columns(256).Clear
End With
End Sub

Après quelques/beaucoup d'essai et d'erreurs VB..
J'ai vu que le .Range où on applique le filtre doit avoir au moins 2 cellules, ce que j'ai corrigé.
J'ai vu aussi une autre macro où le .ShowAllData ne fonctionne pas seul mais avec le If .FilterMode

Quelqu'un peut-il me donner un petit coup de main pour finaliser ce que je souhaite faire?


1/ mettre une limite à la dernière ligne de données dans la feuille wbB pour prendre en compte l'ensemble des données (situées en Feuil1 A1:Axxx) puisque le nombre de lignes est variable
2/ Faire en sorte que la macro fonctionne en interrogeant à chaque fois en filtre la colonne R (de wbA) s'il existe une donnée présente en colonne A (sur le fichier wbB) alors effacer l'ensemble de la ligne.
3/ Ajouter un "ouvrir fichier" et fermer fichier avant et après le copier coller de la colonne A du fichier wbB


Merci d'avance :D.
Iris
 

Staple1600

XLDnaute Barbatruc
Re : Supprimer la ligne selon les donnees contenues dans une colonne

Bonsoir


Oui, sinon je ne l'aurai pas écrit. :rolleyes:

Je viens de retester et cela fonctionne

La seule que je n'ai pas précisé (car c'était évident pour moi) c'est qu'avant d'exécuter la macro (qui doit se trouver dans le classeur Exemple.xls), j'ai bien sur pris soin d'ajouter un entête (donc ici champ18 en A1 de la feuille 1 de bdexclu.xls)


PS: Comme je l'ai dit dans le salon, pour moi, la ligne 1 d'un classeur ne peut (ne doit être) qu'une ligne d'entête.
Ceci explique cela.

PS2: Moi, c'est Staple1600 et non Staples :rolleyes:
 

Pierrot93

XLDnaute Barbatruc
Re : Supprimer la ligne selon les donnees contenues dans une colonne

Bonjour à tous,

petite remarque au passage, pas utile d'utiliser "SpecialCells" lorsque l'on utilise "_FilterDatabase", cela évite une erreur au cas ou la plage filtrée ne ramènerait aucun élément... Préférable à mon sens de tester au préalable s'il y a bien des lignes répondant aux critères du filtre... Exemple de test dans le fil ci-dessous :
https://www.excel-downloads.com/threads/suppression-ligne-entiere.164035/

bonne journée
@+
 

bestsh

XLDnaute Nouveau
Re : Supprimer la ligne selon les donnees contenues dans une colonne

Merci à Staple1600.

Je ne voudrais pas être désagréable mais elle ne fonctionne pas chez moi..
Je n'y connait pas grand chose en VBA même si j'ai reussi a compiler une macro de 1000 lignes (qui pourrait je suis sur être optimisée) en utilisant l'enregistreur de macro et des bouts de code par ci par la.. et qui met en forme une BDD comme je veux :D

Quoi qu'il en soit ta macro s'arrête sur le .Range("A1") puis sur le .ShowAllData
Je suis en xl2007 au cas où..

Ca a été dur de comprendre sans aucun commentaire et même en ajoutant "Champ18" dans A1 en bddexclu ça ne fonctionne pas.

Si tu peux m'inclure cette macro dans un fichier et poster ça m'aiderait surement à comprendre si tu veux bien.

D'autre part une question même si je n'ai pas vu en pratique: tu copies la colonne A de bddexclu.xls dans la colonne IV du classeur actif si j'ai bien compris.
Mais lorsque on sélectionne les lignes à effacer, cela efface aussi les données en IV non? on peut peut-être copier les données dans un 2e onglet ou même les laisser dans le classeur d'origine qu'on referme après traitement?

Voilà, j'espère que cela pourra faire avancer le dossier :)

Bonne journée à vous.
 

Discussions similaires

Statistiques des forums

Discussions
312 231
Messages
2 086 450
Membres
103 214
dernier inscrit
MASSA1616