VBA - problème de codage - erreur 400

Fermé
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020 - Modifié le 26 mars 2020 à 18:29
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020 - 27 mars 2020 à 11:25
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
A voir également:

7 réponses

JCB40 Messages postés 2878 Date d'inscription lundi 2 juillet 2018 Statut Membre Dernière intervention 14 avril 2024 461
26 mars 2020 à 18:36
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 : https://www.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



0
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020
26 mars 2020 à 18:42
je me doute, je n'ai pas réussi à le joindre tout à l'heure
le voici

https://www.cjoint.com/c/JCArPTRxCLW
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 27 mars 2020 à 10:29
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)
0
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020
27 mars 2020 à 10:27
merci impec tout s’exécute
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
27 mars 2020 à 10:31
Re,

meeme avec la remarque:
les lignes de ce genre:
nb = "=countif(J:J,< "" & div_N1 & "")"
0
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020
27 mars 2020 à 10:31
bien sur j'ai corrigé partout
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
27 mars 2020 à 10:34
Re,
Corriger quoi et ou?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020
27 mars 2020 à 10:37
tous les double ""
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
27 mars 2020 à 10:41
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
0
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020
27 mars 2020 à 10:49
ok alors il faut que j'écrive quoi pour compter le nombre de valeur de la colonne J inférieur à ma variable ?
0
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020
27 mars 2020 à 10:50
il faut que je le mette dans une cellule ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
27 mars 2020 à 10:56
Re,
Non, regardez encore une fois le post 3
0
flavinou7263 Messages postés 32 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 27 mars 2020 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
27 mars 2020 à 11:25
c'est bon j'ai tout corrigé et cela fonctionne mieux désormais
muchos gracias
0