Ne résume pas correctement la colonne entre toutes les feuilles dans Workbook

Backstory: Je retire les loggings téléphoniques d'un server PBX. Je suis en train d'ajuster et de calculer les appels interurbains. J'ai déjà filtré les numéros locaux et sans frais. J'ai divisé le classur en feuilles par nom du locataire. Ma macro ci-dessous est le formatting et le calcul de toutes les sums pour la durée et le coût total de cet appel.

Le problème: Ma macro ne sélectionne pas correctement toutes les lignes d'appels téléphoniques (je crois). Il est capable de calculer correctement la première feuille (je sélectionne toutes les lignes d'appel téléphonique), mais quand elle se déplace vers les autres, elle ne peut pas les résumer correctement.

Fiche d'erreur exacte:

Start Time Duration Calling Name Dialed Number Cost 6/1/2016 15:07 0:30:55 BLANK_I380 NUMBER $3.72 6/3/2016 12:26 0:05:40 BLANK_I380 NUMBER $0.72 6/6/2016 13:49 0:00:08 BLANK_I380 NUMBER $0.12 6/6/2016 13:50 0:00:08 BLANK_I380 NUMBER $0.12 6/6/2016 13:51 0:01:15 BLANK_I380 NUMBER $0.12 6/16/2016 8:29 0:01:42 BLANK_I380 NUMBER $0.24 Total Duration: 0:02:50 Total Cost: $0.72 

Première feuille correcte

 Start Time Duration Calling Name Dialed Number Cost 6/1/2016 9:20 0:00:09 BLANK Shining_I113 1313600000 $0.12 6/1/2016 9:25 0:00:22 BLANK Shining_I113 1248600000 $0.12 6/1/2016 9:26 0:00:54 BLANK Shining_I113 1248600000 $0.12 Total Duration: 0:01:25 Total Cost: $0.36 

Code

 Sub FormatEntry() Dim TotalCost As Double Dim TotalTime As Double For Each ws In ActiveWorkbook.Worksheets On Error Resume Next 'Will continue if an error results ws.Range("E:E").NumberFormat = "_-[$$-40B]* #,##0.00_ ;_-[$$-40B]* -#,##0.00 ;_-[$$-40B]* ""-""??_ ;_-@_ " ws.Range("A1").End(xlDown).Offset(1).Font.Bold = True ws.Range("A1").End(xlDown).Offset(1).Value = "Total Duration:" ws.Range("D1").End(xlDown).Offset(1).Font.Bold = True ws.Range("D1").End(xlDown).Offset(1).Value = "Total Cost:" ws.Range("E2").End(xlDown).Offset(1, 0).Value = _ WorksheetFunction.Sum(Range("E2:E" & Cells.SpecialCells(xlLastCell).Row)) ws.Range("B2").End(xlDown).Offset(1, 0).Value = _ Format(WorksheetFunction.Sum(Range("B2:B" & Cells.SpecialCells(xlLastCell).Row)), "hh:mm:ss") Next ws 

End Sub

Cela pourrait être dû à votre utilisation Range() dans les fonctions Sum – il ne fait pas reference à une feuille de calcul, donc peut causer des problèmes. Essaye ça:

 Sub FormatEntry() Dim TotalCost As Double Dim TotalTime As Double For Each ws In ActiveWorkbook.Worksheets On Error Resume Next 'Will continue if an error results With ws .Range("E:E").NumberFormat = "_-[$$-40B]* #,##0.00_ ;_-[$$-40B]* -#,##0.00 ;_-[$$-40B]* ""-""??_ ;_-@_ " .Range("A1").End(xlDown).Offset(1).Font.Bold = True .Range("A1").End(xlDown).Offset(1).Value = "Total Duration:" .Range("D1").End(xlDown).Offset(1).Font.Bold = True .Range("D1").End(xlDown).Offset(1).Value = "Total Cost:" .Range("E2").End(xlDown).Offset(1, 0).Value = _ WorksheetFunction.Sum(.Range("E2:E" & .Cells.SpecialCells(xlLastCell).Row)) .Range("B2").End(xlDown).Offset(1, 0).Value = _ Format(WorksheetFunction.Sum(.Range("B2:B" & .Cells.SpecialCells(xlLastCell).Row)), "hh:mm:ss") End With Next ws End Sub 

L'idée principale est que chaque fois que vous avez Range() , Cells() , Columns() , Rows() , etc., vous souhaitez indiquer explicitement la feuille de calcul que vous attendez que Range / Cells / Columns soit activée. Sinon, comme vous l'avez découvert, VBA peut renvoyer des résultats inattendus.