Aucun retour macro
Bonjour,
Je suis nouvelle sur votre site et également débutante en programmation vba.
Mon souci est le suivant:
Je dois créer un programme qui calcul à partir d'une valeur entée de la hauteur, le volume équivalent. J'ai créer un macro avec une structure select case couplée avec des If étant donné les conditions sur la valeur de la hauteur. Cependant, quand je lance ma macro...rien! Aucun retour dans ma cellule de résultat! Ni aucun message d'erreur d'ailleurs. En trainant un peu sur le site, j'ai vu qu'il fallait vérifier que j'étais bien en automatique, c'est fait, mais toujours rien!! Je ne sais vraiment plus quoi faire!! Aidez moi s'il vous plait!!
Mon code se présente comme suit:
Dim one As String
Dim X As Single
Dim Y As Single
Dim Init As Single
Dim Fin As Single
one = Sheets("Cigares").Range("C5").Value
X = Sheets("Cigares").Range("C8").Value
Y = Sheets("Cigares").Range("C10").Value
Init = Sheets("Cigares").Range("A12").Value
Fin = Sheets("Cigares").Range("A13").Value
Select Case one
Case one = "B1061"
If X < 630 Then
Init = (0.0266 * X ^ 2) + (15.959 * X) - 408.15
ElseIf X > 2330 Then
Init = (-0.0262 * X ^ 2) + (171.43 * X) - 148064
Else
Init = (54.033 * X) - 15248
End If
If Y < 630 Then
Fin = (0.0266 * Y ^ 2) + (15.959 * Y) - 408.15
ElseIf Y > 2330 Then
Fin = (-0.0262 * Y ^ 2) + (171.43 * Y) - 148064
Else
Init = (54.033 * X) - 15248
End If
Case one = "B1062"
If X < 650 Then
Init = (0.026 * X ^ 2) + (16.226 * X) - 429.59
ElseIf X > 2330 Then
Init = (-0.0264 * X ^ 2) + (172.37 * X) - 149226
Else
Init = (54.006 * X) - 15292
End If
If Y < 650 Then
Fin = (0.026 * Y ^ 2) + (16.226 * Y) - 429.59
ElseIf Y > 2330 Then
Fin = (-0.0264 * Y ^ 2) + (172.37 * Y) - 149226
Else
Init = (54.006 * X) - 15292
End If
Case one = "B1063"
If X < 660 Then
Init = (0.0124 * X ^ 2) + (7.5673 * X) - 203.3
ElseIf X > 2350 Then
Init = (-0.0123 * X ^ 2) + (81.327 * X) - 70186
Else
Init = (26.042 * X) - 7627.9
End If
If Y < 660 Then
Fin = (0.0124 * Y ^ 2) + (7.5673 * Y) - 203.3
ElseIf Y > 2350 Then
Fin = (-0.0123 * Y ^ 2) + (81.327 * Y) - 70186
Else
Init = (26.042 * X) - 7627.9
End If
Case one = "B1064"
If X < 640 Then
Init = (0.0252 * X ^ 2) + (15.406 * X) - 400.84
ElseIf X > 2330 Then
Init = (-0.0232 * X ^ 2) + (155.39 * X) - 130880
Else
Init = (52.014 * X) - 14832
End If
If Y < 640 Then
Fin = (0.0252 * Y ^ 2) + (15.406 * Y) - 400.84
ElseIf Y > 2330 Then
Fin = (-0.0232 * Y ^ 2) + (155.39 * Y) - 130880
Else
Init = (52.014 * X) - 14832
End If
Case one = "B1065"
If X < 650 Then
Init = (0.0257 * X ^ 2) + (16.007 * X) - 423.72
ElseIf X > 2350 Then
Init = (-0.0248 * X ^ 2) + (165.15 * X) - 141717
Else
Init = (53.568 * X) - 15290
End If
If Y < 650 Then
Fin = (0.0257 * Y ^ 2) + (16.007 * Y) - 423.72
ElseIf Y > 2350 Then
Fin = (-0.0248 * Y ^ 2) + (165.15 * Y) - 141717
Else
Init = (53.568 * X) - 15290
End If
Case one = "B1066"
If X < 650 Then
Init = (0.0245 * X ^ 2) + (15.45 * X) - 409.84
ElseIf X > 2270 Then
Init = (-0.0251 * X ^ 2) + (159.54 * X) - 133428
Else
Init = (50.522 * X) - 13909
End If
If Y < 650 Then
Fin = (0.0245 * Y ^ 2) + (15.45 * Y) - 409.84
ElseIf Y > 2330 Then
Fin = (-0.0251 * Y ^ 2) + (159.54 * Y) - 133428
Else
Init = (50.522 * X) - 13909
End If
Case one = "B1067"
If X < 670 Then
Init = (0.0242 * X ^ 2) + (15.812 * X) - 433.89
ElseIf X > 2880 Then
Init = 118133.1
ElseIf 2420 < X > 2880 Then
Init = (-0.0317 * X ^ 2) + (194.63 * X) - 179242
Else
Init = (50.332 * X) - 13411
End If
If Y < 670 Then
Fin = (0.0242 * Y ^ 2) + (15.812 * Y) - 433.89
ElseIf Y > 2880 Then
Fin = 118133.1
ElseIf 2420 < Y > 2880 Then
Fin = (-0.0317 * Y ^ 2) + (194.63 * Y) - 179242
Else
Init = (50.332 * X) - 13411
End If
Case Else
If X < 700 Then
Init = (0.0291 * X ^ 2) + (19.583 * X) - 561.78
ElseIf X > 2500 Then
Init = (-0.0306 * X ^ 2) + (212.22 * X) - 198654
Else
Init = (64.868 * X) - 19617
End If
If Y < 700 Then
Fin = (0.0291 * Y ^ 2) + (19.583 * Y) - 561.78
ElseIf Y > 2500 Then
Fin = (-0.0306 * Y ^ 2) + (212.22 * Y) - 198654
Else
Init = (64.868 * X) - 19617
End If
End Select
End Sub
Bonjour
Si ce n'est pas du texte qui est attendu, la déclaration des valeurs devrait être en DOUBLE et pas en STRING
Au début du code, supprimer
Init = Sheets("Cigares").Range("A12").Valueensuite après le END SELECT, mettre ceci
Sheets("Cigares").Range("A12").Value = InitCordialement
Bonjour, merci de la réponse.
Pour la variable définie en string mes valeurs sont de type "B1024".
Et ça ne change rien quand je modifie tel que proposé.
Bonjour,
code corrigé selon les recommandations de Dan
Dim one As String
Dim X As Single
Dim Y As Single
Dim Init As Single
Dim Fin As Single
one = Sheets("Cigares").Range("C5").Value
X = Sheets("Cigares").Range("C8").Value
Y = Sheets("Cigares").Range("C10").Value
Select Case one
Case one = "B1061"
If X < 630 Then
Init = (0.0266 * X ^ 2) + (15.959 * X) - 408.15
ElseIf X > 2330 Then
Init = (-0.0262 * X ^ 2) + (171.43 * X) - 148064
Else
Init = (54.033 * X) - 15248
End If
If Y < 630 Then
Fin = (0.0266 * Y ^ 2) + (15.959 * Y) - 408.15
ElseIf Y > 2330 Then
Fin = (-0.0262 * Y ^ 2) + (171.43 * Y) - 148064
Else
Init = (54.033 * X) - 15248
End If
Case one = "B1062"
If X < 650 Then
Init = (0.026 * X ^ 2) + (16.226 * X) - 429.59
ElseIf X > 2330 Then
Init = (-0.0264 * X ^ 2) + (172.37 * X) - 149226
Else
Init = (54.006 * X) - 15292
End If
If Y < 650 Then
Fin = (0.026 * Y ^ 2) + (16.226 * Y) - 429.59
ElseIf Y > 2330 Then
Fin = (-0.0264 * Y ^ 2) + (172.37 * Y) - 149226
Else
Init = (54.006 * X) - 15292
End If
Case one = "B1063"
If X < 660 Then
Init = (0.0124 * X ^ 2) + (7.5673 * X) - 203.3
ElseIf X > 2350 Then
Init = (-0.0123 * X ^ 2) + (81.327 * X) - 70186
Else
Init = (26.042 * X) - 7627.9
End If
If Y < 660 Then
Fin = (0.0124 * Y ^ 2) + (7.5673 * Y) - 203.3
ElseIf Y > 2350 Then
Fin = (-0.0123 * Y ^ 2) + (81.327 * Y) - 70186
Else
Init = (26.042 * X) - 7627.9
End If
Case one = "B1064"
If X < 640 Then
Init = (0.0252 * X ^ 2) + (15.406 * X) - 400.84
ElseIf X > 2330 Then
Init = (-0.0232 * X ^ 2) + (155.39 * X) - 130880
Else
Init = (52.014 * X) - 14832
End If
If Y < 640 Then
Fin = (0.0252 * Y ^ 2) + (15.406 * Y) - 400.84
ElseIf Y > 2330 Then
Fin = (-0.0232 * Y ^ 2) + (155.39 * Y) - 130880
Else
Init = (52.014 * X) - 14832
End If
Case one = "B1065"
If X < 650 Then
Init = (0.0257 * X ^ 2) + (16.007 * X) - 423.72
ElseIf X > 2350 Then
Init = (-0.0248 * X ^ 2) + (165.15 * X) - 141717
Else
Init = (53.568 * X) - 15290
End If
If Y < 650 Then
Fin = (0.0257 * Y ^ 2) + (16.007 * Y) - 423.72
ElseIf Y > 2350 Then
Fin = (-0.0248 * Y ^ 2) + (165.15 * Y) - 141717
Else
Init = (53.568 * X) - 15290
End If
Case one = "B1066"
If X < 650 Then
Init = (0.0245 * X ^ 2) + (15.45 * X) - 409.84
ElseIf X > 2270 Then
Init = (-0.0251 * X ^ 2) + (159.54 * X) - 133428
Else
Init = (50.522 * X) - 13909
End If
If Y < 650 Then
Fin = (0.0245 * Y ^ 2) + (15.45 * Y) - 409.84
ElseIf Y > 2330 Then
Fin = (-0.0251 * Y ^ 2) + (159.54 * Y) - 133428
Else
Init = (50.522 * X) - 13909
End If
Case one = "B1067"
If X < 670 Then
Init = (0.0242 * X ^ 2) + (15.812 * X) - 433.89
ElseIf X > 2880 Then
Init = 118133.1
ElseIf 2420 < X > 2880 Then
Init = (-0.0317 * X ^ 2) + (194.63 * X) - 179242
Else
Init = (50.332 * X) - 13411
End If
If Y < 670 Then
Fin = (0.0242 * Y ^ 2) + (15.812 * Y) - 433.89
ElseIf Y > 2880 Then
Fin = 118133.1
ElseIf 2420 < Y > 2880 Then
Fin = (-0.0317 * Y ^ 2) + (194.63 * Y) - 179242
Else
Init = (50.332 * X) - 13411
End If
Case Else
If X < 700 Then
Init = (0.0291 * X ^ 2) + (19.583 * X) - 561.78
ElseIf X > 2500 Then
Init = (-0.0306 * X ^ 2) + (212.22 * X) - 198654
Else
Init = (64.868 * X) - 19617
End If
If Y < 700 Then
Fin = (0.0291 * Y ^ 2) + (19.583 * Y) - 561.78
ElseIf Y > 2500 Then
Fin = (-0.0306 * Y ^ 2) + (212.22 * Y) - 198654
Else
Init = (64.868 * X) - 19617
End If
End Select
'mettre le valeur fin et init dans leur cellule respective dans le classeur
Sheets("Cigares").Range("A12").Value=Init
Sheets("Cigares").Range("A13").Value=Fin
End Sub[/color]Ah ok!! Merci!! j'avais pas compris . ça marche super bien. Cependant, dès ce problème terminé, un autre se pose: Mes valeurs ne sont justes que pour un "choix". Ma variable one est un choix dans un menu déroulant et du coup quand je change de choix, il affiche les mêmes valeurs de Fin et Init.Pourtant la jonction de select case et de if semble correcte....
bonjour,
en relisant ton code j'ai trouvé une autre erreur
enlève le "one=" dans tes instructions "case"
voici la correction
par contre je n'ai pas compris ton problème concernant le choix.
Dim one As String
Dim X As Single
Dim Y As Single
Dim Init As Single
Dim Fin As Single
one = Sheets("Cigares").Range("C5").Value
X = Sheets("Cigares").Range("C8").Value
Y = Sheets("Cigares").Range("C10").Value
Select Case one
Case "B1061"
If X < 630 Then
Init = (0.0266 * X ^ 2) + (15.959 * X) - 408.15
ElseIf X > 2330 Then
Init = (-0.0262 * X ^ 2) + (171.43 * X) - 148064
Else
Init = (54.033 * X) - 15248
End If
If Y < 630 Then
Fin = (0.0266 * Y ^ 2) + (15.959 * Y) - 408.15
ElseIf Y > 2330 Then
Fin = (-0.0262 * Y ^ 2) + (171.43 * Y) - 148064
Else
Init = (54.033 * X) - 15248
End If
Case "B1062"
If X < 650 Then
Init = (0.026 * X ^ 2) + (16.226 * X) - 429.59
ElseIf X > 2330 Then
Init = (-0.0264 * X ^ 2) + (172.37 * X) - 149226
Else
Init = (54.006 * X) - 15292
End If
If Y < 650 Then
Fin = (0.026 * Y ^ 2) + (16.226 * Y) - 429.59
ElseIf Y > 2330 Then
Fin = (-0.0264 * Y ^ 2) + (172.37 * Y) - 149226
Else
Init = (54.006 * X) - 15292
End If
Case "B1063"
If X < 660 Then
Init = (0.0124 * X ^ 2) + (7.5673 * X) - 203.3
ElseIf X > 2350 Then
Init = (-0.0123 * X ^ 2) + (81.327 * X) - 70186
Else
Init = (26.042 * X) - 7627.9
End If
If Y < 660 Then
Fin = (0.0124 * Y ^ 2) + (7.5673 * Y) - 203.3
ElseIf Y > 2350 Then
Fin = (-0.0123 * Y ^ 2) + (81.327 * Y) - 70186
Else
Init = (26.042 * X) - 7627.9
End If
Case "B1064"
If X < 640 Then
Init = (0.0252 * X ^ 2) + (15.406 * X) - 400.84
ElseIf X > 2330 Then
Init = (-0.0232 * X ^ 2) + (155.39 * X) - 130880
Else
Init = (52.014 * X) - 14832
End If
If Y < 640 Then
Fin = (0.0252 * Y ^ 2) + (15.406 * Y) - 400.84
ElseIf Y > 2330 Then
Fin = (-0.0232 * Y ^ 2) + (155.39 * Y) - 130880
Else
Init = (52.014 * X) - 14832
End If
Case "B1065"
If X < 650 Then
Init = (0.0257 * X ^ 2) + (16.007 * X) - 423.72
ElseIf X > 2350 Then
Init = (-0.0248 * X ^ 2) + (165.15 * X) - 141717
Else
Init = (53.568 * X) - 15290
End If
If Y < 650 Then
Fin = (0.0257 * Y ^ 2) + (16.007 * Y) - 423.72
ElseIf Y > 2350 Then
Fin = (-0.0248 * Y ^ 2) + (165.15 * Y) - 141717
Else
Init = (53.568 * X) - 15290
End If
Case "B1066"
If X < 650 Then
Init = (0.0245 * X ^ 2) + (15.45 * X) - 409.84
ElseIf X > 2270 Then
Init = (-0.0251 * X ^ 2) + (159.54 * X) - 133428
Else
Init = (50.522 * X) - 13909
End If
If Y < 650 Then
Fin = (0.0245 * Y ^ 2) + (15.45 * Y) - 409.84
ElseIf Y > 2330 Then
Fin = (-0.0251 * Y ^ 2) + (159.54 * Y) - 133428
Else
Init = (50.522 * X) - 13909
End If
Case "B1067"
If X < 670 Then
Init = (0.0242 * X ^ 2) + (15.812 * X) - 433.89
ElseIf X > 2880 Then
Init = 118133.1
ElseIf 2420 < X > 2880 Then
Init = (-0.0317 * X ^ 2) + (194.63 * X) - 179242
Else
Init = (50.332 * X) - 13411
End If
If Y < 670 Then
Fin = (0.0242 * Y ^ 2) + (15.812 * Y) - 433.89
ElseIf Y > 2880 Then
Fin = 118133.1
ElseIf 2420 < Y > 2880 Then
Fin = (-0.0317 * Y ^ 2) + (194.63 * Y) - 179242
Else
Init = (50.332 * X) - 13411
End If
Case Else
If X < 700 Then
Init = (0.0291 * X ^ 2) + (19.583 * X) - 561.78
ElseIf X > 2500 Then
Init = (-0.0306 * X ^ 2) + (212.22 * X) - 198654
Else
Init = (64.868 * X) - 19617
End If
If Y < 700 Then
Fin = (0.0291 * Y ^ 2) + (19.583 * Y) - 561.78
ElseIf Y > 2500 Then
Fin = (-0.0306 * Y ^ 2) + (212.22 * Y) - 198654
Else
Init = (64.868 * X) - 19617
End If
End Select
'mettre le valeur fin et init dans leur cellule respective dans le classeur
Sheets("Cigares").Range("A12").Value=Init
Sheets("Cigares").Range("A13").Value=Fin
End Sub[/color]Merci h2so4!! Cette erreur que tu as trouvée resouds mon problème de choix en fait. donc tout baigne, merci!!!!
Re,
Pour la variable définie en string mes valeurs sont de type "B1024".
Ok pour ONE mais pas pour le reste car à la vue des formules utilisées et des résultats attendus (qui sont des chiffres...), le choix de Single (proposé par h2s04) ou Double s'impose.
Ah ok!! Merci!! j'avais pas compris . ça marche super bien...
je t'avais donné la même solution que h2so4 au niveau de la position de l'instruction avant le END SELECT...
Pour clôturer un sujet, il faut cliquer sur le V vert à coté du bouton EDITER lors d'une réponse. cela permet de voir notamment tout ce qui est en cours ou non dans l'option "Voir mes messages" en haut de la fenêtre.
Cordialement