Copier-coler des lignes sans doublons sur 2 critères

Maddad

XLDnaute Nouveau
Bonjour à tous,


Je cherche à copier des lignes sélectionnées sur deux critéres d'une feuille "A" vers une feuille "B", voici la macro:


Code:
Sub essai()

Dim fin&, fin1&

Application.ScreenUpdating = False
   
        fin = Worksheets("Compil_validations").Range("A" & Rows.Count).End(xlUp).Row
        fin1 = Worksheets("Pertes").Range("A" & Rows.Count).End(xlUp).Row
   
        For i = 2 To fin
            For a = 4 To fin1
                If Worksheets("Compil_validations").Cells(i, 1) = Worksheets("Pertes").Cells(a, 1) And   Worksheets("Compil_validations").Cells(i, 73).Value <> Worksheets("Pertes").Cells(a, 73).Value Then
                  
                  Worksheets("Compil_validations").Select
                        Range("A" & i, "BV" & i).Select
                    Selection.Copy
                Sheets("Pertes").Select
                Range("A" & Range("A65536").End(xlUp).Row + 1).Select
                ActiveCell.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    
                  Else: GoTo 1
                End If
                GoTo 2
1            Next a
2          Next i


Sheets("Pertes").Select

Range("A3:BW" & Range("A65536").End(xlUp).Row).Select


Selection.Sort Key1:=Range("A3"), order1:=xlAscending, Header:=xlYes, MatchCase:=False, Orientation:=xlTopToBottom

Range("A4:BU" & Range("A65536").End(xlUp).Row).Select

Selection.RowHeight = 65

End Sub


Mais malheureusement des doublons persistent et je n'arrive pas à trouver de solution

je n'arrive pas à mettre le fichier excel en pièce jointe car trop volumineux même après avoir supprimer des données (je ne sais pas pourquoi) , merci pour votre aide
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Copier-coler des lignes sans doublons sur 2 critères

Bonsoir Maddad,

personnellement je ne peux pas t'aider, mais je peu te conseiller ceci.

Crée un nouveau classeur avec quelques données; dans le code remplace ces lignes:

Code:
                  Worksheets("Compil_validations").Select
                        Range("A" & i, "BV" & i).Select
                    Selection.Copy
                Sheets("Pertes").Select
                Range("A" & Range("A65536").End(xlUp).Row + 1).Select
                ActiveCell.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Comme ceci :

Code:
Worksheets("Compil_validations").Range("A" & i, "BV" & i).Copy Sheets("Pertes"). Range("A2").

With Sheets("Pertes")
.Range("A3:BW" & Range("A65536").End(xlUp).Row).Select
Selection.Sort Key1:=Range("A3"), order1:=xlAscending, Header:=xlYes, MatchCase:=False, Orientation:=xlTopToBottom

.Range("A4:BU" & Range("A65536").End(xlUp).Row).RowHeight = 65
End with

En bas de page regarde dans "Discussions similaires", concernant les doublons.


Bonne continuation. :cool:
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Copier-coler des lignes sans doublons sur 2 critères

Bonsoir Maddad,

Difficile d'être catégorique sans exemple concret à se mettre sous le clavier.

Mais je crois relever un problème d'aiguillage au niveau des deux boucles. Je te propose de tester avec le code suivant (sans Goto dont l'usage est à éviter autant que possible) :

Code:
For i = 2 To fin
  For a = 4 To fin1
    If Worksheets("Compil_validations").Cells(i, 1) = Worksheets("Pertes").Cells(a, 1) And _
    Worksheets("Compil_validations").Cells(i, 73).Value <> Worksheets("Pertes").Cells(a, 73).Value Then
      Worksheets("Compil_validations").Range("A" & i, "BV" & i).Copy
      Sheets("Pertes").Range("A" & Range("A65536").End(xlUp).Row + 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
      Exit For
    End If
  Next a
Next i
Le reste du code est inchangé.

Si ça ne fonctionne pas, tu peux peut-être recréer un fichier exemple simplifié, avec quelques lignes de données et le joindre à ce fil ?

J'en ai profité pour simplifier le code de copier-coller des cellules en supprimant des sélections inutiles, ce qui devrait améliorer la rapidité d'exécution.

Cordialement.

Edit : bonsoir Lone-wolf
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Copier-coler des lignes sans doublons sur 2 critères

Bonsoir Papou-net :D


Une petite modification du code de Papou-net, pour ne pas voir la sélection:


Code:
For i = 2 To fin
  For a = 4 To fin1
    If Worksheets("Compil_validations").Cells(i, 1) = Worksheets("Pertes").Cells(a, 1) And _
     Worksheets("Compil_validations").Cells(i, 73).Value <> Worksheets("Pertes").Cells(a, 73).Value Then
      Set sh1 = Worksheets("Compil_validations").Range("A" & i, "BV" & i)
      Set sh2  = Sheets("Pertes").Range("A" & Range("A65536").End(xlUp).Row + 1)
         sh1.copy sh2
      Exit For
    End If
     sh2.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
  Next a
Next i


A+ :cool:
 
Dernière édition:

Maddad

XLDnaute Nouveau
Re : Copier-coler des lignes sans doublons sur 2 critères

Bonjour, merci pour votre retour, malheureusement ça ne fonctionne pas, j'ai de ce fait joint le fichier excel simplifié, le but consiste à copier les lignes de la feuille "Compil_validations" vers le feuille "Pertes" en ne prenant en compte uniquement que celles ayant le même 'N d’événement' mais une 'catégorie de validation différente'.
Si vous déclencher la macro vous verrez par exemple que pour les lignes 36 et 37 de la feuille "Pertes" on a le même N d’événement (C'est OK) mais également la même catégorie de validation (Validation 3), ce qui ne me convient pas .

Voila et merci d'avance pour vos suggestions
 

Pièces jointes

  • essai.xlsm
    367.2 KB · Affichages: 71
  • essai.xlsm
    367.2 KB · Affichages: 73
  • essai.xlsm
    367.2 KB · Affichages: 79

vgendron

XLDnaute Barbatruc
Re : Copier-coler des lignes sans doublons sur 2 critères

Bonjour,
si j'ai bien compris..
tu veux copier une ligne de compil validations vers pertes, si la ligne n'existe pas déjà..

il y a un souci dans tes deux boucles:
for i = 2 to fin: tu scrutes toutes les lignes une par une: ok
for a=4 to fin1: tu vas voir dans Pertes si la ligne n'existe pas déjà: la ca se gate:
dès que la seconde boucle a trouvé le N° évènement avec un numéro de valid différent, tu copies colles.. SAUF que.. la boucle n'est pas encore allée voir si cette "nouvelle ligne" existe après..
et comme tu iras voir seulement au coup d'après..ce sera trop tard.. tu auras deux fois la meme ligne...
bref... il te manque une boucle...
 

Papou-net

XLDnaute Barbatruc
Re : Copier-coler des lignes sans doublons sur 2 critères

Bonjour Maddad, le Forum,

Voici une solution avec une seule boucle :

Code:
Sub essai()
Dim CelEvent As Range, Existe As Boolean
Dim Fin As Long, Lg As Long
Dim nEvent, nValid

Application.ScreenUpdating = False
With Feuil1
  Fin = .Range("A" & Rows.Count).End(xlUp).Row
  For i = 2 To Fin
    nEvent = .Cells(i, 1)
    nValid = .Cells(i, 2)
    ' Recherche du N° événement sur la feuille Pertes
    Set CelEvent = Feuil2.Range("A:A").Find(nEvent, LookIn:=xlValues, lookat:=xlWhole)
    ' Si N° trouvé alors Existe = True
    If Not CelEvent Is Nothing Then Existe = True
    ' N° première ligne vide sur feuille Pertes
    Lg = Feuil2.Range("A" & Rows.Count).End(xlUp).Row + 1
    ' Si Existe=vrai alors si nValid <> cellule B de feuille Lg = N° trouvé
    If Existe = True Then
      If nValid <> Feuil2.Cells(CelEvent.Row, 2) Then Lg = CelEvent.Row
    End If
    ' Copie de la ligne sur feuille Pertes
    .Range("A" & i, "BV" & i).Copy
    Feuil2.Range("A" & Lg).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    ' Remet Existe à Faux pour lecture prochaine cellule
    Existe = False
  Next i
End With
' Tri des données
Sheets("Pertes").Select
Range("A3:BW" & Range("A65536").End(xlUp).Row).Select
Selection.Sort Key1:=Range("A3"), order1:=xlAscending, Header:=xlYes, MatchCase:=False, Orientation:=xlTopToBottom
Range("A1").Select
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Cordialement.
 

Pièces jointes

  • Copie de essai Maddad.xlsm
    364.4 KB · Affichages: 66

Maddad

XLDnaute Nouveau
Re : Copier-coler des lignes sans doublons sur 2 critères

Bonjour à tous,

vgendron, ta solution semble fonctionner parfaitement, et ton explication m'a fait comprendre mon erreur, merci
Papou-net, merci pour ton retour, j'ai essayé ta macro mais des doublons persistent, d'ailleurs j'ai appliqué les deux macro (la tienne et celle de vgendron) et les résultats sont différents, je ne sais si l'erreur viens de moi.....

Bonne soirée
 

Papou-net

XLDnaute Barbatruc
Re : Copier-coler des lignes sans doublons sur 2 critères

Bonjour à tous,

vgendron, ta solution semble fonctionner parfaitement, et ton explication m'a fait comprendre mon erreur, merci
Papou-net, merci pour ton retour, j'ai essayé ta macro mais des doublons persistent, d'ailleurs j'ai appliqué les deux macro (la tienne et celle de vgendron) et les résultats sont différents, je ne sais si l'erreur viens de moi.....

Bonne soirée

Bonjour maddad, vgendron,, le Forum,

N'est ce pas plutôt l'inverse ?

Dans mon exemple (Copie 01 de essai Maddad.xlsm ci-joint, avec le résultat de la macro en feuille Pertes), la dernière ligne est la n° 212 et je n'y relève aucun doublon. Sur le fichier essai.xlsm, la dernière ligne est la n° 247 et les doublons persistent.

Ou alors, je n'ai rien compris, ce qui peut aussi être possible.

Merci de préciser.

Cordialement.
 

Pièces jointes

  • Copie 01 de essai Maddad.xlsm
    370 KB · Affichages: 70

Papou-net

XLDnaute Barbatruc
Re : Copier-coler des lignes sans doublons sur 2 critères

salut papou Net
s'il y a des doublons dans nos 2 solutions. c'est que je n'ai pas compris non plus alors..;-)

RE :

Ce n'est pas très grave puisque notre ami Maddad semble avoir trouvé sa solution, mais le sujet m'intrigue et j'aimerais bien comprendre ces différences.

Sur mon fichier, je ne vois pas de doublons, sur le tien je les ai surlignées en jaune (voir les copies d'écran ci-jointes).

Ces copies d'écran sont faites après l'exécution de la macro.

Curieux, n'est-il pas ?

Cordialement.
 

Pièces jointes

  • essai-2.xlsm.jpg
    essai-2.xlsm.jpg
    46.9 KB · Affichages: 87
  • Copie  01 de essai Maddad.xlsm.jpg
    Copie 01 de essai Maddad.xlsm.jpg
    44.4 KB · Affichages: 84

vgendron

XLDnaute Barbatruc
Re : Copier-coler des lignes sans doublons sur 2 critères

ah oui.. mais non..: on a pas compris la meme chose
pour une meme valeur en colonne A (90059), si tu as deux valeurs différentes en colonne B (Validation 3 Et validation 6), ce ne sont pas des doublons..
par contre. j'avais pas vu, mais toi du coup, tu supprimes une des deux valeurs.. 90059 validation 3..
Du coup...j'ai eu un gros doute. et je suis allé vérifier....
dans le fichier d'origine posté par maddad....il n'y a pas de doublon à supprimer....
ha ha ha...

et donc.. j'ai modifié la liste d'origine en y mettant des doublons.. et ho surprise: ma macro ne fonctionne pas..! ;-)
CQFD
et oups. la tienne non plus...??
je crois que je vais aller me coucher..;-)
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Copier-coler des lignes sans doublons sur 2 critères

bon. j'aime pas ne pas trouver..
donc. ci joint un qui fonctionne...
par contre. papou net, j'ai vu que ta macro était plus rapide. (ou du moins. y a pas tous les affichages successifs)
j'ai pas encore bien regardé ce que tu as fait pour ca.. mais. c'est un point que je vais devoir m'approprier..
pour info. dans ma macro. manquait "juste" le fin1=fin1+1...
 

Pièces jointes

  • essai.xlsm
    368 KB · Affichages: 80
  • essai.xlsm
    368 KB · Affichages: 67
  • essai.xlsm
    368 KB · Affichages: 63

Maddad

XLDnaute Nouveau
Re : Copier-coler des lignes sans doublons sur 2 critères

RE :

Ce n'est pas très grave puisque notre ami Maddad semble avoir trouvé sa solution, mais le sujet m'intrigue et j'aimerais bien comprendre ces différences.

Sur mon fichier, je ne vois pas de doublons, sur le tien je les ai surlignées en jaune (voir les copies d'écran ci-jointes).

Ces copies d'écran sont faites après l'exécution de la macro.

Curieux, n'est-il pas ?

Cordialement.

Bonjour, en fait ce ne sont pas des doublons, car le but c'était d'ajouter à la liste perte les lignes possédant le même N d’événement mais une catégorie de validation différente., je me suis peut-être fait mal comprendre ...
 

Discussions similaires

Statistiques des forums

Discussions
312 107
Messages
2 085 356
Membres
102 874
dernier inscrit
Petro2611