Excel-VBA instruction select case

Résolu/Fermé
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 - 25 mars 2010 à 12:27
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 - 26 mars 2010 à 19:08
Bonjour,

Je voudrais avoir la correction des ligne où il ya " ? " SVP:

resultat = mesure / (debit * temps)
resultat = (resultat * 10) <------------- ? ici, "résultat" ne change pas et reste le même
Me.Controls("tbx4") = resultat que sur la ligne d'avant

Select Case resultat
Case 10 < resultat < 20 <------------ ? ici, même si "resultat" = 15 je n'ai pas "Ok!"
Me.Controls("tbx4") = "Ok!" d'afficher
Case Is > 20
End Select


Merci

A voir également:

12 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
26 mars 2010 à 11:26
Bonjour,

Teste avant :
If IsNumeric(tbx) Then
mesure = CInt(tbx)
Else
mesure = 0
End If

eric
1
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
Modifié par Le Pingou le 25/03/2010 à 14:00
Bonjour,
Au passage :
Case 10 To 20

Contrôler que la valeur de résultat est correcte ici:
resultat = mesure / (debit * temps)

Salutations.
Le Pingou
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
25 mars 2010 à 18:11
Bonjour Le Pingou,
J'ai essayé votre formule, elle fonctionne mais aussi pour des valeurs incorrectes

voici mon code:

Private Sub tbx3_Change()

mesure = Me.Controls("tbx3") 'je récupère ici un chiffre, "2" par exemple

Sheets("Grille 1").Range("C4") = mesure

Select Case mesure 'min = 10 et Max = 20
Case Is < min <------------------------ jamais, le programme passe ici !
Me.Controls("tbx4") = "Débit correct" même pour "mesure = 6" ?
Case min To max
Me.Controls("tbx4") = "10<Debit<20"
Case Is > Max
Me.Controls("tbx4") = "Debit>20"
End Select

Je ne vois pas pourquoi, Pouvez-vous m'aider SVP?
0
Gord21 Messages postés 918 Date d'inscription samedi 21 novembre 2009 Statut Membre Dernière intervention 20 mars 2013 289
25 mars 2010 à 20:23
Bonsoir,
Es-tu sûr de l'initialisation de tes variables min et Max ?
Tu as :
Select Case mesure
'min = 10 et Max = 20
Case Is < min
   Me.Controls("tbx4") = "Débit correct" 
Case min To Max 
   Me.Controls("tbx4") = "10<Debit<20" 
Case Is > Max 
   Me.Controls("tbx4") = "Debit>20" 
End Select


Il faudrait :
min = 10
Max = 20
Select Case mesure
Case Is < min 
   Me.Controls("tbx4") = "Débit correct"
Case min To Max 
   Me.Controls("tbx4") = "10<Debit<20" 
Case Is > Max 
   Me.Controls("tbx4") = "Debit>20" 
End Select

0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
25 mars 2010 à 20:56
Bonsoir,

Une suggestion : je ne vois pas la déclaration des variables.
Débute ton code par
dim mesure as double
(ou résultat, tes variables changent de nom en cours de route)
pour être sûr qu'elle soit bien numérique et non pas en variant qui serait en chaine....
eric
0

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

Posez votre question
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
25 mars 2010 à 21:47
Bonsoir à tous,

merci pour vos suggestions.
Voila les réponses à vos questions:

J'ai changé le nom des variables min et max en mini et maxi, car je me suis aperçu que ce sont des noms de code.

mini et max sont affectées du résultat d'une opération (type: 2,3*nombre).

Toutes mes variables sont définies en tant que déclaration, générale:
Dim maxi, mini, mesure As Integer

J'ai voulu déclarer comme étant décimale mais je n'ai pas trouvé quel code taper alors j'ai mis integer. Est-ce que c'est gênant ? car

A part ça, j'ai un doute sur ce code: mesure = Me.Controls("tbx3")
Est-ce correcte d'écrire cela ? et d'utiliser le nombre tapé dans mes opérations?

Je ne comprends pas pourquoi le programme voit quand c'est supérieur à maxi mais pas quand c'est inférieur à mini ?

voila
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié par eriiic le 25/03/2010 à 22:47
mesure = Me.Controls("tbx3")
Est-ce correcte d'écrire cela ?

non.
Ton controle tbx te retourne une chaine qu'il faut convertir en numérique :
mesure = cint(Me.Controls("tbx3"))
ou cdbl ou ...

Et je rejoins le pingou, ton code et tes variables changent à chaque post, soit plus rigoureux
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
25 mars 2010 à 22:18
Bonjour mod77,
Ma proposition fonctionne parfaitement par rapport à votre demande du début.
Me dire: J'ai essayé votre formule, elle fonctionne mais aussi pour des valeurs incorrectes
et me présenter un code qui est différent c'est le sommet.

De plus je vous ai demandé :
Contrôler que la valeur de résultat est correcte ici:
resultat = mesure / (debit * temps)

Pas de réponse donc de ma part non plus.
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
26 mars 2010 à 08:39
Bonjour,

Merci Eric pour ta conversion je vais l'essayer.

Je suis désolé pour les sauts d'étapes dans mes postes, je voulais gagner du temps et ne pas écrire des pages de détails, c'est loupé!

Pour Le Pingou, il faut pas se fâcher, je voulais dire que votre proposition marche telle que vous ma l'avez proposé, mais lorsque résultat est 15 le programme passe pas par le case 10<resultat<15. C'est pourquoi j'ai changé ma façon de faire et que j'ai remplacé 10 par min puis mini et 20 par max puis maxi.

Il est vrai que j'ai failli, car je n'ai pas répondu au contrôle de la variable résultat.
Je l'avais fait afficher, et elle était bonne. "était", parce que j'ai encore changé ma façon de faire, je ne fais plus d'opération pour faire plus simple. C'est pourquoi j'ai introduit les valeurs mini et maxi.

Donc, méa culpa, j'aurai dû l'expliquer quand même!

mon code actuel est:

Private Sub tbx3_Change()

mesure = Me.Controls("tbx3") 'je récupère ici un chiffre, "2" par exemple

Sheets("Grille 1").Range("C4") = mesure 'je contrôle la valeur de "mesure"

Select Case mesure 'min = 10 et Max = 20
Case Is < min
Me.Controls("tbx4") = "Débit correct"
Case min To max
Me.Controls("tbx4") = "10<Debit<20"
Case Is > Max
Me.Controls("tbx4") = "Debit>20"
End Select

je fais la modif de Eriiic et je reviens vers vous tous

merci à tous.
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
26 mars 2010 à 08:48
Merci à tous, merci Eriiic, c'est bien la conversion qui est nécessaire et je ne le savais pas.

Bonne journée
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
26 mars 2010 à 09:01
Excusez moi j'ai encore une question

dans la formule d'Eriiic: "mesure = Cint(Me.Controls("tbx3"))"
lorsque j'efface le contenu de ma zone de saisie "tbx3" le programme plante en
"erreur d'exécution 13, incompatibilité de type".

Y a -t-il un moyen d'éviter cela SVP ?
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
26 mars 2010 à 17:34
Merci Eric ça marche!

Serais-tu me dire cependant, comment je peux afficher dans une textbox le résultat de ma mesure sur 5 caractères car pour mini il apparait bien des chiffres après la virgule mais pas pour maxi, et je ne vois pas pourquoi?

Merci
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
26 mars 2010 à 18:05
regarde l'aide vba sur format
Tu te crées sur une cellule le format personnalisé qui te va et tu le reportes dans format.
Ex pour un entier sur 5 chiffres : s=format(min,"00000")
eric
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 53
26 mars 2010 à 19:08
Merci encore!
0