Comparer les données de 2 fichiers et supprimer les lignes d

Comparer les données de 2 fichiers et supprimer les lignes des données communes

Bonjour

Je vais essayer d’être claire:

J’ai 2 fichiers chacun avec des données.: Le fichier 1 contient des données à la colonne A et le fichier 2 contient des données à la colonne A. J’aimerais comparer les données de ces 2 fichiers. C’est-à-dire: Si une même donnée se trouve dans le fichier 1 et dans la fichier 2 alors la ligne du fichier 1 contenant la donnée doit être supprimée.

Pour résumer: je souhaiterais supprimer toutes les lignes dans le fichier 1, contenant les données du fichier 2.

Merci de votre aide !

Bonjour Anouchka, bonjour le forum,

Pourrais-tu nous préciser les noms des fichiers, les noms des onglets...

Merci

En fait sur le fichier 1 contient la liste de tous les utilisateurs inscrits sur le site. Et le fichier 2 contient la liste des utilisateurs ayant seulement déjà activé leur compte. J'aimerais supprimer du fichier 1 tous les utilisateurs du fichiers 2 pour pouvoir juste avoir que la liste des utilisateurs n'ayant pas activé leur compte.

Nom de fichiers :

Fichier 1 = Feuil1

Fichier 2 = Feuil2

Le fichier 1 contient les colonnes "username" et "email"

Le fichier 2 contient juste la colonne "username".

Merci

Bonjour Anouchka, bonjour le forum,

Essaie comme ça :

Sub Macro1()
Dim F1 As Workbook 'déclare la variable F1 (Fichier 1)
Dim O1 As Object 'déclare la variable O1 (Onglet 1)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim F2 As Workbook 'déclare la variable F2 (Fichier 2)
Dim O2 As Object 'déclare la variable O2 (Onglet 2)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim I As Integer 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)

Set F1 = ThisWorkbook 'définit le fichier F1
Set O1 = F1.Sheets("Feuil1") 'définit l'onglet O1
CH = F1.Path & "\" 'définit le chemin d'accès CH
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set F2 = Workbooks("Fichier 2.xlsx") 'définit le fichier F2 (génère une erreur ci ce fichier n'est pas ouvert) [à adapter]
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'efface l'erreur
    Workbooks.Open (CH & "Fichier 2.xlsx") 'ouvre le fichier "Fichier 2.xlsx" [à adapter]
    Set F2 = ActiveWorkbook 'définit le fichier F2
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set O2 = F2.Sheets("Feuil2") 'définit l'onglet O2
DL = O1.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O1
TC = O1.Range("A1:A" & DL) 'définit le tableau TC
For I = UBound(TC, 1) To 1 'boucle inversée sur toutes les lignes du tabelau TC (de la dernière à la première)
    Set R = O2.Columns(1).Find(TC(I, 1), xlValue, xlWhole) 'définit la recherche R (recherche la valeur exacte de TC(I,1) dans la colonne A de l'onglet O2)
    If Not R Is Nothing Then O1.Rows(I).Delete 'si il existe au moins une occurrence trouvée, supprime la ligne I
Next I 'prochaine ligne de la boucle
End Sub

Merci Thauthème. Pour faire simple, je peux copier le contenu du fichier 2 dans la Feuil2 du fichier 1. Comment reviendrai votre code ?

Bonjour Anouchka, bonjour le forum,

Arf ! t'aurais pu y penser avant... Le code modifié :

Sub Macro1()
Dim O1 As Object 'déclare la variable O1 (Onglet 1)
Dim O2 As Object 'déclare la variable O2 (Onglet 2)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim I As Integer 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)

Set O1 = Sheets("Feuil1") 'définit l'onglet O1
Set O2 = Sheets("Feuil2") 'définit l'onglet O2
Set O2 = F2.Sheets("Feuil2") 'définit l'onglet O2
DL = O1.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O1
TC = O1.Range("A1:A" & DL) 'définit le tableau TC
For I = UBound(TC, 1) To 1 'boucle inversée sur toutes les lignes du tabelau TC (de la dernière à la première)
   Set R = O2.Columns(1).Find(TC(I, 1), xlValue, xlWhole) 'définit la recherche R (recherche la valeur exacte de TC(I,1) dans la colonne A de l'onglet O2)
   If Not R Is Nothing Then O1.Rows(I).Delete 'si il existe au moins une occurrence trouvée, supprime la ligne I
Next I 'prochaine ligne de la boucle
End Sub

Svp avez-vous eu le temps de revoir la macro ? Merci

Bonjour Anouchka, bonjour le forum,

Ben oui je t'ai donné la macro modifiée juste avant ton dernier post...

Ah oui j'avais pas fait attention, je croyais que c'était la première macro. J'essai ce code et je vous tiens au courant. Merci encore

J'ai essayé votre macro mais elle ne fonctionne pas. Il n'y a rien qui signale une erreur. Aucune ligne n'est supprimé dans la Feuil1.

Bonjour Anouchka, bonjour le forum,

Pourrais-tu faire l'effort d'envoyer un fichier exemple ?...

Fichier exemple en pièce jointe. Merci

42export.zip (7.46 Ko)

Bonjour Anouchka, bonjour le forum,

le code était truffé d'erreurs, désolé, mais grâce à ton exemple j'ai pu tester et corriger. Le voici :

Sub Macro1()
Dim O1 As Object 'déclare la variable O1 (Onglet 1)
Dim O2 As Object 'déclare la variable O2 (Onglet 2)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
Dim I As Integer 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)

Set O1 = Sheets("Feuil1") 'définit l'onglet O1
Set O2 = Sheets("Feuil2") 'définit l'onglet O2
DL = O1.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet O1
TC = O1.Range("A1:A" & DL) 'définit le tableau TC
For I = UBound(TC, 1) To 2 Step -1 'boucle inversée sur toutes les lignes du tabelau TC (de la dernière à la première)
  Set R = O2.Columns(1).Find(TC(I, 1), , xlValues, xlWhole) 'définit la recherche R (recherche la valeur exacte de TC(I,1) dans la colonne A de l'onglet O2)
  If Not R Is Nothing Then O1.Rows(I).Delete 'si il existe au moins une occurrence trouvée, supprime la ligne I
Next I 'prochaine ligne de la boucle
End Sub

Attention dans ton exempel tu as "riri" et "riri " (avec un espace) c'est pour cela qu'il n'est pas effacée !

Bonjour Thautheme

Je vous remercie infiniment; oui votre code a pu supprimer les les lignes. Merci

A bientôt !

Rechercher des sujets similaires à "comparer donnees fichiers supprimer lignes"