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").Value

ensuite après le END SELECT, mettre ceci

Sheets("Cigares").Range("A12").Value = Init

Cordialement

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

Merci à toi Dan

Rechercher des sujets similaires à "aucun retour macro"