VBA Ligne "oubliée " après comparaison

Résolu
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   -  
Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je veux compter le nombre d'opérations, par mois selon le type d'OP.


Malheureusement, quand je change de mois, la 1ère ligne n'est pas comptabilisée car elle n'est pas égale à celle d'avant.
Exemple : le 01/09/2013 ne sera pas comptée car différente de la ligne d'au dessus du 31/08/2013.

Ci-joint mon code qui fonctionne mais qui "oublie" chaque 1ere ligne de mois:
Sub extractBOT()

Sheets("Feuil1").Activate
Dim Mois As Byte
Dim m As Double
Dim n As Double
Dim o As Double
Dim p As Double
Dim j As Double
j = 2

m = 0
n = 0
o = 0
p = 0
r = 0




nbcolonne1 = Sheets("Feuil1").UsedRange.Columns.Count 'compte le nombre de colonnes non vides sur la feuille 1
nbligne1 = Sheets("Feuil1").UsedRange.Rows.Count 'compte le nombre de lignes non vides sur la feuille 1

For i = 2 To nbligne1

Mois = Month(CDate(Cells(i, 20)))
Cells(i, 23).Value = Mois

Annee = Year(CDate(Cells(i, 20)))
Cells(i, 24).Value = Annee
Next

For i = 2 To nbligne1

    If Cells(i, 23).Value = Cells(i - 1, 23) And Cells(i, 24).Value = Cells(i - 1, 24) Then
    
        If Cells(i, 5).Value = "COMMISSION" Then
                n = n + 1
                r = r + 1
                
        'ElseIf Cells(i, 5).Value = "COMMISSION" And Cells(i, 2).Value = "RECEIPT" Then
               'm = m + 1
               'r = r + 1
           
        ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "PAYMENT" Then
            
                o = o + 1
                r = r + 1
        ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "RECEIPT" Then
                p = p + 1
                r = r + 1
            
        End If
        
    Else
            Sheets("Feuil2").Cells(j, 1).Value = n
            Sheets("Feuil2").Cells(j, 2).Value = m
            Sheets("Feuil2").Cells(j, 3).Value = o
            Sheets("Feuil2").Cells(j, 4).Value = p
            Sheets("Feuil2").Cells(j, 5).Value = r
            j = j + 1
            m = 0
            n = 0
            o = 0
            p = 0
    End If
    
Next

Sheets("Feuil2").Activate
End Sub




Quequ'un aurait il une idée svp ?




A voir également:

57 réponses

Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   1
 
M'est avis que tu as pas mis ce qu'il fallait là où il fallait.
TU peux remontrer ton code stp?
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
c'est celui juste au dessus :



Sub extractBOT()

Sheets("Feuil1").Activate
Dim Mois As Byte

Dim m As Double
Dim n As Double
Dim o As Double
Dim p As Double
Dim j As Double

Dim VarMois As Double
Dim VarAnnee As Double
j = 2

m = 0
n = 0
o = 0
p = 0
r = 0

VarMois = 0
VarAnnee = 0

nbcolonne1 = Sheets("Feuil1").UsedRange.Columns.Count 'compte le nombre de colonnes non vides sur la feuille 1
nbligne1 = Sheets("Feuil1").UsedRange.Rows.Count 'compte le nombre de lignes non vides sur la feuille 1

For i = 2 To nbligne1

Mois = Month(CDate(Cells(i, 20)))
Cells(i, 23).Value = Mois

Annee = Year(CDate(Cells(i, 20)))
Cells(i, 24).Value = Annee
Next

For i = 2 To nbligne1
                    If VarMois <> 0 And VarAnnee <> 0 And VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
                         Sheets("Feuil2").Cells(j, 1).Value = n
                         Sheets("Feuil2").Cells(j, 2).Value = m
                         Sheets("Feuil2").Cells(j, 3).Value = o
                         Sheets("Feuil2").Cells(j, 4).Value = p
                         Sheets("Feuil2").Cells(j, 5).Value = r
                     End If
     
            If VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
                m = 0
                n = 0
                o = 0
                p = 0
                r = 0
    
                If Cells(i, 5).Value = "COMMISSION" Then
                n = n + 1
                r = r + 1
                
                'ElseIf Cells(i, 5).Value = "COMMISSION" And Cells(i, 2).Value = "RECEIPT" Then
                'm = m + 1
                'r = r + 1
            
                ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "PAYMENT" Then
                o = o + 1
                r = r + 1
                
                ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "RECEIPT" Then
                p = p + 1
                r = r + 1
            
                End If
    
    
            Else
                
                j = j + 1
                m = 0
                n = 0
                o = 0
                p = 0
            
            End If
   
    
Next

Sheets("Feuil2").Activate
End Sub





0
Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   1
 
Je confirme, tu as pas mis ce qu'il faut où il faut.
Voici le code corrigé:
Sub extractBOT()

Sheets("Feuil1").Activate
Dim Mois As Byte

Dim m As Double
Dim n As Double
Dim o As Double
Dim p As Double
Dim j As Double

Dim VarMois As Double
Dim VarAnnee As Double
j = 2

m = 0
n = 0
o = 0
p = 0
r = 0

VarMois = 0
VarAnnee = 0

nbcolonne1 = Sheets("Feuil1").UsedRange.Columns.Count 'compte le nombre de colonnes non vides sur la feuille 1
nbligne1 = Sheets("Feuil1").UsedRange.Rows.Count 'compte le nombre de lignes non vides sur la feuille 1

For i = 2 To nbligne1

Mois = Month(CDate(Cells(i, 20)))
Cells(i, 23).Value = Mois

Annee = Year(CDate(Cells(i, 20)))
Cells(i, 24).Value = Annee
Next

For i = 2 To nbligne1
If VarMois <> 0 And VarAnnee <> 0 And VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
Sheets("Feuil2").Cells(j, 1).Value = n
Sheets("Feuil2").Cells(j, 2).Value = m
Sheets("Feuil2").Cells(j, 3).Value = o
Sheets("Feuil2").Cells(j, 4).Value = p
Sheets("Feuil2").Cells(j, 5).Value = r
End If

If VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
m = 0
n = 0
o = 0
p = 0
r = 0
End If
If Cells(i, 5).Value = "COMMISSION" Then
n = n + 1
r = r + 1

'ElseIf Cells(i, 5).Value = "COMMISSION" And Cells(i, 2).Value = "RECEIPT" Then
'm = m + 1
'r = r + 1

ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "PAYMENT" Then
o = o + 1
r = r + 1

ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "RECEIPT" Then
p = p + 1
r = r + 1

End If


Else

j = j + 1
m = 0
n = 0
o = 0
p = 0

End If


Next

Sheets("Feuil2").Activate
End Sub

Question : C'est quoi aprÈs ton "Else"? Pourquoi tu remets tout à 0 sauf le j que tu incrémentes ?
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
Ca doit être une erreur. Je les enlève si j'ai bien compris
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
C'etait censé remettre à 0 les variables et incrémenter la ligne où j'écris mon résultat.
Mais du coup j'ai plus rien qui s'affiche maintenant. J'ai mon mois et année qui s'inscrivent dans la feuille 1 mais feuille 2 j'ai aucun résultat qui s'affiche.

Du coup j'ai enlevé la remise à 0 après le Else et le Else lui même.


Sub extractBOT()

Sheets("Feuil1").Activate
Dim Mois As Byte

Dim m As Double
Dim n As Double
Dim o As Double
Dim p As Double
Dim j As Double

Dim VarMois As Double
Dim VarAnnee As Double
j = 2

m = 0
n = 0
o = 0
p = 0
r = 0

VarMois = 0
VarAnnee = 0

nbcolonne1 = Sheets("Feuil1").UsedRange.Columns.Count 'compte le nombre de colonnes non vides sur la feuille 1
nbligne1 = Sheets("Feuil1").UsedRange.Rows.Count 'compte le nombre de lignes non vides sur la feuille 1

For i = 2 To nbligne1

Mois = Month(CDate(Cells(i, 20)))
Cells(i, 23).Value = Mois

Annee = Year(CDate(Cells(i, 20)))
Cells(i, 24).Value = Annee
Next

For i = 2 To nbligne1
                    If VarMois <> 0 And VarAnnee <> 0 And VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
                         Sheets("Feuil2").Cells(j, 1).Value = n
                         Sheets("Feuil2").Cells(j, 2).Value = m
                         Sheets("Feuil2").Cells(j, 3).Value = o
                         Sheets("Feuil2").Cells(j, 4).Value = p
                         Sheets("Feuil2").Cells(j, 5).Value = r
                     End If
     
            If VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
                m = 0
                n = 0
                o = 0
                p = 0
                r = 0
    
                If Cells(i, 5).Value = "COMMISSION" Then
                n = n + 1
                r = r + 1
                
                'ElseIf Cells(i, 5).Value = "COMMISSION" And Cells(i, 2).Value = "RECEIPT" Then
                'm = m + 1
                'r = r + 1
            
                ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "PAYMENT" Then
                o = o + 1
                r = r + 1
                
                ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "RECEIPT" Then
                p = p + 1
                r = r + 1
            
                End If
    
                
                j = j + 1
          
            
            End If
   
    
Next

Sheets("Feuil2").Activate
End Sub





0
Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   1
 
Ah ben ca.. c'Est à toi de répondre, suivant le comportement que tu souhaites obtenir...
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
Comme je te l'ai dit hier, je souhaite remettre à 0 en changeant de mois (une fois que j'ai compté tous les flux du mois d'avant ) . Donc je pense que ta remarque était cohérente et qu'ils étaient en trop.

Maintenant cela ne m'affiche plus rien, comme si ça ne rentrait dans une boucle ou qu'aucune variable n'était incrémentée :/
0
Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   1
 
Normal, tu as de nouveau enlevé le End If aprÈs :
If VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
m = 0
n = 0
o = 0
p = 0
r = 0

Tu dois le laisser juste après ca, et pas à la fin
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai copié la mauvaise version --'

Voilà ce que j'ai comme code pour l'instant et qui n'affiche rien :


Sub extractBOT()

Sheets("Feuil1").Activate
Dim Mois As Byte

Dim m As Double
Dim n As Double
Dim o As Double
Dim p As Double
Dim j As Double

Dim VarMois As Double
Dim VarAnnee As Double
j = 2

m = 0
n = 0
o = 0
p = 0
r = 0

VarMois = 0
VarAnnee = 0

nbcolonne1 = Sheets("Feuil1").UsedRange.Columns.Count 'compte le nombre de colonnes non vides sur la feuille 1
nbligne1 = Sheets("Feuil1").UsedRange.Rows.Count 'compte le nombre de lignes non vides sur la feuille 1

For i = 2 To nbligne1

    Mois = Month(CDate(Cells(i, 20)))
    Cells(i, 23).Value = Mois
    
    Annee = Year(CDate(Cells(i, 20)))
    Cells(i, 24).Value = Annee
Next

    For i = 2 To nbligne1
        If VarMois <> 0 And VarAnnee <> 0 And VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
        
        Sheets("Feuil2").Cells(j, 1).Value = n
        Sheets("Feuil2").Cells(j, 2).Value = m
        Sheets("Feuil2").Cells(j, 3).Value = o
        Sheets("Feuil2").Cells(j, 4).Value = p
        
        Sheets("Feuil2").Cells(j, 5).Value = r
        End If

        If VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
            m = 0
            n = 0
            o = 0
            p = 0
            r = 0
        End If
    
        If Cells(i, 5).Value = "COMMISSION" Then
            n = n + 1
            r = r + 1

        'ElseIf Cells(i, 5).Value = "COMMISSION" And Cells(i, 2).Value = "RECEIPT" Then
            'm = m + 1
            'r = r + 1

        ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "PAYMENT" Then
            o = o + 1
            r = r + 1

        ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "RECEIPT" Then
            p = p + 1
            r = r + 1

        End If

        j = j + 1


Next

Sheets("Feuil2").Activate

End Sub



0
Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   1
 
Tu as oublié de définir varMois et VarAnnée:
If VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
m = 0
n = 0
o = 0
p = 0
r = 0
VarMois = Cells(i, 23)
VarAnnee = Cells(i, 24)
End If
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
Je me disais bien qu'on en faisait pas grand chose de ces 2 variables ^^
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
Bon au moins cela m'affiche quelque chose. J'ai une somme (fausse ) cumulée de chaque opération qui apparait à la millième ligne .

Du coup je vais essayer de regarder d'un peu plus près mes boucles
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai un peu de mal à comprendre les conditions :
" If VarMois <> 0 And VarAnnee <> 0 And VarMois <> Cells(i - 1, 23).Value And VarAnnee <> Cells(i, 24).Value Then"
et " VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then"

Sachant que je veux compter le nombre d'opé par mois ( donc tant que la valeur de cells(i,23) ne bouge pas, on incrémente. Dès que ca bouge, on copie colle le total dans la ligne j, on initialise nos variables, et on recommence le décompte sur le mois d'après
0
Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   1
 
varMois et varAnnée sont des variables globales.
Elles correspondent au mois que tu es en train d'analyser.

Le premier if :
Si tes valeurs ne sont pas nulles (donc tu as déjà analyser au moins un mois) et ne sont pas égales à la cellule courante (donc tu as changé de mois),
alors tu sauvegardes les données calculées (donc du mois précédent)

Second if :
Si tes valeurs ne sont pas égales à celles de la cellule courante (donc tu es dans un nouveau mois)
tu réinitialises toutes tes valeurs.

Je viens de voir pourquoi tu affiches à la 1000eme ligne :
ton j=j+1 doit être dans le premier if, à la fin de celui-ci (juste avant le end if)
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
oui je l'ai modifié donc c'est bon c'est affiché en ligne 2 maintenant. Mais je n'ai que la somme totale qui s'affiche, pourquoi n'ai je pas les sommes intérmediaires ( par mois ) dont j'ai besoin ?

Je devrais avoir une écriture des résultats du mois à chaque changement de mois.

Sub extractBOT()

Sheets("Feuil1").Activate
Dim Mois As Byte

Dim m As Double
Dim n As Double
Dim o As Double
Dim p As Double
Dim j As Double

Dim VarMois As Double
Dim VarAnnee As Double
j = 2

m = 0
n = 0
o = 0
p = 0
r = 0

VarMois = 0
VarAnnee = 0

nbcolonne1 = Sheets("Feuil1").UsedRange.Columns.Count 'compte le nombre de colonnes non vides sur la feuille 1
nbligne1 = Sheets("Feuil1").UsedRange.Rows.Count 'compte le nombre de lignes non vides sur la feuille 1

For i = 2 To nbligne1

    Mois = Month(CDate(Cells(i, 20)))
    Cells(i, 23).Value = Mois
    
    Annee = Year(CDate(Cells(i, 20)))
    Cells(i, 24).Value = Annee
Next

    For i = 2 To nbligne1
        If VarMois <> 0 And VarAnnee <> 0 And VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
        
        Sheets("Feuil2").Cells(j, 1).Value = n
        Sheets("Feuil2").Cells(j, 2).Value = m
        Sheets("Feuil2").Cells(j, 3).Value = o
        Sheets("Feuil2").Cells(j, 4).Value = p
        
        Sheets("Feuil2").Cells(j, 5).Value = r
        
        j = j + 1
        
        End If

        If VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
            m = 0
            n = 0
            o = 0
            p = 0
            
            VarMois = Cells(i, 23)
            VarAnnee = Cells(i, 24)

        End If
    
        If Cells(i, 5).Value = "COMMISSION" Then
            n = n + 1
            r = r + 1

        'ElseIf Cells(i, 5).Value = "COMMISSION" And Cells(i, 2).Value = "RECEIPT" Then
            'm = m + 1
            'r = r + 1

        ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "PAYMENT" Then
            o = o + 1
            r = r + 1

        ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "RECEIPT" Then
            p = p + 1
            r = r + 1

        End If

        


Next

Sheets("Feuil2").Activate

End Sub


0
Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   1
 
C'est étrange en effet.
Ca veut surement dire que dans ta phrase
If VarMois <> 0 And VarAnnee <> 0 And VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then

toutes les conditions ne sont jamais respectées ensemble
Essaie, pour chaque boucle, d'afficher la valeur de VarMois dans une cellule quelconque
Je suis prêt à parier que la valeur reste à 0.
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
VarMois prend la valeur 7 puis en milieu de tableau elle passe à 1 ... qui ne correspond pas du tout au moins de la ligne à ce moment la.
0
Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   1
 
Ok,
Tu as combien de mois, et à combien ca commence (Jusqu'à combien)?
0
klissou69 Messages postés 60 Date d'inscription   Statut Membre Dernière intervention  
 
Ca part du mois de juillet 2012 jusqu'au mois de juillet 2013 ( 13 mois ) avec 4000 lignes, sachant qu'il y en a environ 1200 qui m'intéressent C'est à dire dont la cellule (i,5 ) prend la valeur commission, principale etc...
0
Hermios Messages postés 260 Date d'inscription   Statut Membre Dernière intervention   1
 
Bon, c'Est normal que ca repasse à 1, puisque tu arrives au mois de janvier.
QUelle valeur devrait prendre la variable à ce moment de l'année?
0