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 les changements de valeur dans une colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut Compter les changements de valeur dans une colonne
    Bonjour, je suis débutant sous excel vba, et j'ai le problème suivant :

    j'ai une colonne constituée de 0 et de 1, par exemple :
    0
    0
    1
    0
    1
    1
    0

    J'aimerais compter le nombre de changements, et plus précisément :
    - a chaque fois qu'il y a un passage de 0 à 1, j'incrémente une variable VAR1
    - a chaque fois qu'il y a un passage de 1 à 0, j'incrémente une variable VAR2
    - lorsqu'il n'y a pas de changement, les variables ne bougent pas...

    seulement voila, je ne sais pas comment faire la comparaison entre une cellule et la suivante...

    je précise que le nombre de cellules de la colonne n'est pas fixe...

    merci d'avance!

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Colonne A
    la liste vont de la première ligne à la dernière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim var1 As Long, var2 As Long
    Dim i As Long
    For i = 2 To Range("A65536").End(xlUp).Row
    If Cells(i, 1) - Cells(i - 1, 1) > 0 Then
        var1 = var1 + 1
    ElseIf Cells(i, 1) - Cells(i - 1, 1) < 0 Then
        var2 = var2 + 1
    End If
    Next i
    msgbox "Nombre de passage de 0 à 1 : " & var1 & chr(13) & "Nombre de passage de 1 à 0 : " & var2
    End Sub
    Quelque info pour l'adapter :
    Pour modifier la colonne change le A de Range("A65536") et dans cells(i,1) remplace le 1 par ton numéro de colonne (colonne E donne 5)
    Pour modifier le num de ligne du début et de la fin des donné for i = lignedébut+1 to lignefin
    Range("A65536").End(xlUp).Row renvoie la dernière ligne remplie de la colonne A

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut
    hmmm...

    est ce qu'il faut que les valeurs contenues dans les cellules soient d'un certaine type (formule, valeur...) ?

    parce que la j'ai une formule dans chaque cellule, et j'obtiens l'erreur suivante :

    Erreur d'exécution '13':

    Incompatibilité de type

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    j'ai essayé la version précédente avec des formule et c'est bon.
    Par contre tu es sure de bien commencer ta liste de 0 et de 1 dès la première ligne et ce jusqu'à la dernière? sinon reporte toi a mon premier post.

    Au hasard je dirais que ce code devrait marcher (il ne test pas la première ligne qui contient souvent les titred de colonne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim var1 As Long, var2 As Long
    Dim i As Long
    For i = 3 To Range("A65536").End(xlUp).Row
    If Cells(i, 1) - Cells(i - 1, 1) > 0 Then
        var1 = var1 + 1
    ElseIf Cells(i, 1) - Cells(i - 1, 1) < 0 Then
        var2 = var2 + 1
    End If
    Next i
    msgbox "Nombre de passage de 0 à 1 : " & var1 & chr(13) & "Nombre de passage de 1 à 0 : " & var2
    End Sub
    Au moment ou ca plante regarde la valeur de i soit en mùettant le curseur dessus soit en affichant les variable local ou encore avec un espion tu as le choix

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 8
    Par défaut
    oups c'était de ma faute, il ya avait un souci non pas avec la premiere mais avec la dernirèe ligne (qui contenait du texte).

    maintenant tout est OK.

    merci beaucoup!!!

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    0 et 1 étant des valeurs de bits, on peut faire ainsi (et on soulage le processeur) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim titi As Long, var1 As Long, var2 As Long
    For i = premiereligne + 1 To Range("A65536").End(xlUp).Row
       titi = cells(i) Xor cells(i-1) ' on ne lit qu'une fois et on évite les conditions
       var1 = var1 + titi
      var2 = var2 + Abs(titi - 1)
    Next i

Discussions similaires

  1. [Toutes versions] Alterner les couleurs sur changement de valeur dans une colonne
    Par Invité dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/01/2015, 09h20
  2. Réponses: 13
    Dernier message: 21/02/2011, 20h33
  3. Réponses: 5
    Dernier message: 12/07/2010, 14h45
  4. Réponses: 6
    Dernier message: 04/11/2008, 22h35
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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