XL 2019 Suppressions de lignes sous condition

cyril01250

XLDnaute Nouveau
Bonjour,
je souhaite supprimer des lignes si la colonne A et B contiennent la même valeur numérique dans un tableau qui contient un nombre variable de lignes.
En cherchant, des macros existent avec une seule condition ou plusieurs conditions dans une même colonne.
En vous remerciant pour l'aide apportée.
Cordialement
Cyril
 

soan

XLDnaute Barbatruc
Inactif
@sylvanu

merci beaucoup pour ton lien ! il est parfait, et répond exactement à ce que
j'avais envie de savoir sur la différence de quantité de RAM ! 😊 👍👍👍

(vu les nombreuses causes possibles, j'suis heureux qu'ce soit seulement 0,05 Go en moins,
et pas plus de RAM en moins ! 😜)


soan
 

Staple1600

XLDnaute Barbatruc
Re

Troisième test
01_Test3_Sylvanu.jpg
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
le temps affiché pour 5 lignes -> 8 secondes
Il s'agit je pense d'une interruption Windows qui avait quelque chose d'urgent faire.
Le Timer étant temps réel et XL absolument pas. Son exécution est tributaire du bon vouloir de Windows;
Dans le graphique ci dessous, je me borne à écrire 1000 fois dans une cellule, toujours la même chose.
La répétition est toujours la même mais le contexte Windows différent ( Analyse Norton ou SystemCare, download d'un gros fichier .... ) et on voit que les temps varient déjà de 305 à 758ms, soit déjà un rapport 2.5.
Je pense qu'il arrive à Windows de "freezer" en cas de pépin, ou d'urgence à traiter.
N'oublions pas que c'est lui le patron.
1608415702958.png
 

Staple1600

XLDnaute Barbatruc
Re

J'en ai révé, mapomme l'a fait ;)
Merci

Pendant que j'y suis
Tu me peux dire le comme du Pourquoi dans Pourkoi, stp? ;)
VB:
Sub Pourkoi()
Application.ScreenUpdating = False
With Range("C2:C" & Cells(Rows.Count, 1).End(3).Row)
    .FormulaR1C1 = "=IF(RC[-2]=RC[-1],""doublons"",ROW())"
    .Value = .Value
End With
[C1] = "TEST"
[A1].CurrentRegion.RemoveDuplicates Columns:=3, Header:=xlYes
End Sub
 

R@chid

XLDnaute Barbatruc
Re,
=>R@chid
Oui mais on lit partout qu'il vaut mieux installer en 32 bits
(pour éviter les problèmes VBA... PtrSafe et cie, et la perte de certains contrôles comme les ListView etc...)
Moi également j'étais sous Windows 7 x64 et Office 2016 x32 depuis 06/2017 jusqu'au 12/2019, après je suis passé à Windows 10 x64 et Office 2019 x64, ce changement je l'ai fait après avoir lu quelque chose à propos des deux versions.
Quelle version choisir 32 bits ou 64 bits ?


=>R@chid
Je ne remets nullement en cause ton choix. ;)
(car je sais que tu es plus orienté formules que VBA)
Moi et le VBA on fait 17 à la puissance 15 :) :)

Tu veux dire que moi qui suit en 32 bits, mon Excel n'accède qu'à 4Go sur mes 8Go?
Malgré cette mise à jour ?
Alors là après cette mise à jour, je ne sais pas ça devrait corriger les problèmes de gestion des ressources, mais je pense que ça va permettre de profiter de les capacités.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Merci pour les retours des moults intervenants à mes moult questions.
;)

=>mapomme
Oui, pourquoi la 1ere ligne des doublons est préservée?
C'est que j'essaie de comprendre.
Et même après une nuit de sommeil, et un café bu en Option Explicit, je ne comprends pas encore le pourquoi du comment.
 

Staple1600

XLDnaute Barbatruc
Re

Quels sont les résultats sur vos véloces machines? ;)
VB:
Sub Supprimer_Lignes_avec_TCD()
Dim pvt As PivotTable, pvtCache As PivotCache, sTableau$
Dim T0
T0 = Timer
Application.ScreenUpdating = False
    With Range("C2:C" & Cells(Rows.Count, 1).End(3).Row)
    .FormulaR1C1 = "=IF(AND(COUNTA(RC[-2]:RC[-1])=2,RC[-2]=RC[-1]),""doublons""&ROW(),ROW())"
    .Value = .Value
    End With
    [C1] = "UNIQUES"
sTableau = [A1].Parent.Name & "!" & [A1].CurrentRegion.Address(ReferenceStyle:=xlR1C1)
Sheets.Add
ActiveSheet.Name = "tmp"
Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sTableau)
Set pvt = pvtCache.CreatePivotTable(TableDestination:="tmp!R3C1", TableName:="TCD1")
With pvt.PivotFields("UNIQUES")
.Orientation = xlRowField
.Position = 1
End With
pvt.AddDataField pvt.PivotFields("COLA"), "Somme de COLA", xlSum
pvt.AddDataField pvt.PivotFields("COLB"), "Somme de COLB", xlSum
pvt.PivotFields("UNIQUES").PivotFilters.Add2 Type:=xlCaptionDoesNotContain, Value1:="doublons"
Columns("A:C").Copy: Columns("A:C").PasteSpecial -4163: Application.CutCopyMode = False
Columns(1).Delete: Rows("1:4").EntireRow.Delete
Debug.Print " Temps de traitement : " & Round(1000 * (Timer - T0)) & "ms."
End Sub
100 => Temps de traitement : 150ms.
500 => Temps de traitement : 162ms.
1 000 => Temps de traitement : 268ms.
5 000 lignes => Temps de traitement : 891ms.
10 000 lignes => Temps de traitement : 17922ms. ?!? WTF!
20 000 lignes => Temps de traitement : 3449ms.

EDITION: Je viens de refaire le test avec 10 000 lignes
Temps de traitement : 1648ms.

Va comprendre, Charles !
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
337