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 :

Boucle pour compter des occurrences et remplir les cellules vides


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 15
    Points
    15
    Par défaut Boucle pour compter des occurrences et remplir les cellules vides
    Bonjour,

    J'ai besoin de votre aide.
    J'ai un fichier excel (pièce_jointe) qui comporte des noms et des colonnes contenant des "yes" et "no"
    J'arrive pas acompter le nombre de "yes" et de l'inscrire dans la cellule vide juste de dessous, puis de continuer
    le même procédé pour les reste des céllules.
    voici mon code :

    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
     
    Sub compteur_yes()
    '
    ' compteur_yes Macro
    '
     
    '
    Dim i, compteur As Integer
    i = 1
    compteur = 0
     
    While Not (IsEmpty(Cells(i, 4)))
        If (Cells(i, 4).Value = "Yes") Then
        compteur = compteur + 1
        End If
        Cells(i + 1, 4) = compteur
        compteur = 0
    Wend
     
     
     
    End Sub
    Merci d'avance


    Nom : vba_screen.png
Affichages : 562
Taille : 32,1 Ko

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une idée comme ça

    adapte la ligne de départ et le nom de la feuille
    tu peux aussi ajouter une variable pour la colonne

    et au final, tu fais une boucle pour chaque colonne, et une autre boucle (si besoin) pour chaque bloc de lignes

    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
     
    Sub compteur_yes()
     
    Dim LigDepart As Long
    Dim LigFin As Long
    Dim Critere As String
     
    With Worksheets("Feuil1")
        Critere = "yes"
        LigDepart = 1
        LigFin = .Cells(LigDepart, 4).End(xlDown).Row
        .Cells(LigFin + 1, 4) = Application.WorksheetFunction.CountIf(.Range(.Cells(LigDepart, 4), .Cells(LigFin, 4)), Critere)
    End With
     
    End Sub

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Ca peut se résoudre facilement avec une formule Excel.
    En supposant que tes données aille de la ligne 1 à 100, pour avoir le nombre de Yes de la colonne I :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI(I$1:I$100;"Yes")
    Tu remplaces Yes par No et tu as le nombre de No.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    une idée comme ça

    adapte la ligne de départ et le nom de la feuille
    tu peux aussi ajouter une variable pour la colonne

    et au final, tu fais une boucle pour chaque colonne, et une autre boucle (si besoin) pour chaque bloc de lignes

    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
     
    Sub compteur_yes()
     
    Dim LigDepart As Long
    Dim LigFin As Long
    Dim Critere As String
     
    With Worksheets("Feuil1")
        Critere = "yes"
        LigDepart = 1
        LigFin = .Cells(LigDepart, 4).End(xlDown).Row
        .Cells(LigFin + 1, 4) = Application.WorksheetFunction.CountIf(.Range(.Cells(LigDepart, 4), .Cells(LigFin, 4)), Critere)
    End With
     
    End Sub
    Bonjour,

    merci de ton aide, ça marche mais saurais-tu comment mettre la condition jusqu'à la dernière ligne vide ?
    Car j'ai essayé la boucle for.. mais il continue au delà des lignes vides de la cellule.
    Et je suppose que je dois mettre une seconde boucle pour les autres colonnes qui contiennent des "yes" et "no"

    Cordialement

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    j'ai juste besoin de savoir :

    - la toute première ligne de ta feuille où tu aurais des yes/no : ça permettra de calculer le premier bloc à traiter pour traiter tout les blocs .. ensuite on s'arrêtera simplement quand on aura atteint la dernière ligne non vide de ta feuille
    - les colonnes où sont ces yes/no, comment on peut les définir ? : ça permettra de boucler le traitement sur chaque colonne

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    j'ai juste besoin de savoir :

    - la toute première ligne de ta feuille où tu aurais des yes/no : ça permettra de calculer le premier bloc à traiter pour traiter tout les blocs .. ensuite on s'arrêtera simplement quand on aura atteint la dernière ligne non vide de ta feuille
    - les colonnes où sont ces yes/no, comment on peut les définir ? : ça permettra de boucler le traitement sur chaque colonne
    Bonjour,

    La ligne sur laquelle il faudra commencer c'est la ligne n° 3

    Par ailleurs, actuellement le calcul de donne le cumul des "yes" entre chaque vide
    alors que moi je veux uniquement le nombre de vide sans tenir compte de ceux au dessus
    des précédents dides.

    Merci

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    je n'ai rien compris à ta dernière phrase ... qui semble aller à l'encontre :

    - de ta demande initiale
    - du code que tu avais essayé de faire

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    je n'ai rien compris à ta dernière phrase ... qui semble aller à l'encontre :

    - de ta demande initiale
    - du code que tu avais essayé de faire
    Au fait ce que je veux:

    Quand j'ai 2 vide avec par exemple 2 "yes" et 3 "yes"
    je veux qu'il m'insert 2 dans le 1e vide et 3 dans le séconde.
    Le code actuel m'insert 2 dans le premier et 5 dans le 2e au lieu de 3

  9. #9
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Donc si j'ai bien compris, le problème du cumul de nombre tu ne l'a pas rencontré avec mon code (encore que ... mon exemple commençait en ligne 1)

    et tu veux que :

    - pour chaque bloc, dont le premier bloc commence en ligne 3
    - on compte le nombre de yes
    - on marque le nombre de "yes" de ce bloc dans la cellule "vide" en dessous du bloc
    - on passe au bloc suivant en remettant le compteur à 0
    - etc... jusqu'au dernier bloc de la colonne

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Donc si j'ai bien compris, le problème du cumul de nombre tu ne l'a pas rencontré avec mon code (encore que ... mon exemple commençait en ligne 1)

    et tu veux que :

    - pour chaque bloc, dont le premier bloc commence en ligne 3
    - on compte le nombre de yes
    - on marque le nombre de "yes" de ce bloc dans la cellule "vide" en dessous du bloc
    - on passe au bloc suivant en remettant le compteur à 0
    - etc... jusqu'au dernier bloc de la colonne
    Oui c'est exactement cela !!!!! :cool:
    Et pour le cumul je l'ai eu avec ton code en ajoutant une boucle for..

  11. #11
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    ça devrait ressembler à ç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
    Sub compteur_yes()
     
    Dim LigDepart As Long
    Dim LigFin As Long
    Dim DerLig As Long
    Dim Critere As String
     
    With Worksheets("Feuil1")
        Critere = "yes"
        LigDepart = 3
        DerLig = .Cells(.Rows.Count, 4).End(xlUp).Row
     
        While LigDepart < DerLig
            LigFin = .Cells(LigDepart, 4).End(xlDown).Row
            .Cells(LigFin + 1, 4) = Application.WorksheetFunction.CountIf(.Range(.Cells(LigDepart, 4), .Cells(LigFin, 4)), Critere)
            LigDepart = LigFin + 2
        Wend
     
    End With
     
    End Sub

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 15
    Points
    15
    Par défaut
    Merci joe.levrai,

    Le code marche parfaitement ! :cool:
    Un dernier point, je fais une boucle pour faire ce traitement pour plusieurs colonnes en même temps ?
    Pour l'instant j'ai choisi la colonne 4 , avant de pouvoir utiliser le code pour plusieurs colonnes.

    Bonne soirée!

  13. #13
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la boucle pour appliquer le traitement sur plusieurs colonnes aurait été incluse dans ma proposition, si tu avais répondu à la seconde question de mon post #5

    si tes colonnes ont la même "longueur", tu peux ajouter à la ligne 12 une boucle qui change de colonne, et réinitialiser LigDepart à chaque tour de boucle
    sinon, il faut faire démarrer la boucle entre la ligne 9 et 10 pour recalculer DerLig et réinitialiser LigDepart

    et bien sûr, gérer dynamiquement les colonnes, puisqu'ici la colonne 4 est écrite en dure

  14. #14
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 61
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Ok, désolé j'avais pas fait attention en répondant.

    Je teste et te tiens au courant.

    Merci

Discussions similaires

  1. Remplir les cellules vides dans une boucle
    Par zoltar_x dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/11/2011, 18h35
  2. [Dates] Boucle pour creer des dates
    Par Konrad Florczak dans le forum Langage
    Réponses: 19
    Dernier message: 27/10/2006, 19h03
  3. [VBA-E] Boucle pour supression des dernieres cellules
    Par amd64 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/05/2006, 16h41
  4. Remplir les cellules Excel avec des variables VB
    Par rupeni dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/11/2005, 09h31
  5. boucle pour insérer des enregistrements
    Par roots_man dans le forum ASP
    Réponses: 7
    Dernier message: 05/10/2004, 09h28

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