Ne pas compté les doublons sauf 0

Résolu/Fermé
Erakmur - 22 août 2017 à 14:56
 Erakmur - 23 août 2017 à 13:45
Bonjour,

http://www.cjoint.com/c/GHwm2l7P0gL

Bonjour,
Je bloque sur une formule Excel. Dans le fichier joint, dans la cellule G9 de l’onglet EST, il y a une formule SOMMEPROD. Je souhaiterai que quand dans la colonne A de l’onglet Formule DI il y a un doublons de numéro (hors 0), qu’un seul numéro soit compté.
Exemple : Si le numéro 302 489 apparait plusieurs fois, seul 1 seul est comptabilisé, peu importe lequel.
En revanche, tous les numéros 0 sont comptés.
Quelqu’un a-t-il une solution ?
Cordialement
A voir également:

7 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
Modifié le 22 août 2017 à 16:28
Bon,jour

Mon PC ne me donne pas l'accès à cjoint .
A défaut de voir votre modèle, voyez si vous pouvez tirer quelque chose de cet exemple, et si problème déposez votre fichier sur le site où vous avez trouvé le mien
à vous lire
https://mon-partage.fr/f/1cjpLk8x/
crdlmnt


La qualité de la réponse dépend surtout de la clarté de la question, merci!
0
Voici le fichier via ton site https://mon-partage.fr/f/vEz8vovS/

Je pense que ta formule va multiplier le nombre et pas compter le nombre de cellule concernée. Avec le fichier, cela sera plus parlant je pense
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
22 août 2017 à 17:34
Bonour effectivement c'est un peu lus complexe
compte tenu du volume de données traitées, j'hésite à creuser ça en matricielle et en plus je ne suis pas sur de trouver et je ne peux vous donner qu'un conseil
ajouter une colonne dans la feuille Formule DI, par exemple en L avec cette formule:
=SI(OU(NB.SI($A$2:A2;A2)>1=1;A2=0);1;0)
attention au blocage du 1° A2et pas du second dans les limites de champ

et rajoutez une condition à votre formule SOMMEPROD: ...*(L2:L40000=1)

à moins que quelqu'un trouve mieux ce qui reste fort possible

crdlmnt
0
L'idée de créer un colonne en plus peut être bonne mais le résultat de ta formule n'est pas correcte je pense. La formule doit afficher 1 si la colonne A = 0. S'il y a un seul nombre unique différent de 0, elle affiche 1. Pour les cellules vides, elle affiche rien. Jusque la, c'est pas trop dur mais si il y a plusieurs nombres identiques différents de 0, elle doit afficher la première occurrence à 1 et les autres rien et là c'est plus difficile.
0
mdo100 Messages postés 126 Date d'inscription jeudi 9 décembre 2010 Statut Membre Dernière intervention 21 février 2019 22
22 août 2017 à 18:34
Bonjour Erakmur, Vaucluse,

Je ne peux pas ouvrir les fichiers joints.

Toutefois je tente ma chance.

Dans la colonne "A" de "A2 à A50"
Formule matricielle a valider avec ctrl + maj + entrée

=NBVAL($A$2:$A$50)-SOMME(N(NB.SI($A$2:$A$50;$A$2:$A$50)=1))+NB.SI($A$2:$A$50;"=0")

Cordialement.
0
Bonjour,

Voici le fichier joint https://mon-partage.fr/f/vEz8vovS/
Ta formule donne un chiffre bcp trop élevé quand je l'applique. Sans mon fichier, tu ne pourra comprendre la problématique.
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
Modifié le 23 août 2017 à 11:57
Bonjour à tous

Peut être avec une petite macro (sur ma vieille machine, elle met moins d'une seconde pour trouver les 16329 valeurs sans doublon et 17737 en y ajoutant les 0)

Const FFDI As String = "Formule DI"
Const lideb As Byte = 2
Const coNOT As String * 1 = "A"

Public Function NbNumOT() As Long
Dim li As Long, lifin As Long, nb As Long
Dim dico As Object, cle, valeur As Long, cles, valeurs, nbcles As Long
Set dico = CreateObject("scripting.dictionary")
nb = 0
With Sheets(FFDI)
  lifin = .Range(coNOT & Rows.Count).End(xlUp).Row
  For li = lideb To lifin
    cle = .Range(coNOT & li).Value
    If cle <> "" Then
      If dico.exists(cle) Then
        If cle = 0 Then
          dico(cle) = dico(cle) + 1
          nb = nb + 1
        End If
      Else
        dico.Add cle, 1
        nb = nb + 1
      End If
    End If
  Next li
End With
nbcles = dico.Count
NbNumOT = nb
End Function

Cdlmnt
0
Bonjour,
Je vais simplifier le problème en m'inspirant des remarques de Vaucluse. Dans la colonne L de l'onglet Formule DI, il me faudrait une macro ou une fonction excel qui fasse la chose suivante:

La formule doit afficher 1 si la colonne A = 0. S'il y a un seul nombre unique différent de 0, elle affiche 1. Pour les cellules vides, elle affiche rien. Jusque la, c'est pas trop dur mais si il y a plusieurs nombres identiques différents de 0, elle doit afficher la première occurrence à 1 et les autres rien et là c'est plus difficile. Ainsi voici l'exemple:
Colonne A Colonne L
1 1
2 1
3 1
4 1
1
1
5 1
6 1
5

7 1
7
9 1
10 1
0 1
0 1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
23 août 2017 à 12:22
Bonjour,

=--SI(ET(A2=0;A2<>"");1;EQUIV(A2;A:A;0)=LIGNE()) 

La prochaine fois met un fichier de 50 lignes, ça suffit.
18 Mo, compressé en .rar que tout le monde n'a pas en plus, ça dissuade...
eric
0
Bonjour,
Au début, je n'ai pas eu cette idée d'où le fichier complet. C'est après la lecture de Vaucluse que je me suis dit que le problème pouvait être réduit à quelque chose de bcp plus simple.
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 396
23 août 2017 à 12:40
Bonjour
il y avait effectivement juste une petite coquille dans la formule (c'est ma spécialité):

=SI(OU(NB.SI($A$2:A2;A2)=1;A2=0);1;0)

peut être à compléter pour les lignes sans N° et sans 0, pour qu'elle n'affiche pas 1 (c'est au choix)
:

=SI(A2="";"";SI(OU(NB.SI($A$2:A2;A2)=1;A2=0);1;0))

crdlmnt
0
Les solutions de vaucluse et d'eriiic fonctionnent très bien. J'ai donc modifié l'onglet EST en conséquence en rajoutant *('Formule DI'!$L$2:$L$40000=1) à la formule du sommeprod. J'ai modifié la formule de Vaucluse en =SI(A2="";"0";SI(OU(NB.SI($A$2:A2;A2)=1;A2=0);1;0)) sinon, il y avait 3 solutions possibles.
0
Merci à tout les 3 !
0