tetchounie
XLDnaute Nouveau
Bonjour,
Je rencontre un souci sur VBA. La ligne en gras ressort avec un incompatibilité de type.
La dernière ligne non vide est 80666 d'où l'utilisation d'un variable Long. La partie du code où l'anomalie ressort sert à compter le nombre de valeurs différentes dans une colonne en fonction d'un certain nombre de critères.
Sub Calcul_Résultats_Hebdo()
Dim i As Integer
Dim j As Long
Dim DerniereLigneNonVide As Long
Dim Ticket As Long
Dim TempTicket As Long
Sheets("Report Hebdo-Mensuel").Select
Sheets("Report Hebdo-Mensuel").Range("C4").Value = "Hebdo"
Sheets("Report Hebdo-Mensuel").Range("D4").Value = "Semaine " & Sheets("Instructions").Range("F9").Value
DerniereLigneNonVide = Sheets("BDD").Range("C" & Rows.Count).End(xlUp).Row
For i = 6 To 100
If Sheets("Report Hebdo-Mensuel").Range("A" & i).Value <> 0 Then
Sheets("Report Hebdo-Mensuel").Range("F" & i).Value = Application.SumIfs(Sheets("BDD").Range("Z:Z"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("F5").Value)
Sheets("Report Hebdo-Mensuel").Range("G" & i).Value = Application.SumIfs(Sheets("BDD").Range("Z:Z"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("G5").Value)
Sheets("Report Hebdo-Mensuel").Range("P" & i).Value = Application.SumIfs(Sheets("BDD").Range("AZ:AZ"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("P5").Value)
Sheets("Report Hebdo-Mensuel").Range("Q" & i).Value = Application.SumIfs(Sheets("BDD").Range("AZ:AZ"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("Q5").Value)
Sheets("Report Hebdo-Mensuel").Range("Y" & i).Value = Application.SumIfs(Sheets("BDD").Range("X:X"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("Y5").Value)
Sheets("Report Hebdo-Mensuel").Range("Z" & i).Value = Application.SumIfs(Sheets("BDD").Range("X:X"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("Z5").Value)
Ticket = 0
For j = 2 To DerniereLigneNonVide
TempTicket = Application.CountIfs(Sheets("BDD").Range("D2" & j), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("K2:K" & j), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("F2:F" & i), Sheets("Report Hebdo-Mensuel").Range("AI5").Value, Sheets("BDD").Range("AP2:AP" & j), Sheets("BDD").Range("AP" & j).Value)
If TempTicket = 1 Then
Ticket = Ticket + 1
Else: Ticket = Ticket
End If
Next
Sheets("Report Hebdo-Mensuel").Range("AI" & i).Value = Ticket
End If
Next
End Sub
Je n'arrive pas à comprendre car pris individuellement chaque élément semble fonctionner. Je vous sollicite car je ne trouve vraiment pas la solution et cela fait plusieurs heures que je cherche.
J'ai testé la formule countifs avec des valeurs bien défini au cas où il s'agirait d'un problème de syntaxe de la formule mais elle ressort les bons résultats.
La variable TempTicket ne peut être supérieur à 20 donc j'ai également essayer en la passant en Integer à la place de Long mais cela ne change pas le problème.
Merci par avance pour votre aide.
Je rencontre un souci sur VBA. La ligne en gras ressort avec un incompatibilité de type.
La dernière ligne non vide est 80666 d'où l'utilisation d'un variable Long. La partie du code où l'anomalie ressort sert à compter le nombre de valeurs différentes dans une colonne en fonction d'un certain nombre de critères.
Sub Calcul_Résultats_Hebdo()
Dim i As Integer
Dim j As Long
Dim DerniereLigneNonVide As Long
Dim Ticket As Long
Dim TempTicket As Long
Sheets("Report Hebdo-Mensuel").Select
Sheets("Report Hebdo-Mensuel").Range("C4").Value = "Hebdo"
Sheets("Report Hebdo-Mensuel").Range("D4").Value = "Semaine " & Sheets("Instructions").Range("F9").Value
DerniereLigneNonVide = Sheets("BDD").Range("C" & Rows.Count).End(xlUp).Row
For i = 6 To 100
If Sheets("Report Hebdo-Mensuel").Range("A" & i).Value <> 0 Then
Sheets("Report Hebdo-Mensuel").Range("F" & i).Value = Application.SumIfs(Sheets("BDD").Range("Z:Z"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("F5").Value)
Sheets("Report Hebdo-Mensuel").Range("G" & i).Value = Application.SumIfs(Sheets("BDD").Range("Z:Z"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("G5").Value)
Sheets("Report Hebdo-Mensuel").Range("P" & i).Value = Application.SumIfs(Sheets("BDD").Range("AZ:AZ"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("P5").Value)
Sheets("Report Hebdo-Mensuel").Range("Q" & i).Value = Application.SumIfs(Sheets("BDD").Range("AZ:AZ"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("Q5").Value)
Sheets("Report Hebdo-Mensuel").Range("Y" & i).Value = Application.SumIfs(Sheets("BDD").Range("X:X"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("Y5").Value)
Sheets("Report Hebdo-Mensuel").Range("Z" & i).Value = Application.SumIfs(Sheets("BDD").Range("X:X"), Sheets("BDD").Range("AY:AY"), "<>INTERNET", Sheets("BDD").Range("K:K"), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("D"), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("F:F"), Sheets("Report Hebdo-Mensuel").Range("Z5").Value)
Ticket = 0
For j = 2 To DerniereLigneNonVide
TempTicket = Application.CountIfs(Sheets("BDD").Range("D2" & j), Sheets("Instructions").Range("F9").Value, Sheets("BDD").Range("K2:K" & j), Sheets("Report Hebdo-Mensuel").Range("A" & i).Value, Sheets("BDD").Range("F2:F" & i), Sheets("Report Hebdo-Mensuel").Range("AI5").Value, Sheets("BDD").Range("AP2:AP" & j), Sheets("BDD").Range("AP" & j).Value)
If TempTicket = 1 Then
Ticket = Ticket + 1
Else: Ticket = Ticket
End If
Next
Sheets("Report Hebdo-Mensuel").Range("AI" & i).Value = Ticket
End If
Next
End Sub
Je n'arrive pas à comprendre car pris individuellement chaque élément semble fonctionner. Je vous sollicite car je ne trouve vraiment pas la solution et cela fait plusieurs heures que je cherche.
J'ai testé la formule countifs avec des valeurs bien défini au cas où il s'agirait d'un problème de syntaxe de la formule mais elle ressort les bons résultats.
La variable TempTicket ne peut être supérieur à 20 donc j'ai également essayer en la passant en Integer à la place de Long mais cela ne change pas le problème.
Merci par avance pour votre aide.