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 -
Hermios Messages postés 260 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- VBA Ligne "oubliée " après comparaison
- Partager photos en ligne - Guide
- Mètre en ligne - Guide
- Aller à la ligne excel - Guide
- Apparaitre hors ligne instagram - Guide
- Formulaire en ligne de meta - Guide
57 réponses
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
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 ?
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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
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 :/
Maintenant cela ne m'affiche plus rien, comme si ça ne rentrait dans une boucle ou qu'aucune variable n'était incrémentée :/
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
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
j'ai copié la mauvaise version --'
Voilà ce que j'ai comme code pour l'instant et qui n'affiche rien :
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
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
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
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
Du coup je vais essayer de regarder d'un peu plus près mes boucles
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
" 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
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)
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)
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.
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
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.
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.
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.