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 :

Automatisation VBA Comptage cellules particulier [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut Automatisation VBA Comptage cellules particulier
    Bonjour à tous,

    Je viens vers vous pour demander de l'aide.
    J'essaye de réaliser un comptage de cellules un peu particulier. Je planche depuis plusieurs jours dessus.
    Voici ci dessous mon jeu de données (un aperçu !) :

    janv;	fev	mars	avril	mai	juin	juillet	aout	sept	oct	nov	dec		nb_mois
    1	1	0	0	0	0	0	0	0	0	0	0		10
    1	0	0	1	1	0	0	0	0	0	0	0		2
    0	0	0	0	1	1	1	0	0	0	1	1		3
    0	1	0	0	0	0	0	1	1	0	0	0		5
    0	0	0	1	1	1	0	0	0	0	0	0		6
    0	0	1	0	0	1	0	0	0	1	0	0		2
    J'aimerais automatiser le remplissage de la colonne nb_mois.
    Voici la règle de gestion :
    on commence à lire les cellules à gauche ligne par ligne,
    - Compter le nombre de 0 après la première série de 1 jusqu'à la prochaine série de 1.
    Vous pouvez constater les résultats dans la colonnes nb_mois.

    J'espère que je suis assez clair.

    J'attends vos réponse !

    Merci d'avance

    Balkoo !

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Pas évident, mais ceci devrait faire l'affaire

    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
    Sub Totaux()
        Dim I As Long, J As Long
        Dim nbLignes As Long, Somme As Long
        Dim Debut As Boolean
     
        nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
     
        For I = 2 To nbLignes
            Somme = 0
            Debut = False
            For J = 1 To 12
                If Cells(I, J) = 1 And Cells(I, J + 1) = 0 Then
                    Debut = True
                ElseIf (Cells(I, J) = 0 And Cells(I, J + 1) = 1) Or J + 1 = 13 Then
                    If Debut = True Then
                        Somme = Somme + 1
                        Cells(I, 13) = Somme
                        Exit For
                    End If
                ElseIf Cells(I, J) = 0 And Debut = True Then
                    Somme = Somme + 1
                End If
            Next
        Next
    End Sub

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut
    Tout d'abord merci pour la réponse aussi rapide!

    Parmi,
    le code me retourne la valeur -1 a chaque fois...
    De plus, faudrait-il ne pas mettre une variable "fin" de type boolean : enchainement de 0 et 1(de la même façon que "début" : enchainement de 1 et 0) ?
    On compterais alors le nombre de 0 entre début et le premier fin. Mais est-ce possible de coder cela ? ..


    Je voulais ajouter une précision sur l'exemple. La valeur de nb_mois de la première ligne est bien 10 !
    Plus précisément la règle est :
    nb_mois = nombre de 0 après la première série de 1 jusqu'à la prochaine série de 1 ou jusqu'à la dernière colonne de données si il n'y a pas de série de 1 (d'où 10 sur l'exemple).


    Merci !

    Balkoo

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Pourtant le résultat était bon avec mon code.
    J'avais mis les données telles que tu les as inscrites, en colonne A à partir de la ligne 2 et les mois sur la ligne 1

    Si les données sont dans d'autres colonnes, modifie les boucles et le J + 1 = 13

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    Bonsoir,

    il me semble que la version de Parmi fonctionne!

    Je mesuis essayé sur plusieurs solution en tout cas en voici une:
    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
    Sub test2()
    Dim Der_Ligne As Integer
    Dim I, t, e As Integer
     
    Der_Ligne = Sheets("feuil1").Range("A65536").End(xlUp).Row
     
      For I = 2 To Der_Ligne
          For t = 1 To 11
            If Cells(I, t) = 1 And Cells(I, t + 1) = 0 Then
                For e = t + 1 To 12
                  If Cells(I, e) = 1 Then
                    Cells(I, 13) = e - t - 1
     
                    Exit For
                    Else
                    If Cells(I, 12) = 0 Then Cells(I, 13) = 12 - t
     
                  End If
                Next e
              Exit For
            Else
              Cells(I, 13) = 0
            End If
          Next
       Next
     
    End Sub
    Comme dit Parmi 'Pas facile ' mais sympa pour les TORDU !

    Re

    avec une petite modif au cas ou on trouve que des "1" ou des "0"

    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
    Sub test2()
    Dim Der_Ligne As Integer
    Dim I, t, e As Integer
     
    Der_Ligne = Sheets("feuil1").Range("A65536").End(xlUp).Row
     
      For I = 2 To Der_Ligne
          For t = 1 To 11
            If Cells(I, t) = 1 And Cells(I, t + 1) = 0 Then
                For e = t + 1 To 12
                  If Cells(I, e) = 1 Then
                    Cells(I, 13) = e - t - 1
     
                    Exit For
                    Else
                    If Cells(I, 12) = 0 Then Cells(I, 13) = 12 - t
     
                  End If
                Next e
              Exit For
            Else
              If Cells(I, 12) = 0 Then Cells(I, 13) = 12 ' cas ou il y a que des 0
              If Cells(I, 12) = 1 Then Cells(I, 13) = 0 ' cas ou il y a que des 1
     
            End If
          Next
       Next

  6. #6
    Membre habitué
    Homme Profil pro
    Consultant CRM
    Inscrit en
    Avril 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Consultant CRM

    Informations forums :
    Inscription : Avril 2014
    Messages : 9
    Par défaut
    En effet, les codes fonctionnent parfaitement sur l'exemple que j'ai donné ....
    Malheureusement, ils ne fonctionnent pas sur mon vrai jeu de données.

    Voici quelques caractéristiques :
    Il est composé de 43 colonnes et 536 lignes
    Les colonnes à "scanner" sont de la 29 à la 43
    La variable "nb_mois" se trouve en colonne 16

    Voilà les modifications que j'ai apporté au 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
     
    For I = 2 To 536
         For t = 29 To 42
              If Cells(I, t) = 1 And Cells(I, t + 1) = 0 Then
                   For e = t + 1 To 15 '42-29 = 15
                        If Cells(I, e) = 1 Then
                            Cells(I, 16) = e - t - 1
                            Exit For
                        Else
                            If Cells(I, 43) = 0 Then Cells(I, 16) = 43 - t
                        End If
                    Next e
                    Exit For
                Else
                     If Cells(I, 43) = 0 Then Cells(I, 16) = 12
                         If Cells(I, 43) = 1 Then Cells(I, 16) = 0
                     End If
                Next
     Next
    Au final, il me retourne que des 12 ou des valeurs manquantes : "".

    J'ai dû mal a comprendre pourquoi...

    Merci pour votre aide, c'est très sympa !

    Balkoo

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

Discussions similaires

  1. [VBA-E] cellule au format texte a la creation d'une feuille
    Par julio84 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/04/2006, 17h36
  2. [VBA-W] Cellules fusionnées
    Par TheEwook dans le forum VBA Word
    Réponses: 1
    Dernier message: 24/04/2006, 14h06
  3. [VBA]Test cellule vide base access
    Par ALAMARQU dans le forum VBA Access
    Réponses: 4
    Dernier message: 17/03/2006, 16h14
  4. [Excel-VBA]Coordonnées cellule
    Par lenouvo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2006, 16h56
  5. [VBA]comptage de lignes en fonction du contenu des cellules
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/12/2005, 11h38

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