VBA - problème de codage - erreur 400

Signaler
Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020
-
Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020
-
Hello tout le monde

je sollicite aujourd'hui votre car j'ai créer un code VBA où j'ai une erreur 400. J'ai localisé deux endroits possibles (4 mais trois sont identiques), en gras dans le code ci dessous, dans la macro mais ne sais pas ce qui cloche.

Merci d'avance pour votre aide

Sub pts_slalom()

Dim coef_K1H, coef_C1H, coef_K1D, coef_C1D, coef_C2H, coef_C2D, coef_C2M As Integer
Dim cat, lettre, course, div, phase As String
Dim nb, malus_div, malus_phase, malus_fin, tps5 As Integer
Dim div_N1, div_N2_PON12, div_N3_PON23_REG As Integer

'Type de course
course = InputBox("Selectionnez le type de course avec le numéro en début de ligne :" & Chr(10) & "1 - Course N1" & Chr(10) & "2 - Course N2 ou Play Off N1-2" & Chr(10) & "3 - Course N3 - Play Off N2-3 et Régionale", "Type de course")

'Division de course
div = InputBox("Selectionnez la division avec le numéro en début de ligne :" & Chr(10) & "1-Chpt France élite" & Chr(10) & "2-Chpt C/J/C2S" & Chr(10) & "3-Finale N1/2/3" & Chr(10) & "4-1/2 Finale N3" & Chr(10) & "5-Manche CDF N1/2/3" & Chr(10) & "6-PO N2/3" & Chr(10) & "7-PO N1/2" & Chr(10) & "8-Chpt France MAster" & Chr(10) & "9-Chpt Régional" & Chr(10) & "10-Sélectif régional", "Division")

'Phase de course
phase = InputBox("Selectionnez la phase de course avec le numéro en début de ligne :" & Chr(10) & "1-Q1 ou Q" & Chr(10) & "2-Q2" & Chr(10) & "3-1/2 Finale" & Chr(10) & "4-Finale", "Phase de course")

'Calcul du malus
Range("R8") = "Malus de division"
Range("R9") = "Malus de phase"

Select Case div
    Case Is = "1"
        malus_div = 0
        MsgBox "Utilisez le programme spécifique aux piges (non basé sur un temps scratch)"
        Exit Sub
    Case Is = "2"
        malus_div = 0
    Case Is = "3"
        malus_div = 0
    Case Is = "4"
        malus_div = 0
    Case Is = "5"
        malus_div = 5
    Case Is = "6"
        malus_div = 0
    Case Is = "7"
        malus_div = 0
    Case Is = "8"
        malus_div = 20
    Case Is = "9"
        malus_div = 40
    Case Is = "10"
        malus_div = 40
    Case Else
        MsgBox "Erreur"
        Exit Sub
End Select

Select Case phase
    Case Is = "1"
        malus_phase = 10
    Case Is = "2"
        MsgBox "Pas de calcul de point"
        Exit Sub
    Case Is = "3"
        malus_phase = 5
    Case Is = "4"
        malus_phase = 0
    Case Else
        MsgBox "Erreur"
        Exit Sub
End Select

Range("S8") = malus_div
Range("S9") = malus_phase

'Définition des coefficients inter catégorie
coef_K1H = 1
coef_K1D = 1.13
coef_C1H = 1.05
coef_C1D = 1.2
coef_C2H = 1.1
coef_C2D = 1.3
coef_C2M = 1.2

'Définition des colonnes
Range("K1") = "Temps scratch"
Range("L1") = "Temps fictif"
Range("M1") = "Ecart moyenne"
Range("N1") = "Points bruts"
Range("O1") = "Points finaux"
Range("P1") = "Points officiels"

'Calcul du temps scratch
For i = 2 To 154
If Range("A" & i) <> "" Then
    cat = Range("A" & i)
    Select Case cat
        Case Is = "K1H"
            Range("K" & i) = coef_K1H * Range("H" & i)
        Case Is = "K1D"
            Range("K" & i) = coef_K1D * Range("H" & i)
        Case Is = "C1H"
            Range("K" & i) = coef_C1H * Range("H" & i)
        Case Is = "C1D"
            Range("K" & i) = coef_C1D * Range("H" & i)
        Case Is = "C2H"
            Range("K" & i) = coef_C2H * Range("H" & i)
        Case Is = "C2D"
            Range("K" & i) = coef_C2D * Range("H" & i)
        Case Is = "C2M"
            Range("K" & i) = coef_C2M * Range("H" & i)
        Case Else
            Exit Sub
    End Select
End If
Next i

'Calcul du temps fictif
For i = 2 To 154
If Range("A" & i) <> "" Then
    cat = Range("A" & i)
    Select Case cat
        Case Is = "K1H"
            Range("L" & i) = (1000 * Range("K" & i)) / (Range("J" & i) + 1000)
        Case Is = "K1D"
            Range("L" & i) = (1000 * Range("K" & i)) / (Range("J" & i) + 1000)
        Case Is = "C1H"
            Range("L" & i) = (1000 * Range("K" & i)) / (Range("J" & i) + 1000)
        Case Is = "C1D"
            Range("L" & i) = (1000 * Range("K" & i)) / (Range("J" & i) + 1000)
        Case Is = "C2H"
            Range("L" & i) = (1000 * Range("K" & i)) / (Range("J" & i) + 1000)
        Case Is = "C2D"
            Range("L" & i) = (1000 * Range("K" & i)) / (Range("J" & i) + 1000)
        Case Is = "C2M"
            Range("L" & i) = (1000 * Range("K" & i)) / (Range("J" & i) + 1000)
        Case Else
            Exit Sub
    End Select
End If
Next i

'limite pour temps de base
div_N1 = 100
div_N2_PON12 = 200
div_N3_PON23_REG = 500

Range("R1") = "Tps moyen 10"
Range("R2") = "Tps moyen 8 - TB"
Range("R10") = "Pena"

Select Case course
        Case Is = "1"
            nb = "=countif(J:J,< "" & div_N1 & "")"
            If nb >= 10 Then
                    Range("S1").Formula = "=average(L2:L11)"
                    For i = 2 To 11
                        Range("M" & i).Formula = Range("S1") - Range("L" & i)
                    Next i
                    Range("T1").Formula = "=max(M2:M11)"
                    Range("T2").Formula = "=min(M2:M11)"
                    Range("S2").Formula = "=sumproduct((M2:M11<T1)*(M2:M11>T2)*(L2:L11))/8"
                    For i = 2 To 154
                        Range("N" & i).Formula = 1000 * (Range("K" & i) - Range("S2")) / Range("S2")
                    Next i
                Else
                    <bold>Select Case nb
                        Case Is = "9"
                            Range("S10") = 20
                        Case Is = "8"
                            Range("S10") = 40
                        Case Is = "7"
                            Range("S10") = 60
                        Case Is = "6"
                            Range("S10") = 80
                        Case Is <= "5"
                            MsgBox "Erreur - pas assez de bateaux"
                            Exit Sub
                        Case Else
                            MsgBox "Erreur"
                            Exit Sub
                    End Select</bold>
            End If
        Case Is = "2"
            nb = "=countif(J:J,< ""& div_N2_PON12 &"")"
            If nb >= 10 Then
                    Range("S1").Formula = "=average(L2:L11)"
                    For i = 2 To 11
                        Range("M" & i).Formula = Range("S1") - Range("L" & i)
                    Next i
                    Range("T1").Formula = "=max(M2:M11)"
                    Range("T2").Formula = "=min(M2:M11)"
                    Range("S2").Formula = "=sumproduct((M2:M11<T1)*(M2:M11>T2)*(L2:L11))/8"
                    For i = 2 To 154
                        Range("N" & i).Formula = 1000 * (Range("K" & i) - Range("S2")) / Range("S2")
                    Next i
                Else
                   <bold> Select Case nb
                        Case Is = "9"
                            Range("S10") = 20
                        Case Is = "8"
                            Range("S10") = 40
                        Case Is = "7"
                            Range("S10") = 60
                        Case Is = "6"
                            Range("S10") = 80
                        Case Is <= "5"
                            MsgBox "Erreur - pas assez de bateaux"
                            Exit Sub
                        Case Else
                            MsgBox "Erreur"
                            Exit Sub
                    End Select</bold>
            End If
        Case Is = "3"
            nb = "=countif(J:J,< ""& div_N3_PON23_REG &"")"
            If nb >= 10 Then
                    Range("S1").Formula = "=average(L2:L11)"
                    For i = 2 To 11
                        Range("M" & i).Formula = Range("S1") - Range("L" & i)
                    Next i
                    Range("T1").Formula = "=max(M2:M11)"
                    Range("T2").Formula = "=min(M2:M11)"
                    Range("S2").Formula = "=sumproduct((M2:M11<T1)*(M2:M11>T2)*(L2:L11))/8"
                    For i = 2 To 154
                        Range("N" & i).Formula = 1000 * (Range("K" & i) - Range("S2")) / Range("S2")
                    Next i
                Else
                    Select Case nb
                        <bold>Case Is = "9"
                            Range("S10") = 20
                        Case Is = "8"
                            Range("S10") = 40
                        Case Is = "7"
                            Range("S10") = 60
                        Case Is = "6"
                            Range("S10") = 80
                        Case Is <= "5"
                            MsgBox "Erreur - pas assez de bateaux"
                            Exit Sub
                        Case Else
                            MsgBox "Erreur"
                            Exit Sub
                    End Select</bold>
            End If
        Case Else
            Exit Sub
End Select

'Pena temps ref
Range("R11") = "Moyenne 5 tps"
Range("R12") = "Pena tps"

Range("S11").Formula = "=average(K2:K6)"
tps5 = Range("S11").Value

Select Case tps5
    Case Is < "64"
        Range("S12") = 90
    Case Is <= "83"
        Range("S12").Formula = "=power(max(0,abs(95-S11)-10),2)/5"
    Case Else
        Range("S12") = 0
End Select

'coefficent correcteur
Range("R4") = "PN"
Range("R5") = "PC"
Range("R6") = "C"

Range("S4").Formula = "=sum(J2:J154)"
Range("S5").Formula = "=sum(N2:N1000)"
Range("S6").Formula = "=S4/S5"

'calcul points finaux = points bruts X C + les malus
For i = 2 To 154
    <bold>Range("T3").Formula = "=left(B"" & i & "",1)"
    lettre = Range("T3").Value
    Select Case lettre
        Case Is = "A"
            malus_fin = 0
        Case Is = "B"
            malus_fin = 5
        Case Else
            malus_fin = 0
    End Select</bold>
    Range("O" & i) = Range("N" & i) * Range("S6") + Range("S8") + Range("S9") + Range("S10") + Range("S12") + malus_fin
    Range("P" & i) = Range("O" & i)
Next i

End Sub

7 réponses

Messages postés
1859
Date d'inscription
lundi 2 juillet 2018
Statut
Membre
Dernière intervention
9 avril 2020
280
Bonjour,
Un exemple de votre fichier avec explications serait le bienvenu.
Pour transmettre un fichier,
Veillez à ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com

Allez sur ce site : http://cjoint.com
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
Cordialement



Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020

je me doute, je n'ai pas réussi à le joindre tout à l'heure
le voici

https://www.cjoint.com/c/JCArPTRxCLW
Messages postés
15158
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
1 252
Bonjour a vous deux,

flavinou7263
Hier, je décortiquais votre code quand JCB40 vous a demande votre fichier. En passant, pas simple a utiliser pour avoir une erreur.
Plusieurs choses:
_
Range("T3").Formula = "=left(B"" & i & "",1)"
, il y a des doubles cote en trop qui provoque l'erreur
Range("T3").Formula = "=left(B" & i & ",1)"

_ les lignes de ce genre:
nb = "=countif(J:J,< "" & div_N1 & "")"
, me surprendrais enormement si vous avez un nombre en resultat, meme en corrigeant les erreurs de double cote (
 "=countif(J:J,< " & div_N1 & ")"
)
ceci devrait aller mieux:
nb = Application.CountIf(Columns("J"), "<" & div_N1)
Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020

merci impec tout s’exécute
Messages postés
15158
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
1 252
Re,

meeme avec la remarque:
les lignes de ce genre:
nb = "=countif(J:J,< "" & div_N1 & "")"
Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020

bien sur j'ai corrigé partout
Messages postés
15158
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
1 252
Re,
Corriger quoi et ou?
Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020

tous les double ""
Messages postés
15158
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
1 252
Re,
Tout a fait Thierry, mais les lignes de nb=("=countif…. sont aussi a corriger car vous n'aurez jamais un nombre.
dessous une de ces lignes, mettez ceci:
Debug.print nb , faites afficher la fenetre d'execution et lancer votre procedure
Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020

ok alors il faut que j'écrive quoi pour compter le nombre de valeur de la colonne J inférieur à ma variable ?
Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020

il faut que je le mette dans une cellule ?
Messages postés
15158
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
9 avril 2020
1 252
Re,
Non, regardez encore une fois le post 3
Messages postés
32
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
27 mars 2020
>
Messages postés
15158
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
9 avril 2020

c'est bon j'ai tout corrigé et cela fonctionne mieux désormais
muchos gracias