VBA - Aide sur syntaxe macro
Bonjour à tous,
J'essaye de rédiger une macro mais je ne trouve pas l'erreur.
Pourriez-vous jeter un coup d’œil ?
Je souhaite calculer le délai de traitement de ces dossiers, en ressortant ceux qui ont X jours en fonction du groupement.
Sur Excel, la formule suivante semble fonctionner :
=SI( A2 = "GROUPEMENT MACIF";SI( C2 - B2 > 60;""; C2 - B2);SI( A2 = "GROUPEMENT MAIF";SI(C2 - B2 > 200;" "; C2 - B2);SI( A2 = "GROUPEMENT MATMUT";SI(C2 - B2 > 100;""; C2 - B2);C2 - B2)))
Je souhaite maintenant écrire par macro cette formule dans la cellule D2 :
Sub Delai(ColB As String, ColC As String, ColA As String, LettreColAjout As String)
Range(LettreColAjout & "1").Value = "DELAI RE"
Range(LettreColAjout & "2").Value = "=SI(" & ColA & "2 = ""GROUPEMENT MACIF"";" & _
"SI(" & ColC & "2 - " & ColB & "2 > Objectifs!B2;"""";" & ColC & "2 - " & ColB & "2);" & _
"SI(" & ColA & "2 = ""GROUPEMENT MAIF"";" & _
"SI(" & ColC & "2 - " & ColB & "2 > Objectifs!C2;"""";" & ColC & "2 - " & ColB & "2);" & _
"SI(" & ColA & "2 = ""GROUPEMENT MATMUT"";" & _
"SI(" & ColC & "2 - " & ColB & "2 > Objectifs!D2;"""";" & ColC & "2 - " & ColB & "2);" & _
ColC & "2 - " & ColB & "2)" & _
")" & _
")"
End Sub
Sub test()
Delai "B", "C", "A", "D"
End Sub
Résultat : "Erreur définie par l'application ou par l'objet"
Quelqu'un pourrait me dire où se trouve mon / mes erreurs ?
Merci d'avance.
(Je souhaite juste écrire la formule dans une cellule et la dupliquer manuellement. J'avais essayé par macro de traiter toute la colonne,
mais au fur et à mesure des essais, le traitement des macro est passé de 1 secondes à 2h30... Je vous ajoute la macro initiale qui est trop lente :
Sub Delai(LettreColRefExp As String, LettreCollDateMission As String, LettreCollDateEnvoiTel As String, LettreCollNomGroupComp As String, NbJoursMax As Integer, LettreColAjout As String)
Dim i, n As Integer
Dim m, e As Date
Dim v As Double
Dim g As String
Range(LettreColAjout & "1").Value = "DELAI DOSSIER"
For i = 2 To Range(LettreColRefExp & Rows.Count).End(xlUp).Row
m = Range(LettreCollDateMission & i).Value
e = Range(LettreCollDateEnvoiTel & i).Value
v = DateDiff("d", m, e)
g = Range(LettreCollNomGroupComp & i).Value
n = NbJoursMax
If v < 0 Then
Range(LettreColAjout & i) = ""
Else
If v < n Then
Range(LettreColAjout & i) = v
Else
If g Like "*MACIF*" Then
Range(LettreColAjout & i) = ""
Else: Range(LettreColAjout & i) = v
End If
End If
End If
Next
End Sub
)
Bonjour,
Formule :
=SI(C2-B2>RECHERCHE(A2;{"GROUPEMENT MACIF";"GROUPEMENT MAIF";"GROUPEMENT MATMUT"};{60;200;100});"";C2-B2)
NB- Eviter d'incorporer des espaces dans les formules (hors valeurs chaînes en comprenant).
Macro :
Sub Délai()
Dim TD(), d, gr$, dm%, n%, i%
With ActiveSheet
n = .Cells(.Rows.Count, 1).End(xlUp).Row
ReDim TD(1 To n, 1 To 1): TD(1, 1) = "Délai"
For i = 2 To n
gr = Replace(.Cells(i, 1), "GROUPEMENT ", "")
Select Case gr
Case "MACIF": dm = 60
Case "MAIF": dm = 200
Case "MATMUT": dm = 100
Case Else: dm = 999
End Select
On Error Resume Next
d = DateDiff("d", .Cells(i, 2), .Cells(i, 3))
If Err.Number = 0 Then
If d <= dm Then TD(i, 1) = d
Else
Err.Clear
End If
On Error GoTo 0
Next i
.Range("D1").Resize(n).Value = TD
End With
End Sub
Cordialement.
Merci beaucoup pour ton aide et tes conseils, je tacherai d'éviter les espaces.
Bonne journée