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

Macros et VBA Excel Discussion :

compter le nombre de valeurs distinctes dans une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut compter le nombre de valeurs distinctes dans une colonne
    Bonjour,

    j'ai un souci , j'ai une colonne et je voudrais savoir le nombres de valeur distinctes dans cette colonne

    quelle est l'instruction en vba pour dénombrer les valeurs ?

    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Consultant comptable
    Inscrit en
    Mai 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant comptable

    Informations forums :
    Inscription : Mai 2011
    Messages : 137
    Points : 160
    Points
    160
    Par défaut
    Tu as la fonction countif en vba équivalent à nb.si
    par exemple je cherche le nombe de valeur égale à 12 dans la colonne A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur = Application.WorksheetFunction.CountIf(Columns("A:A"), 12)

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut
    Merci pour ton aide mais ce que je veux c'est compter le nombre de valeurs différentes

    je vais écrire l'algorithme en espérant être précis

    pour chaque cellule de la selection
    si cellule = agence alors
    selectionner la colonne
    si les cellules de cette colonnes sont toute identiques
    faire traitement
    sinon faire traitement
    fin si
    fin si
    fin pour


    Ce qui m'interesse c'est surtt ce qui est en rouge

    cordialement

    Huître

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 114
    Points
    1 114
    Par défaut
    Bonjour

    nombre de valeur uniques dans une plage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function compter_uniques(plage As Range) As Long
     
    Set dico = CreateObject("scripting.dictionary")
    For Each cellule In plage
         ref = cellule.Value
         If Not dico.exists(ref) Then
              dico.Add ref, ref
         End If
    Next
    compter_uniques = dico.Count
    End Function
    on pourrait peut-^tre passer + simplement par un filtre ou par la fonction evaluate mais bon courage
    Michel_M

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut
    alors je vais rajouter une difficulté

    c'est un fichier télécharger à partir du web et on peut choisir l'emplacement des colonnes (donc difficulté)

    moi ce que je compte faire ressemble à ça

    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
    Sub multiple()
    Dim rg As Excel.Range
    Dim val As Integer
    
    Range("B14").Select
    Range(Selection, Selection.End(xlToRight)).Select
    
    For Each rg In Selection
        If rg = "Agence" Then
           rg.Select
           Range(Selection, Selection.End(xlDown)).Select
               Range(Selection).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
            "BO14"), Unique:=True    
                val = Application.WorksheetFunction.CountA("BO") - 1
                If val > 1 Then
                Range("B3").ClearContents
                End If
        End If
    Next
    End Sub
    et je dois réiterer le processus pour le nom du client

    donc la je cherche la plage qui m'interesse en fontion du critère
    ensuite je fais un filtre élaboré avec une extraction sans doublons que je copie dans la cellule BO14 et la je compte le nombre de champs dans la colonne BO en excluant le titre et je l'insere dans la variable , si cette variable est superieur à 1 alors je supprime le champs concerné

    alors en plus d'etre fastidieux ,le code ne marche pas(le debogueur m'indique la ligne écrite en vert) mais voilà ce que je veux grossomodo c'est à dire supprimer une cellule en fonction du nombre de valeurs différentes qu'on peut trouver

    Sinon si je reviens au code de Michel_M je n'ai pas bien compris les instructions

    ah oui j'ai oublié un dernier détail plusieur colonnes peuvent avoir le même ce qui constitue une gêne non négligeable mais comment résoudre ce problème de doublons?

    Merci d'avance

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 114
    Points
    1 114
    Par défaut
    Tu n'as pas autre chose à rajouter après une proposition que je reprenne les codes N fois ?
    Michel_M

  7. #7
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonjour huître, Michel M

    Si je puis me permettre, j'ai du mal à comprendre ce que tu cherches huître, car :

    - à 9h31 la question était : "...je voudrais savoir le nombre de valeurs distinctes dans cette colonne "

    - puis à 10h12 : ".....si les cellules de cette colonne sont toutes identiques "

    Si la vrai question est celle de 9h31, la réponse de Michel est top, sinon un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.WorksheetFunction.CountIf(Columns("A:A"), "agence") = nombre de lignes occupées dans la colonne A
    devrait faire l'affaire ("A" étant un exemple), mais ..... peut-être que je me trompe.

    Dans le code de huître de 13h34, j'aurai opté pour un "find" à la place de la boucle pour un gain de temps certain, mais .... peut-être que je me trompe

    Eric

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu!!!!
    bonjour


    michel M a tres bien repondu
    sa macro repond a toutes tes question

    et pour la question en rouge meme si la reponse de edelweisseric et parfaite

    moi je rajoute a la macro de michel M ce qui est en rouge


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function compter_uniques(plage As Range) As Long
     dim compteur_pas_unique as variant 
    Set dico = CreateObject("scripting.dictionary")
    For Each cellule In plage
         ref = cellule.Value
         If Not dico.exists(ref) Then
              dico.Add ref, ref
         End If
    Next
    compter_uniques = dico.Count
    
    compteur_pas_unique= plage.cells.count-dico.count
    End Function

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Compter le nombre de valeurs différente dans une colonne
    Par Mist-e-Fire dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/04/2013, 09h01
  2. Réponses: 1
    Dernier message: 22/05/2012, 19h15
  3. [2008R2] Compter le nombre de valeurs nulles dans une mesure
    Par kavuza dans le forum SSAS
    Réponses: 5
    Dernier message: 04/05/2012, 14h57
  4. [MySQL] Compter le nombre de valeurs identiques dans une colonne d'une table
    Par luca120 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/12/2009, 00h40
  5. Réponses: 0
    Dernier message: 27/05/2009, 14h21

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