IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Compter les cellules identiques en fonction d'une condition


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Compter les cellules identiques en fonction d'une condition
    Bonjour,

    Je recherche une formule qui me permette de compter le nombre de cellules identiques (si doublon 0.5+05 =1 si triplon 0.33+0.33+0.33=1 etc ) en fonction d'une condition (date).
    La colonne A (date) est la condition
    La colonne B est la zone de recherche
    la colonne C est le résultat recherché

    Date Immat Résultat souhaité
    01/01/2013 125RE69 0,33
    01/01/2013 258YT69 0,5
    01/01/2013 125RE69 0,33 Pour la journée du 01/01 on a 5 immat
    01/01/2013 258YT69 0,5 différentes
    01/01/2013 65P69 1
    01/01/2013 658GB69 0,5
    01/01/2013 359AZ69 1
    01/01/2013 125RE69 0,33
    01/01/2013 658GB69 0,5
    02/01/2013 958KJ69 0,33
    02/01/2013 754PO69 1
    02/01/2013 256ML69 0,5
    02/01/2013 958KJ69 0,33
    02/01/2013 256ML69 0,5
    02/01/2013 741TF69 1
    02/01/2013 958KJ69 0,33 Pour la journée du 02/01 on a 7
    02/01/2013 159HB69 1 immat différentes
    02/01/2013 321VC69 1
    02/01/2013 359AZ69 0,5
    02/01/2013 359AZ69 0,5

    Merci pour votre aide.
    Pierre

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 759
    Points : 28 611
    Points
    28 611
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne suis pas sûr d'avoir compris par rapport à ce que tu écris.
    Formule qui multiplie par 0.33 le nombre de fois que l'on retrouve pour une même date la même immatriculation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD( (A2=$A$2:$A$21) * (B2=$B$2:$B$21) * 1 ) * 0,33
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Eclaicissement
    Merci pour ta réponse,

    En fait, pour la journée du 01/01, J'ai 5 immat différentes, et je souhaite qu'il apparaisse dans la colonne "résultat souhaite"
    Si valeur unique = 1
    si doublon : on ait soit 0.5 pour une occurrence + 0.5 pour l'autre occurrence identique = 1 (1/(nb occurrence identique))
    soit 1 pour une occurrence + 0 pour l'autre occurrence identique
    tel que la somme soit égale a 1

    Il faut que la somme de la colonne "résultat recherche" corresponde ici pour le 01/01/13 à 5 et le 02/01/2013 à 7

    J'espère avoir été plus clair :-)

  4. #4
    Membre régulier
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 56
    Points : 88
    Points
    88
    Par défaut
    Bonsoir,

    =NB(1/FREQUENCE(SI((dates=E2)*(Numero<>"");EQUIV(Numero;Numero;0));LIGNE(INDIRECT("1:"&LIGNES(Numero)))))
    Valider avec Maj+Ctrl+entrée

    Ceuzin
    Fichiers attachés Fichiers attachés

  5. #5
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Février 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Merci pour ta formule mais
    Effectivement, elle me permet de compter les immat unique, mais
    Il faut absolument que la formule me donne un résultat pour chaque ligne la colonne "résultat recherché" car je dois exploiter cette colonne "résultat recherché" dans un TCD.

    Si unique =1
    si doublon la somme des 2 = 1
    si triplon la somme des trois = 1

    J'ai 9 entrées le 01/01 mais je n'ai que 5 immat différentes.

    Merci encore pour votre aide

  6. #6
    Membre régulier
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 56
    Points : 88
    Points
    88
    Par défaut
    Avec une fonction perso.
    Doit être +rapide qu'avec une formule matricielle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Function poids(champ, champcritere, critere, code)
      Set mondico = CreateObject("scripting.dictionary")
      a = champ
      b = champcritere
      For i = 1 To champ.Count
        If b(i, 1) = critere And a(i, 1) <> "" Then
           temp = a(i, 1)
           mondico(temp) = mondico(temp) + 1
        End If
      Next i
      tmp = code
      poids = 1 / mondico.Item(tmp)
    End Function
     
    Function ItemsDifferentsCritere(champ, champcritere, critere)
      Set mondico = CreateObject("scripting.dictionary")
      a = champ
      b = champcritere
      For i = 1 To champ.Count
        If b(i, 1) = critere And a(i, 1) <> "" Then
           temp = a(i, 1)
           mondico(temp) = mondico(temp) + 1
        End If
      Next i
      ItemsDifferentsCritere = mondico.Count
    End Function

    Ceuzin
    Fichiers attachés Fichiers attachés

  7. #7
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Pour le résultat cherché en colonne C, mettre en C2 la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =1/SOMMEPROD(($A$2:$A$21=A2)*($B$2:$B$21=B2))
    à aménager selon le nombre de lignes et à recopier vers le bas.
    On peut demander pour cette colonne le format personnalisé :
    [=1]0;0,##
    Cordialement
    Claude

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 759
    Points : 28 611
    Points
    28 611
    Billets dans le blog
    53
    Par défaut
    Bonjour Papouclo,
    Citation Envoyé par papouclo Voir le message
    Bonjour,
    Pour le résultat cherché en colonne C, mettre en C2 la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =1/SOMMEPROD(($A$2:$A$21=A2)*($B$2:$B$21=B2))
    à aménager selon le nombre de lignes et à recopier vers le bas.
    On peut demander pour cette colonne le format personnalisé :
    [=1]0;0,##
    Cordialement
    Claude
    Court et efficace
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre régulier
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 56
    Points : 88
    Points
    88
    Par défaut
    >Court et efficace

    Test pour 4.000 lignes:

    Temps de recalcul avec SommeProd() : 3 secondes
    Temps de recalcul avec fonction perso matricielle: 0,05 seconde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Function poids(champ, champcritere)
      Application.Volatile
      Set mondico = CreateObject("scripting.dictionary")
      a = champ
      b = champcritere
      For i = 1 To UBound(a)
        temp = a(i, 1) & " " & b(i, 1)
        mondico(temp) = mondico(temp) + 1
      Next i
      Dim retour()
      ReDim retour(LBound(b) To UBound(b))
      For i = LBound(b) To UBound(b)
        temp = a(i, 1) & " " & b(i, 1)
        retour(i) = 1 / mondico(temp)
      Next i
      poids = Application.Transpose(retour)
    End Function


    Ceuzin
    Fichiers attachés Fichiers attachés

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 759
    Points : 28 611
    Points
    28 611
    Billets dans le blog
    53
    Par défaut
    Bonjour SophieCeuzin,
    >Court et efficace
    Test pour 4.000 lignes:
    Temps de recalcul avec SommeProd() : 3 secondes
    Temps de recalcul avec fonction perso matricielle: 0,05 seconde
    D'abord, j'ai écrit court et efficace et pas plus rapide. De plus la personne qui a ouvert la discussion l'a mise dans la rubrique Excel et pas Macros et VBA Excel.
    Il est évident qu'une fonction de calcul telle que SOMMEPROD ne rivalise pas en matière de vitesse avec une fonction personnalisée basée sur les dictionnaires mais l'utilisateur a t'il autant de lignes à calculer.
    Si à chaque problème posé dans excel, on se tourne vers le VBA, je crois que l'on décourage un utilisateur lambda de continuer à utiliser ce logiciel.
    Mon appréciation pour la réponse de papouclo était purement intellectuelle belle formule et très concise.
    Mais ta solution est splendide aussi et il n'y avait chez moi aucune comparaison entre les deux et il est certain qu'avec des milliers de lignes le choix est fait.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [XL-2007] compter les cellules non vides sur une ligne
    Par tyndare36 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/02/2014, 11h30
  2. Compter les cellules identiques d'une colonne
    Par daridoussama dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/03/2013, 16h36
  3. Compter les cellules identiques d'une colonne
    Par daridoussama dans le forum Excel
    Réponses: 2
    Dernier message: 29/03/2013, 16h11
  4. [XL-2007] Compter les cellules d'une même couleur avec SUMPRODUCT en VBA
    Par apt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/10/2012, 21h25
  5. comment compter les entrées identiques dans une requete?
    Par Chico_Latino dans le forum Access
    Réponses: 2
    Dernier message: 11/04/2006, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo