Suppression de données

Bonjour Choufi, bonjour le forum,

choufi_51 a écrit :

j'en profite le temps que j'ai quelqu'un de compétant sous la main !

C'est plus du profit c'est de l'abus là !...

j'admets que ça fait beaucoup... !

Re,

je te le ferai t'inquiète, mais aujourd'hui j'ai pas le temps...

Bonjour Choufi, bonjour le forum,

En pièce jointe ton fichier avec les deux nouvelles macros nommées Doubl_Struc et Doubl_Mail. Une fois encore il faut que le nom des onglets corresponde avec celui dans le code. J'ai mis le numéro de ligne des doublons dans la colonne A mais on pourrait aussi le mettre dans la dernière colonne (la K).

Les codes :

Sub Doubl_Struc()
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set L = Worksheets("doublons structure") 'définit l'onglet L
Set B = Worksheets("base de donnée") 'définit l'onglet B
L.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données
DLB = B.Cells(Application.Columns.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLB de la colonne A de l'onglet B
DCB = B.Cells(1, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonne éditée DCB de la ligne 1 de l'onglet B
TVB = B.Range(B.Cells(1, 1), B.Cells(DLB, DCB)) 'définit le tableau des valeurs TVB de la liste base
For I = 1 To UBound(TVB, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs de la base TVB
    For J = 1 To UBound(TVB, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs de la base TVB
        If I <> J Then 'condition 1 : si I est défférent de J
            If TVB(I, 2) = TVB(J, 2) And TVB(I, 5) = TVB(J, 5) Then 'condition 2 : si les villes et les structures sont identiques
                If Application.WorksheetFunction.CountIf(L.Columns(1), "Ligne " & J) > 0 Then GoTo suite 'si "Ligne " & J existe déjà dans la colonne 1, va a l'étiquette "suite"
                Set DEST = L.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'de'finit la cellule de destination DEST
                DEST.Value = "Ligne " & I 'renvoie de numéro de ligne I
                DEST.Offset(0, 1).Resize(1, UBound(TVB, 2)).Value = Application.Index(TVB, I) 'renvoie la ligne I a partir de la colonne B
                DEST.Offset(1, 0).Value = "Ligne " & J 'renvoie de numéro de ligne J
                DEST.Offset(1, 1).Resize(1, UBound(TVB, 2)).Value = Application.Index(TVB, J) 'renvoie la ligne J a partir de la colonne B
            End If 'fin de la condition 2
        End If 'fin de la condition 1
suite: 'étiquette
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
L.Activate 'active l'onglet L
MsgBox "Les doublons de structure ont été identifiées !" 'message
End Sub

Sub Doubl_Mail()
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set L = Worksheets("doublons mail") 'définit l'onglet L
Set B = Worksheets("base de donnée") 'définit l'onglet B
L.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éventuelles anciennes données
DLB = B.Cells(Application.Columns.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLB de la colonne A de l'onglet B
DCB = B.Cells(1, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonne éditée DCB de la ligne 1 de l'onglet B
TVB = B.Range(B.Cells(1, 1), B.Cells(DLB, DCB)) 'définit le tableau des valeurs TVB de la liste base
For I = 1 To UBound(TVB, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs de la base TVB
    For J = 1 To UBound(TVB, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs de la base TVB
        If I <> J Then 'condition 1 : si I est défférent de J
            If TVB(I, 1) = TVB(J, 1) Then 'condition 2 : si les emails sont identiques
                If Application.WorksheetFunction.CountIf(L.Columns(1), "Ligne " & J) > 0 Then GoTo suite 'si "Ligne " & J existe déjà dans la colonne 1, va a l'étiquette "suite"
                Set DEST = L.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'de'finit la cellule de destination DEST
                DEST.Value = "Ligne " & I 'renvoie de numéro de ligne I
                DEST.Offset(0, 1).Resize(1, UBound(TVB, 2)).Value = Application.Index(TVB, I) 'renvoie la ligne I a partir de la colonne B
                DEST.Offset(1, 0).Value = "Ligne " & J 'renvoie de numéro de ligne J
                DEST.Offset(1, 1).Resize(1, UBound(TVB, 2)).Value = Application.Index(TVB, J) 'renvoie la ligne J a partir de la colonne B
            End If 'fin de la condition 2
        End If 'fin de la condition 1
suite: 'étiquette
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
L.Activate 'active l'onglet L
MsgBox "Les doublons de mail ont été identifiées !" 'message
End Sub

Le fichier :

8choufi-v01.xlsm (147.54 Ko)

Bonjour ThauThème, bonjour à tous,

c'est génial... merci infiniment !!!

j'ai déjà commencé à travailler sur ma base de donnée avec les premières macros, c'est incroyable le tri que je fais !!

je vais pouvoir finaliser tout ça avec ces 2 dernières macros, et mon fichier sera nickel

un IMMENSE MERCI à toi Thauthème ! C'est top ! Vraiment

Au plaisir ^^

et bonne journée !

C.

Bonsoir Thauthème, Bonsoir le forum,

Je suis en train de finaliser la mise à jour de ma base. Je tente d'utiliser les dernières macros, et il y a un bug. Je ne sais pas vraiment à quoi c'est dû. Quand il y a une petite quantité de donnée, ça fonctionne, mais quand je dépasse les 17000 lignes, ça ne fonctionne pas.

ma base en fait 180 000... Il ne me met que des ligne vides, avec les infos d'une seule colonne (source)

du coup je ne peux pas utiliser les dernières macros. Peux-tu y jeter un oeil ? Dis moi si tu as besoin de ma base, je te la passerai en MP...

bonne nuit

C.

Bonjour Choufi, bonjour le forum,

Oui je suis désolé mais il me faut le fichier pour tester et comprendre... Il me semble que la méthode qui utilise des variables tableau a des limites. En revanche elle est extrêmement plus rapide. Si on revient à une méthode traditionnelle l'exécution de la macro va être beaucoup plus longue...

Essaie de m'envoyer par mail perso et si ça marche pas (fichier trop lourd), utilise un serveur (weTransfer, cjoint.com ou autre) et envoie-moi le lien par mail perso...

Bonjour Thauthème, bonjour à tous,

Thauthème, peux-tu me donner ton mail en mp stp ?

C.

Re,

je sais pas ce qu'il se passe mais depuis quelques temps impossible d' envoyer un mail privé. Peut-être il est parti mais je n'ai pas le message comme quoi il est parti. D'où le doute.... Bon écoute voici mon mail quand tu l'as tu me réponds et j'éditerai le message pour le supprimer :

merci. je t'envoie ça de suite

Re,

Toujours rien reçu ! Est-ce normal ?

Re,

La base de données de ton premier fichier exemple avait pour structure :

| mail | ville | departement | type lieu | nom structure | région | code postal | pays | telephone 1 | telephone 2 |

des colonnes A à J. Mon code correspondait à cette structure.

Là, tu me propose un fichier où la base de données n'a absolument rien à voir !... Comment veux-tu que je m'y retrouve et que je te propose un code qui fonctionne !?...

Je comprends que ton fichier contienne des données confidentielles et que tu l'as bidouiller pour les supprimer. Mais moi, tes fichiers, j'en ai absolument rien à cirer. Je ne vais ni les divulguer ni les vendre. Je m'en sert juste pour t'aider et pour cela il faut qu'il correspondent à ceux que tu m'as déjà fournis. Alors, soit tu me fais confiance et tu me fournis le bon fichier, soit tu fait l'effort de le bidouiller de manière à ce qu'il ait la même structure que Choufi_v01.xlms...

Hello ThauThème,

euh... En effet j'ai ajouté après coup des données dans les colonnes d'après, mais je n'ai pas touché aux premières colonnes. Ce sont des données auquel que n'avais pas pensé au début, mais qui me sont utiles. C'est juste qu'en triant mes bases avec tes outils, je me suis rendu compte que j'avais oublé ces infos... Je ne pensais pas qu'en ajoutant des colonne après, ça pouvait jouer sur ton travail. Si c'est le cas j'en suis désolée. Ma trame est :

mail | ville | departement | type lieu | nom structure | région [ code postal | pays | telephone 1 | telephone 2 | adresse | SOURCE | civilité | nom | prénom | fonction | ESTHETIQUE |

le fichier que je t'ai envoyé, c'est le même que le premier fichier que je t'avais donné tout au début de ton travail, et sur lequel tu as travaillé pour faire les 3 premières macros. C'est sur ce fichier que je travail depuis le début. Le fichier choufi doit être le fichier mon fichier que tu as renommé, mais ça doit être la même chose.

Je ne sais pas quoi te dire...

Je te renvoie le fichier de ce matin, avec en première ligne le nom des colonnes, pour que tu te repères...

Si ça ne va pas, dis le moi. Si tu veux que je rebascule tout sur le fichier choufi, dis le moi aussi... Comme je te le disais, je ne suis pas une experte d'excel, je ne sais même pas si les 3 première macro peuvent fonctionner sur le fichier choufi, c'est pour dire !

bref, redis moi.. et moi je te revoie un wetransfer avec le fichier de ce matin, avec la premiere ligne modifié comme expliqué ci-dessus, pour que tu te repères.

Encore désolée...

C.

Bonjour Choufi,

Je suis désolé mais je n'y arrive pas. Ta base de données dépasse les limites acceptables par les variables tableau et après de nombreux essais infructueux je dois m'avouer vaincu sur ce coup-là.. Je n'avais jamais travailler Avec une base aussi grande...

Bonjour Thauthème, Bonjour à tous,

merci pour ton retour ThauThème, et merci de m'avoir consacré de ton temps !

Ce n'est pas grave pour les dernières macros, je survivrais sans C'est déjà énorme que tu aies pu m'aider avec les 3 premières.

Encore un grand merci à toi. Et encore désolée pour le quiproquo.

Au plaisir.

C.

Rechercher des sujets similaires à "suppression donnees"