Action repetitive et complexe.... le rêve?

zorg92

XLDnaute Nouveau
Bonjour à tous,
Et merci de m'accueillir parmis vous.

Je viens solliciter votre aide, car sinon je risque de finir aveugle ou fou...

Je vous explique ma problématique :

je dois repéter une action complexe à l'infini (environ sur 400 000 lignes reparties dans plusieurs fichiers avec par feuilles 65 000 lignes).
l'action est la suivante : si la date(colonne B),l'unité(colonneC) le numéro de caisse(colonne F) et le numéro de ticket (colonne G) sont identiques, alors il faut supprimer la valeur de la colonne E , mais toutefois il faut au moins conserver cette valeur pour une des lignes :

exemple

Date Numero carte Unité valeur carte val ticket caisse ticket
11/03/2010 18002763077 83 19,00 € 36,94 € 16 147
11/03/2010 18002763078 83 8,73 € 36,94 € 16 147

11/03/2010 18002835261 83 19,00 € 391,82 € 17 166 0
11/03/2010 18002307422 83 16,74 € 391,82 € 17 166 0
11/03/2010 18002835260 83 19,00 € 391,82 € 17 166 0

Dans le 1er cas, je supprime une fois 36,94 mais dans le deuxiéme cas je supprime deux fois 391,82.

Voilà donc mon dilemme... aprés avoir mesuré le temps necessaire pour raliser cette opération en manuel, je me dis qu'il y a forcement une meilleure solution...

J'ai pensé à le faire sous access, mais je suis débutant, et je ne sais pas faire de programmation.. et pour excel, je ne vois pas comment aborder le probléme...

Merci encore de l'aide que vous voudrez bien m'apporter.

PS mon fichier exemple zip étant trop lourd, je cherche une solution... sorry

Bon week end à tous!!

Eric
 

Pièces jointes

  • Fichier test 2.zip
    30.3 KB · Affichages: 43
  • Fichier test 2.zip
    30.3 KB · Affichages: 41
  • Fichier test 2.zip
    30.3 KB · Affichages: 43
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re : Action repetitive et complexe.... le rêve?

re
Eh bien même pas ex aequo lol
Le résultat des deux méthode en passant par un Tableau plutôt que par les cellules de la feuille (même plage de données 65536 lignes)
Moi -----> 7,76953125
Pascal---> 6,86328125
Bonne journée
 

kiki29

XLDnaute Barbatruc
Re : Action repetitive et complexe.... le rêve?

Salut, une remarque il y a un décalage systématique d'une ligne dans la solution de Jean Marie par rapport aux autres solutions Collection/Dictionary
Cependant elle semble plus véloce
 

Staple1600

XLDnaute Barbatruc
Re : Action repetitive et complexe.... le rêve?

Bonjour à tous


Comme on n'est jamais trop prudent

zorg92:
Les numéros de carte dans ton fichier sont fictifs j'espère :rolleyes:
Les us et coutumes d'ici sont de joindre des fichiers contenant uniquement des données anonymes, bidons, fictives etc....

autre question:
En combien de temps tu remplis une feuille de 65536 cellules ?

(Car pourquoi attendre que ta feuille soit pleine avant de supprimer les doublons ? )
 
Dernière édition:

zorg92

XLDnaute Nouveau
Re : Action repetitive et complexe.... le rêve?

Bonjour à tous,

voici le bilan de mon test mais avant tout merci pour toutes vos solutions!

Voici le protocole que j'ai utilisé :

J'ai pris un fichier de 65 000 lignes. J'ai utilisé 3 methodes : methode PARITEC, CHTI et mDF Xldoublons :

La solution CHTI est beaucoup plus rapide que PARITEC (7,78 contre 28,09), mDF est qu'en a lui beaucoup plus long.
Mais, il y a un mais, la solution de CHTI n'a pas été aussi fiable en matiére de traitement des données que PARITEC.Certaines lignes n'ont pas été supprimé par la methode CHTI alors qu'elle aurait dû.
Le resultat de mDF est presque identique que PARITEC.

J'espére ne pas avoir "véxé" qui que ce soit :confused:

Merci encore mille fois de votre aide qui va me simplifier la vie!

Bon Dimanche à tous!

Eric
 

Paritec

XLDnaute Barbatruc
Re : Action repetitive et complexe.... le rêve?

Re Zorg 92 le forum
voilà la macro si tu veux tester sur tes fichiers et me dire
a+
Papou :)
Code:
Sub SansDoublons2()
    Dim MonDico As Object
    Dim MaLigne As Variant, t
    Dim i As Long, x As Long, a As Variant
    t = Timer
    With Feuil1
        i = .Range("A65536").End(xlUp).Row
        a = .Range("A2:G" & i)
    End With
    Set MonDico = CreateObject("Scripting.Dictionary")
    For x = 1 To UBound(a)
        MaLigne = a(x, 1) & "#" & a(x, 3) & "#" & a(x, 6) & "#" & a(x, 7)
        If Not MonDico.Exists(MaLigne) Then
            MonDico.Add MaLigne, MaLigne
        Else
            a(x, 5) = ""
        End If
    Next x
    With Feuil1
    .Range("A2:G" & i).ClearContents
    .Range("A2:G" & i) = a
    End With
    Cells(2, 10) = Timer - t
End Sub
 

zorg92

XLDnaute Nouveau
Re : Action repetitive et complexe.... le rêve?

Hej

d'ou pourrais venir ce delta ? j'aurai un PC professionnel à rames ?? :p

mais bon, je suis prés à attendre 30 secondes de plus quand je sais que vous venez de me faire gagner des heures de travail!

Eric
 

Staple1600

XLDnaute Barbatruc
Re : Action repetitive et complexe.... le rêve?

Re

zorg92
Je recapète ma question:

En combien de temps remplis-tu tes 65536 cellules ?

et j'en pose 4 autres
D'ou viennent tes données ?
d'un export de ta caisse enregistreuse ?
Si oui à quelle fréquence fais-tu cet export ?
journalière, hebdomadaire, mensuelle, annuelle ?
 
Dernière édition:

zorg92

XLDnaute Nouveau
Re : Action repetitive et complexe.... le rêve?

Salut Papou,

j'avais juste fait une modification sur ta macro, en ajoutant comme résultat aprés suppression 0 plutôt qu'un vide..

Cel.Offset(0, 4) = "" par Cel.Offset(0, 4) = "0"

donc dans ton exemple a(x, 5) = "", dois je plutôt ecrire a(x, 5) = "0"?


car aprés je vais importer le tableau dans une base access..

Eric
 

zorg92

XLDnaute Nouveau
Re : Action repetitive et complexe.... le rêve?

Re Staple,

En combien de temps remplis-tu tes 65536 cellules ?
cela correspond à un mois de données

et j'en pose 4 autres
D'ou viennent tes données ?
extraction par l'intermédiaire de mon service IT

d'un export de ta caisse enregistreuse ?
extraction du systéme d'encaissement

Si oui à quelle fréquence fais-tu cet export ?
journalière, hebdomadaire, mensuelle, annuelle ?
mensuelle

Eric
 

Paritec

XLDnaute Barbatruc
Re : Action repetitive et complexe.... le rêve?

re zorg le forum
Pour la modif si tu veux un 0
il faut écrire a(x, 5) = 0 autrement avec les "0" ce sera considéré comme une lettre
a+
papou :)

PS: Bonjour Staple tu as vu j'ai mis des With comme tu aimes !!!!!
 

Discussions similaires

Réponses
4
Affichages
959