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 d’occurrences d'une valeur dans une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut Compter le nombre d’occurrences d'une valeur dans une colonne
    Bonjour,

    J'ai un feuille excel wsCible avec une colonne O

    je voudrais dans ma macro si toto existe compter le nombre d'occurence dans cette meme colonne

    Est-ce que je suis obligée de faire une boucle ligne par ligne et de faire mon propre compteur
    (mon fichier est enorme, et ca va etre tres lourd..., plus des boucles imbriquées , suis pas fan ) ou existe-il une fonction rapide qui me le retourne ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Dim totoExiste As Variant
    Set totoExiste = wsCible.Columns("O").Find("toto")
     
    If totoExiste Is Nothing Then
                MsgBox "toto existe pas  "
            Else
                'calcul nombre occurence ?
                MsgBox "toto existe " 
            End If
    merci d'avance

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    utilise la fonction feuille de calcul NB.SI()

  3. #3
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    Bonjour,
    En revanche si tu tien à faire ta propre fonction,
    bah tu peut utiliser ç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
    21
    22
    23
    24
    25
    26
    dim ligne as integer
    dim colonne as integer
    dim vide as integer
    dim moncompteur  as integer
     
    moncompteur  = 0
    ligne = 1
    colonne = 0
    vide = 0
    'je fixe 50 celules vides ou qui ne contienent pas mon information
    'pour ne pas avoir de boucle infinie
    while vide < 50
     
    'je donne ma condition de comptage
        if cells(ligne,colonne) <> "" then
    'si je trouve une case qui correspond a mon besoin alors + 1
            moncompteur = moncompteur + 1
            vide = 0
        else
    'si non j'incrémente le compteur de case vide ou qui ne corresponde pas a mon besoin
            vide = vide + 1
        end if
     
        ligne = ligne + 1
     
    wend
    Mais cela dit, si tu a la possibilité, préfére la solution de bbil, excel met à notre disposition des fonctions déjà faites, alors autant s'en servire(une licence sa coute, alors perd pas ton temps à tout refaire, même si c'est la classe).
    Avec ce morceau de code je tien juste a nourrire ta curiosité.

  4. #4
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    merci de vos réponses.
    @pasdechances: oh non je ne tiens pas plus a écrire mon propre code
    @bbil: oui , je souhaiterai utiliser cette fonction NB.SI

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ' contenu a rechercher
    Dim valCell As String
    valCell = wsSource.Range("N" & myQuestionIterator).Value
     
    Dim nbOccurences As Integer
    nbOccurences = NB.SI("O4:O15;valCell")
     
    MsgBox "nb occurence: " & nbOccurences

    mais je prend une erreur executage 424

  5. #5
    Membre chevronné Avatar de pasdechances
    Homme Profil pro
    Alternant, Ingénieur en systèmes Informatiques et Industriels
    Inscrit en
    Septembre 2015
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Alternant, Ingénieur en systèmes Informatiques et Industriels
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 218
    Par défaut
    C'est normal,

    cette fonction est à appliquer dans les celules de ton classeur, après avec ton code VBA, tu récupère cette valeur.
    Du moins, je crois, je l'ai toujours utilisée de la sorte.

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,


    pour utiliser les fonction de feuilles de cacul en VBA il faut utiliser l'objet WorkSheetFunction et les fonctions à l'anglaise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbOccurences = Application.WorksheetFunction.CountIf(wsCible.Columns("O"), valCell)

    PS : au sujet de ton utilisation de valCell pour utiliser le contenu d'une variable il ne faut pas la placer entre guillemet ...

  7. #7
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    Super, ca marche a merveille
    et ca fait pas usine !
    merci beaucoup

    je pousse un peu mais est-ce qu'il est possible d'avoir aussi du coup, les numeros des lignes auxquels ces instances ont été trouvé?

    quelque chose du style findnext ?
    je ne trouve pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set idBaseCampExist = wsCible.Columns("O").Find(valIdBaseCamp)

  8. #8
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    J'ai trouvé pour obtenir le numéro de la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Set FoundCell = wsCible.Range("A:A").Find(what:="valeurChampO", lookat:=xlWhole)
    If Not FoundCell Is Nothing Then
        MsgBox ("valeur champ A trouvé à " & FoundCell.Row)
    Else
        MsgBox ("valeur champ A pas trouvé")
    End If

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 1
    Dernier message: 15/07/2014, 17h57
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Réponses: 1
    Dernier message: 25/09/2006, 17h15
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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