Petit probleme sur une fonction

zozo2026

XLDnaute Nouveau
Bonjour tout le monde.

j aurais une petite question que je n arrive pas a résoudre et je suis sur que je bute sur une connerie.

J ai une colonne A avec des résultats ( 300000) et dans ces résultats j'ai des doublons. je voudrais dans ma colonne b écrire une fonction qui dirait

SI tu vois un résultat unique appelle le real si tu vois un doublon alors écrit moi raw mais pas sur la première valeur

en gros disons que j ai la valeur 18585658 ecrite 20 fois la premiere sera real mais les 19 autres raw.

Merci d avance pour l aide
 

Victor21

XLDnaute Barbatruc
Re : Petit probleme sur une fonction

Bonjour, zozo2026 et bienvenue sur XLD.

C'est très clair (pour vous). Je n'ai malheureusement pas gardé le numéro du Réal :eek:
Nous, nous n'avons pas de colonne A avec des résultats.
Si vous aviez l'amabilité de nous prêter la vôtre, nous pourrions tenter de vos aider.
 

R@chid

XLDnaute Barbatruc
Re : Petit probleme sur une fonction

Bonjour et Bienvenue sur XLD,
Salut Patrick,
Si tes données commencent en A2, alors en B2,
Code:
=SI(NB.SI(A$2:A2;A2)=1;"Real";"Raw")
@ tirer vers le bas


@ + +

Edit : Salut Chris, j'ai pas rafraichi :)
 

zozo2026

XLDnaute Nouveau
Re : Petit probleme sur une fonction

Re bonsoir,

Je vois qu apparment excel a ses limites... lol

lorsque je fais le calcule et que je réalise le drop down je reçois un message d erreur me précisant que je n ai pas assez de mémoire et excel crash. cependant je ne vois pas d autres solutions pour pouvoir faire cette différentiation fastidieuse...

Please help :)
 

Staple1600

XLDnaute Barbatruc
Re : Petit probleme sur une fonction

Bonsoir à tous


Essaie la version VBA des propositions par formules précédemment soumises
Et redis-nous si cela rame moins avec les 300 000 lignes ;)
Code:
Sub a()
Dim Plg As Range, c As Range
Set Plg = Range(Cells(2, 1), Cells(Rows.Count, 1).End(3))
Application.ScreenUpdating = False
For Each c In Plg.Cells
    If (WorksheetFunction.CountIf(Range("A$2:A" & c.Row), c.Text) > 1) Then
        c.Offset(, 1) = "raw"
    Else
        c.Offset(, 1) = "real"
    End If
Next
End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Petit probleme sur une fonction

Bonsoir.

Pourquoi ne l'écririez vous pas d'une façon plus performante :
VB:
Sub A()
Dim Te(), Ts(), D As Dictionary, L As Long
Te = ActiveSheet.Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)).Value
ReDim Ts(1 To UBound(Te), 1 To 1)
Set D = New Dictionary
For L = 1 To UBound(Te)
   If D.Exists(Te(L, 1)) Then
      Ts(L, 1) = "raw"
   Else
      Ts(L, 1) = "real": D.Add Te(L, 1), 0: End If
   Next L
ActiveSheet.Cells(2, 2).Resize(UBound(Ts)).Value = Ts
End Sub
Important: Cochez la référence "Microsoft Scripting Runtime". On ne va quand même pas tout gâcher en lui faisant rechercher dynamiquement à chaque passage dans la boucle les méthodes Exists et Add d'un Object banalisé !
 

zozo2026

XLDnaute Nouveau
Re : Petit probleme sur une fonction

Bonjour,

Je vous remercie beaucoup pour toutes vos réponses.

je voudrais juste préciser que ce fichier est un fichier de base pour être utiliser par un autre fichier excel qui me donnera des stats precise sur des campagnes de pubs que je réalise sur internet. je vais utliser votre fonction pour voir si effectivement cela allege cette premiere partie de taf.

Concernant le pc portable que j utilise c est un i7 avec 4 giga de mémoire sous windows 8 (hélas) mais a la maison j ai aussi un pc avec un i7 et 18 gigas de ram ... donc je comprend vraiment pas pourquoi cela crach.

je ne sais hélas pas utiliser vba et aimerais bien commencer a apprendre si vous avez des tutos cela serait parfait. est ce qu'utiliser vba est mieux que d'utiliser les fonctions d excel ?

de mon coter une fois cette feuille de calcule calculée et incorporée dans mon fichier Excel "mère" elle me permet de générer 3 autres feuilles de calcules qui me donnaient a la fin du fin les mêmes résultats mais qui me permettaient de voir mes stats d une manière différente . ce que j ai fais c'est que j'en ai éliminé 2 sur trois pour alléger l Excel lui même. j ais aussi virer les champs inutile dans la feuille de calcule ALL (RAW/REAL) ce qui m a permis de passer de 33 méga a 14 méga...

Mais le soucis c est le temps de calcule , je met presque 5 minutes a calculer mes résultats...

Les calcules demandes dans le fichier "mère" une fois que j ai mes reals et mes raw est le suivant.

Je vais construire un tableau avec fonction ( donc pas un tableau généré par Excel ). et je vais aller chercher dans le fichier ALL (Real Raw) les stats de la manière suivantes.

Voici un petit screen de mes calcules finaux.
Snap 2014-05-08 at 13.27.54.jpg

Le sheet all est le sheet avec les real/raw une fois calculé

Le fichier stat est le fichier final de calcule

Les fonctions utilisées dans STAT sont :

  • =COUNTIF(All!$F:$F,$A2)
  • =COUNTIFS(All!$F:$F,$A2,All!$I:$I,"<>FR ")
  • =COUNTIFS(All!$F:$F,$A2,All!$C:$C,"<>real",All!$I:$I,"FR ")
  • =COUNTIFS(All!$F:$F,$A2,All!$C:$C,"real",All!$I:$I,"FR ")
  • =IF(G2+F2+E2=D2,"OK","NOT OK")


le premier countif me calcul simplement le total des pops si le media = le chiffre demande

Le deuxième countif je rajoute une condition ou je demande tous ce qui est différent du pays demande

Le troisième je rajoute encore une condition ou je demande tous ce qui est différent de real ( donc raw) et qui est FR

Le quatrième je demande tout ce qui est real est qui est FR ou le pays demande.

Le dernier calcule est un calcule de check pour verifier que mes stats sont exacts

donc en fait je me rend compte que je demande a Excel de parcourir ALL 370000 fois fois le nombre de calcule a procéder...

J ai changé la formule. j utilisais sumif ou sumifs et je suis passé comme vous pouvez le voir a countif/countifs en pensent que ça allait alléger le temps de calcule., je me suis lourdé...

Que pensez vous que je dois faire pour optimiser le temps de calcule de cette feuille Excel ?

Merci d avance pour vos réponses
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Petit probleme sur une fonction

Bonjour à tous

zozo2026
Avant tout chose, as-tu testé mon code VBA ou celui de Dranreb ?
Si non, voilà comment faire
•1) Lire ces tutoriels• 2) Donc ensuite, tu copies/colles nos macros dans un module (désormais tu sais ce que c'est ;))
puis tu exécutes la macro de ton choix (ce que tu viens aussi d'apprendre à faire ;) )
(voire les deux pour comparer)

Fais les tests et redis-nous ce qu'il en est.
 

Discussions similaires

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 871
dernier inscrit
Maïmanko