Excel-VBA instruction select case [Résolu/Fermé]

Signaler
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
-
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
-
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

12 réponses

Messages postés
23580
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 octobre 2020
6 412
Bonjour,

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

eric
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Messages postés
9755
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
1 077
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
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
47
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?
Messages postés
919
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
20 mars 2013
282
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

Messages postés
23580
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 octobre 2020
6 412
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
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
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
Messages postés
23580
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 octobre 2020
6 412
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
Messages postés
9755
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
10 octobre 2020
1 077
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.
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
47
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.
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
47
Merci à tous, merci Eriiic, c'est bien la conversion qui est nécessaire et je ne le savais pas.

Bonne journée
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
47
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 ?
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
47
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
Messages postés
23580
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 octobre 2020
6 412
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
Messages postés
1274
Date d'inscription
vendredi 10 juillet 2009
Statut
Membre
Dernière intervention
28 avril 2020
47
Merci encore!