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 :

Excel, compter le nombre de 1 d'une cellule [Trucs & Astuces]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de mullger
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 157
    Points : 86
    Points
    86
    Par défaut Excel, compter le nombre de 1 d'une cellule
    Bonjour tout le monde,

    je réalise un petit projet en Excel et je dois compter le nombre de 1 de plusieurs cellules qui contiennent des nombres binaires. Sauf que je ne sais pas s'il existe une fonction pour faire ça et le cas échéant comment je peux le faire en VBA ???



    Merci d'avance
    L'esprit est comme un parachute : il ne fonctionne que quand il est ouvert...

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Utlise les fonctions Instr, mid et autres fonctions sur les chaines de caractères qui te permettent de trouver les caractères dès que tu tombes sur un 1 tu rajoute un a une variable et au final tu auras ton nombre de 1
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    je connais pas de fonction.. permettant de compter un caractére dans une chaine... tiens en voila une en vba :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Function Nb1(st As String) As Integer
     Dim i As Integer
     Dim nb As Integer
     For i = 1 To Len(st)
      If Mid(st, i, 1) = "1" Then nb = nb + 1
     Next
     Nb1 = nb
    End Function
    tu l'utilise dans ta feuille excel ensuite :

  4. #4
    Membre régulier Avatar de mullger
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 157
    Points : 86
    Points
    86
    Par défaut
    Je vais essayer et je prendrai la plus simple !

    Merci pour les solutions et bonne journée
    L'esprit est comme un parachute : il ne fonctionne que quand il est ouvert...

  5. #5
    Membre régulier Avatar de mullger
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 157
    Points : 86
    Points
    86
    Par défaut
    Faut-il rajouter quelquechose pour avoir les fonctions sur les chaînes de caractères ?
    L'esprit est comme un parachute : il ne fonctionne que quand il est ouvert...

  6. #6
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    I KICETI KI SE AKOI SERT LE CHIFFRE 9 ?

    donne tout bêtement le nombre de 1 dans un binaire (donc des 1 et 0 uniquemen)

  7. #7
    Membre régulier Avatar de mullger
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 157
    Points : 86
    Points
    86
    Par défaut
    Merci je sais encore ce qu'est un nombre binaire, mais je préférerais utiliser une fonction plutôt que d'utiliser VBA. Au passage la réponse était peut-être très drôle, (personellement j'ai pas trouvé) mais je n'ai pas compris la solution proposée (ma faute?)
    L'esprit est comme un parachute : il ne fonctionne que quand il est ouvert...

  8. #8
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Ben mon vieux !
    Que veux-tu de plus !
    choisis un nombre binaire a
    par exemple
    a = 11001010
    et envoie ce que je t'ai dit !
    tu obtiendras 4 (puisque 4 chiffres 1)

  9. #9
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par jmfmarques
    I KICETI KI SE AKOI SERT LE CHIFFRE 9 ?

    donne tout bêtement le nombre de 1 dans un binaire (donc des 1 et 0 uniquemen)
    lol je ne connaissais pas... ça marche, mais c'est limité à un octet.. faut voir si cela suffit..

  10. #10
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Ben non !
    A tout binaire (donc composé de 1 et de 0)
    Dans la limite d'un long, bien évidemment !


    Je reviendrai un jouir expliquer à quoi sert le chiffre 7 puis le chiffre 11

  11. #11
    Membre régulier Avatar de mullger
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 157
    Points : 86
    Points
    86
    Par défaut
    alors autre question, parce que vba et moi on est pas encore amis. comment je fais pour que ça me prenne le contenu d'une cellule et que ça renvoie ce fameux nombre de 1 dans une autre cellule ?
    L'esprit est comme un parachute : il ne fonctionne que quand il est ouvert...

  12. #12
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par jmfmarques
    Je reviendrai un jouir expliquer à quoi sert le chiffre 7 puis le chiffre 11
    il me manque des messages ?? je ne vois nulle part ces 7 et 11..


    Citation Envoyé par mullger
    alors autre question, parce que vba et moi on est pas encore amis. comment je fais pour que ça me prenne le contenu d'une cellule et que ça renvoie ce fameux nombre de 1 dans une autre cellule ?
    . pour appliquer la méthode dans une feuille de calcul on fait bien une formule du genre :



  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    utilises ceci
    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
     
    Option Base 1
    Function comptecar(cara As String, ParamArray mescel() As Variant) As Long
    'cara est le caractère à chercher
    Dim parcourt As Variant
    Dim bouclerange As Variant
    Dim bouclecell As Integer
    Dim compteur As Long
    For Each parcourt In mescel
    If VarType(parcourt) >= 8192 Then
    'le range est composé de plusieurs cellules
        For Each bouclerange In parcourt
            For bouclecell = 1 To Len(bouclerange)
            If Mid(bouclerange, bouclecell, 1) = cara Then compteur = compteur + 1
            Next bouclecell
        Next bouclerange
    Else
        For bouclecell = 1 To Len(parcourt)
        If Mid(parcourt, bouclecell, 1) = cara Then compteur = compteur + 1
        Next bouclecell
    End If
    Next parcourt

    tu te places dans une cellule et tu tapes
    =comptecar("1";A7:A15;C7:C8;E7;E10;E12;Feuil2!D912)
    par exemple
    Elle est pas belle la vie ?

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    en plus fun pour une seule cellule

    =NBCAR(A7)-NBCAR(SUBSTITUE(A7;"1";""))
    Elle est pas belle la vie ?

  15. #15
    Membre régulier Avatar de mullger
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 157
    Points : 86
    Points
    86
    Par défaut
    Merci jmfmarques pour ta solut, j'ai un peu paniqué mais en fait c'est tout simple et ça marche super ! Est-ce que tu serais-ok pour m'expliquer un peu ce que cette petite ligne (qui me parait magique pour l'instant) fait ?

    Merci aussi pour les autres solutions
    L'esprit est comme un parachute : il ne fonctionne que quand il est ouvert...

  16. #16
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    C'est facile (arithmétique pure) :
    le reste de la division d'un chiffre composé de 1 et de 0 par 9 est le nombre de 1 dans le chiffre
    ex : 11/9 : reste 2
    101/9 reste 2
    111/9 reste 3
    tout simplement par le jeu des retenues (puisque 1 = 10 -9)
    il me reste toutefois à traiter le cas d'un chiffre d'une longueur suéprieure à 8 et qui serait un multiple exact de 9 (cas particulier).
    Je reviens donc dans un moment avec cette solution totale !
    Pour Bbil : il n'y a pour l'instant aucun message concernant l'emploi du 7 et du 11 (c'est pour plus tard et à d'autres fins )

  17. #17
    Membre régulier Avatar de mullger
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 157
    Points : 86
    Points
    86
    Par défaut
    Eh ben j'aurai vraiment appris quelquechose aujourd'hui

    encore merci et bonne journée
    L'esprit est comme un parachute : il ne fonctionne que quand il est ouvert...

  18. #18
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Voilà la soluce arithmétique "universelle" (quelle que soit la longueur, dans la limite d'un chiffre long)
    Bien s'accrocher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MsgBox (Val(Mid(a, 1, Int(Len(a) / 2))) Mod 9) + (Val(Mid(a, (Int(Len(a) / 2) + 1))) Mod 9)

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

Discussions similaires

  1. [XL-2010] Compter le nombre de lignes dans une cellule fusionnée
    Par hipnobe dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/02/2015, 23h12
  2. [XL-2003] compter le nombre de lignes dans une cellule Excel
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/11/2012, 14h01
  3. [E-07] Compter le nombre de caractères d'une cellule en temps réel
    Par eliot.raymond dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/03/2009, 11h35
  4. [Excel] Compter le nombre de cases d'une couleur
    Par gangsoleil dans le forum Excel
    Réponses: 9
    Dernier message: 28/11/2006, 17h26

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