Aucun retour de macro

Fermé
Jenamande10 Messages postés 8 Date d'inscription lundi 23 juin 2014 Statut Membre Dernière intervention 27 juin 2014 - 23 juin 2014 à 10:36
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 23 juin 2014 à 20:03
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
A voir également:

11 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
23 juin 2014 à 11:18
Bonjour,

Par défaut, le contenu d'une cellule est de type chaiîne de caractères (string). Il convient donc de convertir en affectant la valeur à la variable:

Dim x As Integer

X = Cint(Sheets("Cigares").Range("C8").Value)

0
Jenamande10 Messages postés 8 Date d'inscription lundi 23 juin 2014 Statut Membre Dernière intervention 27 juin 2014
23 juin 2014 à 12:53
D'abord merci pour la réponse Polux31,
cependant, quand j'écris le ode tel que tu le dis, il y a une erreur de type "dépassement de capacité" Il est à noter que mes valeurs dépassent parfois 35000.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
23 juin 2014 à 13:08
Désolé de ne pas avoir deviné ... dans ce cas il faut faire

Dim x As Long

X = CLng(Sheets("Cigares").Range("C8").Value)

0
Jenamande10 Messages postés 8 Date d'inscription lundi 23 juin 2014 Statut Membre Dernière intervention 27 juin 2014
23 juin 2014 à 14:07
D'accord, aucun message d'erreur mais toujours aucun retour.
les résultats ne s'affichent toujours pas
0

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

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 23/06/2014 à 14:14
C'est normal ... dans le code il n'y a aucune instruction de retour pour l'affichage !!!

Je suppose que tu dois afficher "Fin" et "Init" puisque c'est ce qui est calculé ...

Il faut après le
End Select


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

«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
0
Jenamande10 Messages postés 8 Date d'inscription lundi 23 juin 2014 Statut Membre Dernière intervention 27 juin 2014
23 juin 2014 à 15:50
Merci beaucoup, ça marche parfaitement pour l'affichage de mes valeurs!! C'est super.
Par contre j'ai un petit souci avec les valeurs. Mes valeur de la variable one sont des choix dans un menu déroulant et X et Y sont deux valeurs différentes de hauteur; Je n'arrive qu'à afficher un résultat que pour une seule condition; quand je change de valeur de one, aucune modification n'apparait. Pourtant l'association des select case et des if semble correcte....
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
23 juin 2014 à 16:09
Tu as un menu déroulant dans une cellule mais tu affectes à "One" la valeur de la cellule et non de la sélection du menu déroulant !!!

Je ne connais pas les contrôles de formulaire et ne sais pas les manipuler, dsl.
0
Jenamande10 Messages postés 8 Date d'inscription lundi 23 juin 2014 Statut Membre Dernière intervention 27 juin 2014
23 juin 2014 à 16:15
Ok, merci beaucoup pour l'aide que tu m'as apporté, je vais continuer à chercher.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
23 juin 2014 à 17:14
J'ai cherché un peu comment récupérer la sélection de la liste déroulante.J'ai trouvé un truc mais ce n'est peut être pas la meilleure solution.
Si le contrôle de formulaire est une combobox, il faut dans le format de contrôle mettre une cellule liée. La cellule liée prendra la valeur du choix de la liste déroulante. Dans ton exemple la cellule liée est Sheets("Cigares").Range("C5"). Ton code fonctionnera quand tu changeras de sélection.

0
Jenamande10 Messages postés 8 Date d'inscription lundi 23 juin 2014 Statut Membre Dernière intervention 27 juin 2014
23 juin 2014 à 20:00
Merci d'avoir cherché de ton coté. je viens juste de trouver la solution!! Mon code était mal écrit: Après mon case, je devait pas mettre one="B1061" mains Case "B1061". Ca passe seul après!!
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
23 juin 2014 à 20:03
Oups, autant pour moi, dsl ... effectivement la bonne syntaxe est bien Case "Bxxx" et non Case One = "Bxxx" ... j'aurai du le voir !!! encore dsl.
0