Erreur incompatibilité de type
Fermé
amiro2017
Messages postés
194
Date d'inscription
mardi 28 février 2017
Statut
Membre
Dernière intervention
31 août 2017
-
16 mars 2017 à 23:08
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 18 mars 2017 à 13:38
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 - 18 mars 2017 à 13:38
A voir également:
- Erreur incompatibilité de type
- Incompatibilité de type vba ✓ - Forum Programmation
- Erreur 1004 vba ✓ - Forum VB / VBA
- Erreur 1000 france tv - Forum MacOS
- Youtube une erreur s'est produite ✓ - Forum YouTube
- Iptv erreur de lecture - Forum Vidéo/TV
6 réponses
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
16 mars 2017 à 23:44
16 mars 2017 à 23:44
Bonsoir Amiro, bonsoir le forum,
Plusieurs problèmes dans ton bout de code :
• La variable dernier n'est ni définie ni initialisée. Donc elle vaut 0 et une boucle de 2 à 0 ne s'effectue qu'avec un pas (Step) négatif. Mais j'imagine que dans ton vrai code cela est fait...
• tu redimensionnes deux fois le tableau e (pas grave non plus, mais une fois de trop)
• tu attribues aux variables de e et e1 le type Double. Il y aura donc plantage si tu tombes sur du texte ou sur une valeur non compatible avec ce type. C'est peut-être ce qui se passe dans la ligne qui plante.
Tu pourrais contourner avec un code du type :
Plusieurs problèmes dans ton bout de code :
• La variable dernier n'est ni définie ni initialisée. Donc elle vaut 0 et une boucle de 2 à 0 ne s'effectue qu'avec un pas (Step) négatif. Mais j'imagine que dans ton vrai code cela est fait...
• tu redimensionnes deux fois le tableau e (pas grave non plus, mais une fois de trop)
• tu attribues aux variables de e et e1 le type Double. Il y aura donc plantage si tu tombes sur du texte ou sur une valeur non compatible avec ce type. C'est peut-être ce qui se passe dans la ligne qui plante.
Tu pourrais contourner avec un code du type :
Dim dernier As Integer
Dim e(2 To dernier, 1 To 5) As Double
Dim e1(2 To dernier, 4 To 5) As Double
dernier = 10 'à adapter à ton cas
For J = 2 To dernier
On Error Resume Next
e(J, 1) = CDbl(Sheets("Risque de taux d'intérêt").Range("D" & J).Value)
If Err <> 0 Then
Err.Clear
e(J, 1) = 0 'à adapter
End If
e(J, 2) = CDbl(Sheets("Risque de taux d'intérêt").Range("E" & J).Value)
If Err <> 0 Then
Err.Clear
e(J, 2) = 0 'à adapter
End If
e(J, 3) = CDbl(Sheets("Risque de taux d'intérêt").Range("F" & J).Value)
If Err <> 0 Then
Err.Clear
e(J, 2) = 0 'à adapter
End If
e1(J, 4) = CDbl(Sheets("Risque de taux d'intérêt").Range("K" & J).Value) 'l'erreur ici
If Err <> 0 Then
Err.Clear
e1(J, 4) = 0 'à adapter
End If
e1(J, 5) = CDbl(Sheets("Risque de taux d'intérêt").Range("L" & J).Value)
If Err <> 0 Then
Err.Clear
e1(J, 5) = 0 'à adapter
End If
On Error GoTo 0
Next J
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
17 mars 2017 à 11:45
17 mars 2017 à 11:45
Bonjour Amiro,
Désolé Amiro, tu ne précise pas quelle est la ligne qui plante et sans le fichier je serais incapable de t'aider...
J'ai juste repéré une erreur ici (mais je ne pense pas que ton problème sois là). Remplace la partie :
par :
Désolé Amiro, tu ne précise pas quelle est la ligne qui plante et sans le fichier je serais incapable de t'aider...
J'ai juste repéré une erreur ici (mais je ne pense pas que ton problème sois là). Remplace la partie :
e(j, 3) = CDbl(Sheets("Risque de taux d'intérêt").Range("F" & j).Value)
If Err <> 0 Then
Err.Clear
e(j, 2) = 0 'à adapter
End If
par :
e(j, 3) = CDbl(Sheets("Risque de taux d'intérêt").Range("F" & j).Value)
If Err <> 0 Then
Err.Clear
e(j, 3) = 0 'à adapter
End If
amiro2017
Messages postés
194
Date d'inscription
mardi 28 février 2017
Statut
Membre
Dernière intervention
31 août 2017
1
17 mars 2017 à 11:52
17 mars 2017 à 11:52
bonjour ThauTheme,
comment je peux vous importer le fichier?
comment je peux vous importer le fichier?
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
17 mars 2017 à 11:54
17 mars 2017 à 11:54
Re,
Par exemple : https://www.cjoint.com/
Par exemple : https://www.cjoint.com/
amiro2017
Messages postés
194
Date d'inscription
mardi 28 février 2017
Statut
Membre
Dernière intervention
31 août 2017
1
17 mars 2017 à 11:57
17 mars 2017 à 11:57
merci beaucoup
voici le fichier
http://www.cjoint.com/c/GCrk5anMDDq
voici le fichier
http://www.cjoint.com/c/GCrk5anMDDq
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
18 mars 2017 à 12:33
18 mars 2017 à 12:33
Bonjour Amiro,
Écoute, je suis pas devin ! Décris moi précisément ce que je dois faire (activer quel onglet, lancer quel userform, le remplir avec quelles données) pour obtenir l'erreur que tu cites. Et je pourrais peut-être comprendre et t'aider... Si tu ne fais pas d'effort, je n'en ferai pas non plus !
Écoute, je suis pas devin ! Décris moi précisément ce que je dois faire (activer quel onglet, lancer quel userform, le remplir avec quelles données) pour obtenir l'erreur que tu cites. Et je pourrais peut-être comprendre et t'aider... Si tu ne fais pas d'effort, je n'en ferai pas non plus !
amiro2017
Messages postés
194
Date d'inscription
mardi 28 février 2017
Statut
Membre
Dernière intervention
31 août 2017
1
18 mars 2017 à 13:03
18 mars 2017 à 13:03
Bonjour ThauTheme,
je vous explique : en effet le but est de calcul de risque générale de marché par la méthode d'échénace .donc je veux automatiser cette méthode par le userform n°6.Ainsi vous avez le userform n°6 et la feuille excel "approche standards"
l'utisateur fait alors l'etude d'une portefeuille contenant des instruments financiers il va donc enregistrer les données spécifiques pour chaque instrument par la suite ils enregiste ces données en appayant sur ajouter .Par la suite le but est le calcul de risque générale selon la méthode que j'ai implimenté
Si vous pouvez comprendre la méthode de calcul elle est expliqué par cet exemple :
http://www.osfi-bsif.gc.ca/Fra/fi-if/rg-ro/gdn-ort/gl-ld/Pages/CAR_chpt9.aspx#ToCAnnexe97Exempledecalculdurisquedechangeselonlam%c3%a9thodesimplifi%c3%a9e
mais la base de ma automatisation est basé sur le tableau clé ceci:
http://www.osfi-bsif.gc.ca/Fra/fi-if/rg-ro/gdn-ort/gl-ld/Pages/CAR_chpt9.aspx#ToCdemarch%c3%a9
j'ai pu comprendre cette méthode elle est simple comme vous pouvez voir.Cependant la contrainte est dans sa automatisation
je vous remercie d'avance!!
je vous explique : en effet le but est de calcul de risque générale de marché par la méthode d'échénace .donc je veux automatiser cette méthode par le userform n°6.Ainsi vous avez le userform n°6 et la feuille excel "approche standards"
l'utisateur fait alors l'etude d'une portefeuille contenant des instruments financiers il va donc enregistrer les données spécifiques pour chaque instrument par la suite ils enregiste ces données en appayant sur ajouter .Par la suite le but est le calcul de risque générale selon la méthode que j'ai implimenté
Si vous pouvez comprendre la méthode de calcul elle est expliqué par cet exemple :
http://www.osfi-bsif.gc.ca/Fra/fi-if/rg-ro/gdn-ort/gl-ld/Pages/CAR_chpt9.aspx#ToCAnnexe97Exempledecalculdurisquedechangeselonlam%c3%a9thodesimplifi%c3%a9e
mais la base de ma automatisation est basé sur le tableau clé ceci:
http://www.osfi-bsif.gc.ca/Fra/fi-if/rg-ro/gdn-ort/gl-ld/Pages/CAR_chpt9.aspx#ToCdemarch%c3%a9
j'ai pu comprendre cette méthode elle est simple comme vous pouvez voir.Cependant la contrainte est dans sa automatisation
je vous remercie d'avance!!
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
18 mars 2017 à 13:14
18 mars 2017 à 13:14
Re,
Amiro, je t'avoue que la bourse est quelque chose qui va complètement à l'encontre de mon étique personnelle. Alors, aller me former sur tes liens il n'en n'est absolument pas question. En revanche, si tu me donnes un exemple précis des données permettant de remplir l'UserForm6, qui vont provoquer l'erreur qui te pose problème, je suis disposer à regarder. Sinon, je passe la main...
Amiro, je t'avoue que la bourse est quelque chose qui va complètement à l'encontre de mon étique personnelle. Alors, aller me former sur tes liens il n'en n'est absolument pas question. En revanche, si tu me donnes un exemple précis des données permettant de remplir l'UserForm6, qui vont provoquer l'erreur qui te pose problème, je suis disposer à regarder. Sinon, je passe la main...
amiro2017
Messages postés
194
Date d'inscription
mardi 28 février 2017
Statut
Membre
Dernière intervention
31 août 2017
1
18 mars 2017 à 13:29
18 mars 2017 à 13:29
c'est pas grave , je déciderai de résolver ma problème moi-même
souhaitant à vous bonne week-end
relax-toi
souhaitant à vous bonne week-end
relax-toi
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
>
amiro2017
Messages postés
194
Date d'inscription
mardi 28 février 2017
Statut
Membre
Dernière intervention
31 août 2017
18 mars 2017 à 13:38
18 mars 2017 à 13:38
Re,
Bon week-end à toi aussi, et bonne chance...
Bon week-end à toi aussi, et bonne chance...
16 mars 2017 à 23:58
je vous remercie pour votre commentaire cependant j'ai déjà déclaré dernier comme étant le nombre de lignes non vides d'une colonne
dim dernier as integer dernier = Range("B:B").End(xlDown).Rowet lorsque j'ai injecté votre proposition une erreur de compilation " constante requise " sachant que j'ai déjà mettre dernier=10 et mettre dernier = Range("B:B").End(xlDown).Row comme commentaire
je ne sais pas alors le problème où?
17 mars 2017 à 07:34
Sans, au pire, le code complet et au mieux, le fichier, il nous sera difficile de t'aider...
Essaie cela :
Dim dernier As Integer Dim e(2 To dernier, 1 To 5) As Double Dim e1(2 To dernier, 4 To 5) As Double dernier = Cells(Application.Rows.Count, "B").End(xlUp).Row For J = 2 To dernier On Error Resume Next e(J, 1) = CDbl(Sheets("Risque de taux d'intérêt").Range("D" & J).Value) If Err <> 0 Then Err.Clear e(J, 1) = 0 'à adapter End If e(J, 2) = CDbl(Sheets("Risque de taux d'intérêt").Range("E" & J).Value) If Err <> 0 Then Err.Clear e(J, 2) = 0 'à adapter End If e(J, 3) = CDbl(Sheets("Risque de taux d'intérêt").Range("F" & J).Value) If Err <> 0 Then Err.Clear e(J, 2) = 0 'à adapter End If e1(J, 4) = CDbl(Sheets("Risque de taux d'intérêt").Range("K" & J).Value) 'l'erreur ici If Err <> 0 Then Err.Clear e1(J, 4) = 0 'à adapter End If e1(J, 5) = CDbl(Sheets("Risque de taux d'intérêt").Range("L" & J).Value) If Err <> 0 Then Err.Clear e1(J, 5) = 0 'à adapter End If On Error GoTo 0 Next J17 mars 2017 à 10:41
je vous remercie encore ,
j'ai implimenté cette proposition cependant une erreur clique dernier en disant que "une constate requise "
voici le code en faite c'est un bouton de calcul:
Private Sub CommandButton6_Click() Dim i As Integer, j As Integer Dim v() As Double, c() As Double ReDim v(20) ReDim c(20) Dim dernier As Integer Sheets("Approche_standards").Activate 'If (dernier = 0) Then MsgBox ("Votre portefeuille est vide , Veuillez la remplir s'il vous plaît ") Dim e(2 To dernier, 1 To 5) As Double Dim e1(2 To dernier, 4 To 5) As Double dernier = Cells(Application.Rows.Count, "B").End(xlUp).Row 'à adapter à ton cas For j = 2 To dernier On Error Resume Next e(j, 1) = CDbl(Sheets("Risque de taux d'intérêt").Range("D" & j).Value) If Err <> 0 Then Err.Clear e(j, 1) = 0 'à adapter End If e(j, 2) = CDbl(Sheets("Risque de taux d'intérêt").Range("E" & j).Value) If Err <> 0 Then Err.Clear e(j, 2) = 0 'à adapter End If e(j, 3) = CDbl(Sheets("Risque de taux d'intérêt").Range("F" & j).Value) If Err <> 0 Then Err.Clear e(j, 2) = 0 'à adapter End If e1(j, 4) = CDbl(Sheets("Risque de taux d'intérêt").Range("K" & j).Value) 'l'erreur ici If Err <> 0 Then Err.Clear e1(j, 4) = 0 'à adapter End If e1(j, 5) = CDbl(Sheets("Risque de taux d'intérêt").Range("L" & j).Value) If Err <> 0 Then Err.Clear e1(j, 5) = 0 'à adapter End If On Error GoTo 0 Next j For j = 2 To dernier For i = 1 To 3 If (Abs(e(j, i)) <= 0.083333333 And e(j, i) > 0) Then v(1) = 0 c(1) = c(1) + (e1(j, 4)) * 0 ElseIf (Abs(e(j, i)) <= 0.083333333 And e(j, i) > 0) Then c(1) = c(1) + (e1(j, 5)) * 0 End If If (Abs(e(j, i)) > 0.083333333 And Abs(e(j, i)) <= 0.25 And e(j, i) > 0) Then v(2) = 0.002 c(2) = c(2) + e1(j, 4) * v(2) ElseIf (Abs(e(j, i)) > 0.083333333 And Abs(e(j, i)) <= 0.25 And e(j, i) < 0) Then c(2) = c(2) + e1(j, 5) * v(2) End If If (Abs(e(j, i)) > 0.25 And Abs(e(j, i)) <= 0.5 And e(j, i) > 0) Then v(3) = 0.004 c(3) = c(3) + (e1(j, 4)) * v(3) ElseIf (Abs(e(j, i)) > 0.25 And Abs(e(j, i)) <= 0.5 And e(j, i) < 0) Then c(3) = c(3) + (e1(j, 5)) * v(3) End If If Abs(e(j, i)) >= 0.5 And Abs(e(j, i)) <= 1 And e(j, i) > 0 Then v(4) = 0.007 c(4) = c(4) + (e1(j, 4)) * v(4) ElseIf Abs(e(j, i)) >= 0.5 And Abs(e(j, i)) <= 1 And e(j, i) < 0 Then c(4) = c(4) + (e1(j, 5)) * v(4) End If If Abs(e(j, i)) > 1 And Abs(e(j, i)) <= 2 And e(j, i) > 0 Then v(5) = 0.0125 c(5) = c(5) + (e1(j, 4)) * v(5) ElseIf Abs(e(j, i)) > 1 And Abs(e(j, i)) <= 2 And e(j, i) < 0 Then c(5) = c(5) + (e1(j, 5)) * v(5) End If If Abs(e(j, i)) > 2 And Abs(e(j, i)) <= 3 And e(j, i) > 0 Then v(6) = 0.0175 c(6) = c(6) + (e1(j, 4)) * v(6) ElseIf Abs(e(j, i)) > 2 And Abs(e(j, i)) <= 3 And e(j, i) < 0 Then c(6) = c(6) + (e1(j, 5)) * v(6) End If If Abs(e(j, i)) > 3 And Abs(e(j, i)) <= 4 And e(j, i) > 0 Then v(7) = 0.0225 c(7) = c(7) + (e1(j, 4)) * v(7) ElseIf Abs(e(j, i)) > 2 And Abs(e(j, i)) <= 3 And e(j, i) < 0 Then c(7) = c(7) + (e1(j, 5)) * v(7) End If If Abs(e(j, i)) > 4 And Abs(e(j, i)) <= 5 And e(j, i) > 0 Then v(8) = 0.0275 c(8) = c(8) + (e1(j, 4)) * v(8) ElseIf Abs(e(j, i)) > 4 And Abs(e(j, i)) <= 5 And e(j, i) > 0 Then c(8) = c(8) + (e1(j, 5)) * v(8) End If If Abs(e(j, i)) > 5 And Abs(e(j, i)) <= 7 And e(j, i) > 0 Then v(9) = 0.0325 c(9) = c(9) + (e1(j, 4)) * v(9) ElseIf Abs(e(j, i)) > 5 And Abs(e(j, i)) <= 7 And e(j, i) < 0 Then c(9) = c(9) + (e1(j, 5)) * v(9) End If If Abs(e(j, i)) > 7 And Abs(e(j, i)) <= 10 And e(j, i) > 0 Then v(10) = 0.0375 c(10) = c(10) + (e1(j, 4)) * v(10) ElseIf Abs(e(j, i)) > 7 And Abs(e(j, i)) <= 10 And e(j, i) > 0 Then c(10) = c(10) + (e1(j, 5)) * v(10) End If If Abs(e(j, i)) > 10 And Abs(e(j, i)) <= 15 And e(j, i) > 0 Then v(11) = 0.045 c(11) = c(11) + (e1(j, 4)) * v(11) ElseIf Abs(e(j, i)) > 10 And Abs(e(j, i)) <= 15 And e(j, i) < 0 Then c(11) = c(11) + (e1(j, 5)) * v(11) End If If Abs(e(j, i)) > 15 And Abs(e(j, i)) <= 20 And e(j, i) > 0 Then v(12) = 0.0525 c(12) = c(12) + (e1(j, 4)) * v(12) ElseIf Abs(e(j, i)) > 15 And Abs(e(j, i)) <= 20 And e(j, i) > 0 Then c(12) = c(12) + (e1(j, 5)) * v(12) End If If Abs(e(j, i)) > 20 And e(j, i) > 0 Then v(13) = 0.06 c(13) = c(13) + (e1(j, 4)) * v(13) ElseIf Abs(e(j, i)) > 20 And e(j, i) < 0 Then c(13) = c(13) + (e1(j, 5)) * v(13) End If Next i Next j Dim s As Double, s1 As Double, s2 As Double, s3 As Double, x As Double, x1 As Double, x2 As Double, x3 As Double, t1 As Double s = 0 For i = 1 To 20 'première comosante s = s + c(i) Next i MsgBox (s) s1 = 0 For i = 1 To 4 s1 = s1 + c(i) Next i s2 = 0 For i = 5 To 7 s2 = s2 + c(i) Next i s3 = 0 For i = 8 To 14 s3 = s3 + c(i) Next i If (s1 < 0 And s2 > 0) Or (s1 > 0 And s2 < 0) Then x = Application.WorksheetFunction.Min(Abs(s1), Abs(s2)) End If If (s1 < 0 And s3 > 0) Or (s1 > 0 And s3 < 0) Then x1 = Application.WorksheetFunction.Min(Abs(s1), Abs(s2)) End If If (s1 < 0 And s2 > 0) Or (s1 > 0 And s2 < 0) Then x2 = Application.WorksheetFunction.Min(Abs(s1), Abs(s2)) End If If (s3 < 0 And s2 > 0) Or (s3 > 0 And s2 < 0) Then x3 = 0.45 * Application.WorksheetFunction.Min(Abs(s1), Abs(s2)) End If t1 = x + x1 + x2 + x3 '2ème composante Dim c1 As Integer, r2 As Integer, r3 As Integer, r1 As Integer, ii As Integer, ii1 As Integer, ii2 As Integer, total As Double, t2 As Double For ii = 1 To 4 If c(ii) < 0 Then r1 = Abs(c(ii)) * 0.4 + c1 End If Next ii For ii1 = 5 To 8 If c(ii1) < 0 Then r2 = r2 + 0.3 * Abs(c(ii1)) End If Next ii1 For ii2 = 9 To 14 If c(ii2) < 0 Then r3 = r3 + 0.3 * Abs(c(ii2)) End If Next ii2 t2 = r1 + r2 + r3 total = t1 + t2 + s TextBox1.Value = total End Sub