Un autre problème de traitement dans un gros fichier

siocnarf

XLDnaute Occasionnel
Bonsoir,

Je tente de filtrer un gros fichier de ses éléments redondant.

Mon problème est que si à la ligne 1, mon équation se lit ainsi: =SI(SOMMEPROD(($B$1:$B1=$B2)*($G$1:$G1=$G2)*($B2<>"")*($C2=""))=0;"Unique";1)

À la ligne 314, celle-ci se lira ainsi:
=SI(SOMMEPROD(($B$1:$B313=$B314)*($G$1:$G313=$G314)*($B314<>"")*($C314=""))=0;"Unique";1)

Et je vous laisse imaginer lorsque j'arrive à la ligne 40 000.

Ce que je tente de faire:
1. En colonne B se trouve une liste de logiciel
2. En colonne C les versions
3. En colonne G, les nos d'ordinateurs

Pour chaque ordinateur, je dois vérifier si un même logiciel se répète, s'il y a répétition, je dois vérifier si la cellule version est vide. Normalement L'une des inscription a une valeur et l'autre pas. Puis je dois supprimer la ligne contenant l'inscription en double qui aura le no de version vide.

Je croyais que SommeProd serait la solution et cela fonctionne. Toutefois, cela devient tellement lourd que ma solution devient inutilisable.

Comment je pourrais régler ce problème?

Merci chaleureusement pour ceux qui souhaiterait me ramener dans le droit chemin.

François


J'ai mis un fichier en annexe.
 

Pièces jointes

  • test.xlsx
    21.6 KB · Affichages: 38
  • test.xlsx
    21.6 KB · Affichages: 48
  • test.xlsx
    21.6 KB · Affichages: 42

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Un autre problème de traitement dans un gros fichier

Bonjour siocnarf,

Si j'ai bien compris , un essai dans le fichier joint.
.

  • on sélectionne tout le tableau (A2:G314)
  • on trie le tableau selon les critères RSN , DN, ARPV (dans cette ordre)
  • on place la formule =SI(ET(B2=B1;OU(C2="";C2=C1);G2=G1);N(H1)+1;"") dans la cellule H2
  • on tire la formule jusqu'au bas du tableau
 

Pièces jointes

  • siocnarf-test v1.xlsx
    19.1 KB · Affichages: 51
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Un autre problème de traitement dans un gros fichier

Bonjour siocnarf,

Avec la même interprétation que dans le post précédent mais en VBA;

  • cliquer sur le bouton "Peupler..." pour remplir le tableau (40 000 lignes environ)
  • cliquer sur le bouton "Supprimer..." pour ôter les doublon
Le code est dans le module de "Feuil1" (v2a -> toute petite modif. sur l'effacement final - ne change pas le résultat de la v2)
 

Pièces jointes

  • siocnarf-test v2a.xlsm
    32.1 KB · Affichages: 46
Dernière édition:

siocnarf

XLDnaute Occasionnel
Re : Un autre problème de traitement dans un gros fichier

Bonjour,

Votre interprétation est lumineuse! Bien meilleure que la mienne. Je croyais qu'il n'y avait pas de doublon avec un no de version mais votre code a démontré le contraire.

Je vais le tester plus approfondie. S'il y a des incompréhensions, je vais les publier ici.

Merci,

François
 

siocnarf

XLDnaute Occasionnel
Re : Un autre problème de traitement dans un gros fichier

Bonjour,

J'ai mis certaines lignes en gras car je me demande comment rendre dynamique en utilisant des variables plutôt que de hardcoder les colonnes. Dans la seconde ligne, vous inscrivez "Application.CutCopyMode = False". À quoi cela sert-il?

Sub SupprDoublons()
Dim tablo, xNA As Range
Application.ScreenUpdating = False
Set tablo = [b1].CurrentRegion
Columns(tablo.Column + 1).Insert
tablo.Select
tablo.Sort key1:=[h1], order1:=xlAscending, key2:=[c1], order2:=xlAscending, key3:=[d1], order3:=xlAscending, Header:=xlYes
tablo.Columns(2).Offset(1).FormulaR1C1 = _
"=IF(AND(RC[6]=R[-1]C[6],RC[1]=R[-1]C[1],OR(RC[2]=R[-1]C[2],RC[2]="""")),NA())"
tablo.Columns(2).Value = tablo.Columns(2).Value
tablo.Sort key1:=[b1], order1:=xlAscending, Header:=xlYes
On Error Resume Next
Set xNA = tablo.Columns(2).SpecialCells(xlCellTypeConstants, 16)
On Error GoTo 0
If Not xNA Is Nothing Then
tablo.Rows(xNA.Row & ":" & tablo.Row + tablo.Rows.Count).Clear
End If
tablo.Columns(2).Delete
Application.CutCopyMode = False
Columns("A:G").EntireColumn.AutoFit
Application.Goto [a1], True
Application.ScreenUpdating = True
End Sub
 

JCGL

XLDnaute Barbatruc
Re : Un autre problème de traitement dans un gros fichier

Bonjour à tous,

On utilise souvent les entêtes de colonnes pour paramétrer les tris...

Application.CutCopyMode = False sert à vider le presse papier XL.

A+ à tous
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla