VBA Ligne "oubliée " après comparaison
Résolu
klissou69
Messages postés
61
Statut
Membre
-
Hermios Messages postés 272 Statut Membre -
Hermios Messages postés 272 Statut Membre -
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:
Quequ'un aurait il une idée svp ?
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:
- VBA Ligne "oubliée " après comparaison
- Partager photos en ligne - Guide
- Mètre en ligne - Guide
- Formulaire en ligne de meta - Guide
- Apparaitre hors ligne instagram - Guide
- Aller à la ligne excel - Guide
57 réponses
Regarde attentivement la ligne à partir de laquelle ca fait ca. C'est possible qu'elle soit mal écrite
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 :/
Sinon je ne vois vraiment pas la et ca m'ennuie :/
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 :/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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!
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.
Je veux bien l'enlever mais ça m'affiche toute les OP du coup.
Je suis quelque peu dubitatif la.
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
J'avais juste enlevé la condition :
And VarAnnee <> Cells(i, 24).Valuejuste après mon for. Mais je vais les enlever partout dans ce cas