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
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
A voir également:
- Excel-VBA instruction select case
- Liste déroulante excel - Guide
- Aller à la ligne dans une case excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
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
26 mars 2010 à 11:26
Bonjour,
Teste avant :
If IsNumeric(tbx) Then
mesure = CInt(tbx)
Else
mesure = 0
End If
eric
Teste avant :
If IsNumeric(tbx) Then
mesure = CInt(tbx)
Else
mesure = 0
End If
eric
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
Modifié par Le Pingou le 25/03/2010 à 14:00
Bonjour,
Au passage :
Contrôler que la valeur de résultat est correcte ici:
Salutations.
Le Pingou
Au passage :
Case 10 To 20
Contrôler que la valeur de résultat est correcte ici:
resultat = mesure / (debit * temps)
Salutations.
Le Pingou
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
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?
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?
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
25 mars 2010 à 20:23
Bonsoir,
Es-tu sûr de l'initialisation de tes variables min et Max ?
Tu as :
Il faudrait :
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
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
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
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
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
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
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
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
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
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
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
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:
Pas de réponse donc de ma part non plus.
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.
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
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.
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.
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
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
Bonne journée
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
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 ?
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 ?
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
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
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
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
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
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
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
26 mars 2010 à 19:08
Merci encore!