VBA Ligne "oubliée " après comparaison

Résolu
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 ?

57 réponses

Résumé de la discussion

Le souci porte sur le comptage du nombre d'opérations par mois selon le type d'OP, car la première ligne d'un nouveau mois n'est pas comptabilisée lorsque le mois change. Des solutions suggèrent d'utiliser des variables mois et année et de réinitialiser les compteurs dès que ces valeurs changent, puis d'incrémenter les totaux pour chaque ligne et de les enregistrer. En pratique, il faut éviter de comparer i et i-1 pour le mois/année et, à partir de Cells(i,20), mettre à jour mois et année, récupérer j, m, n, o, p et les réinitialiser quand nécessaire.

Bobot (l’IA à votre service)
  1. Oui, c'Est ca.
    Pas de soucis :D Bon wix à toi aussi!
    0
    1. Oh mon dieu je crois que ça marche ... Au bout du 55éme message ALLELUIA !
      En fait la variable année empechait de rentrer dans la boucle c'est ça ?

      Merci pour ta patience Hermios, tu as vraiment du mérite ;)

      Je te souhaite un bon we et à bientot sur le forum sûrement !
      0
      1. J'avais juste enlevé la condition :
          And VarAnnee <> Cells(i, 24).Value
        
        juste après mon for. Mais je vais les enlever partout dans ce cas
        0
        1. On a dit que tu supprimais complètement les années, puisqu'elles sont inutiles. Donc il faut tout enlever de ce qui les concerne. (En regardant ton code, je vois que tu n'en as enlevé aucune en fait)
          1
          1. Oui, et c'est faux (varAnnee...)
            0
            1. C'est ce que j'ai mis, le then est au dessous
              0
              1. If VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then
                0
                1. Avec plaisir :

                  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 k As Double
                  
                  Dim VarMois As Double
                  Dim VarAnnee As Double
                  j = 2
                  k = 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 Then  ' j'ai enlevé And VarAnnee <> Cells(i, 24).Value
                          
                          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
                          
                          Sheets("Feuil2").Cells(k, 7).Value = VarMois
                          k = k + 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)
                              Sheets("Feuil2").Cells(k, 7).Value = VarMois
                          k = k + 1
                  
                          End If
                      
                          If Cells(i, 5).Value = "COMMISSION" Then
                              n = n + 1
                              r = r + 1
                              Sheets("Feuil2").Cells(k, 7).Value = VarMois
                              k = k + 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
                              Sheets("Feuil2").Cells(k, 7).Value = VarMois
                              k = k + 1
                  
                          ElseIf Cells(i, 5).Value = "PRINCIPAL" And Cells(i, 2).Value = "RECEIPT" Then
                              p = p + 1
                              r = r + 1
                              Sheets("Feuil2").Cells(k, 7).Value = VarMois
                              k = k + 1
                  
                          End If
                  
                          
                  
                  
                  Next
                  
                  Sheets("Feuil2").Activate
                  
                  End Sub
                  
                  
                  
                  0
                  1. TU peux réafficher ton code final stp?
                    0
                    1. Toutes, chacune séparément, 1 par 1 ! Pas par mois :'(
                      0
                      1. "ca m'affiche toute les OP du coup"-> Et c'Est pas ce que tu veux?
                        0
                        1. Je sais pas si tu as lu mon message juste au dessus du coup vu qu'on s'est croisés :p

                          Je veux bien l'enlever mais ça m'affiche toute les OP du coup.

                          Je suis quelque peu dubitatif la.
                          0
                          1. Ah oui, tu as tout à fait raison! Bon, en fait, à moins que tu ne fasses pas un compte suivi (les mois ne se suivent pas, et donc tu pourrais passer de juillet 2012 à juillet 2013 directement), l'année n'a aucun intérêt. Je te conseille de la supprimer!
                            0
                            1. Ca y est j'ai une piste. La somme affichée est bien la somme des flux mais uniquement sur l'année 2012, il ne prend en compte la condition que quand l'année est différente du coup. Mais du coup si j'enlève la condition sur l'année, ca m'affiche la variable intermédiaire de toutes les lignes !! Je comprends plus, ma logique a atteint ses limites :/
                              0
                              1. Y a peut être un souci avec l'année, car sur la ligne "VarMois <> 0 And VarAnnee <> 0 And VarMois <> Cells(i, 23).Value And VarAnnee <> Cells(i, 24).Value Then" ca veut dire que c'est vérifié uniquement si on change d'année, ce qui n'est pas vrai pour les mois de la même année .

                                Sinon je ne vois vraiment pas la et ca m'ennuie :/
                                0
                                1. Regarde attentivement la ligne à partir de laquelle ca fait ca. C'est possible qu'elle soit mal écrite
                                  0
                                  1. Eh bien c'est en plein milieu de lignes du mois de décembre donc 12.
                                    0
                                    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
                                      1. 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
                                        • 1
                                        • 2
                                        • 3