Excel-VBA instruction select case

Résolu
mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   -  
mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

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

    eric
    1
  2. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
    1. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
       
      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
  3. Gord21 Messages postés 928 Statut Membre 289
     
    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
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  7. Le Pingou Messages postés 12276 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    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
  8. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
     
    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
  9. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
     
    Merci à tous, merci Eriiic, c'est bien la conversion qui est nécessaire et je ne le savais pas.

    Bonne journée
    0
  10. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
     
    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
  11. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
     
    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
  12. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  13. mod77 Messages postés 1320 Date d'inscription   Statut Membre Dernière intervention   53
     
    Merci encore!
    0