1. #1
    Candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2014
    Messages : 2
    Points : 3
    Points
    3

    Par défaut Contrôle d'erreur lors de la saisie d'une variable de type Byte

    Bonjour,

    Version Excel 2010.

    Ma question concerne la cohérence de la procédure choixMois(), code ci-dessous,
    au niveau du contrôle d'erreur,lors de la saisie par l'utilisateur, de la valeur de la variable mois.

    Cette variable est de type byte déclarée au niveau du module principal.

    De la procédure principale, j'appelle la procédure choix().
    La procédure fonctionne, mais le contrôle d'erreur est-il cohérent ?
    peut-il générer d'autres problèmes ?

    Vous remerciant par avance du temps pris pour votre réponse
    Cordialement,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub choixMois() 'Procédure qui affecte aux variables mois, col,NomFeuille les valeurs  en fonction du mois saisi
     
    On Error GoTo MauvaisType  'En cas d'erreur, on va à l'étiquette MauvaisType
     
    While mois < 1 Or mois > 12
         mois = Application.InputBox("Entrer le mois à Traiter entre 1 et 12 ", Type:=1)
    Wend
     
    Select Case mois
          Case 1
            col = 8 'colonne janvier dans feuille CCM
            NomFeuille = "Janv17"
          ....
     
          Case 12
            col = 16 'colonne Dec dans feuille CCM
            NomFeuille = "Dec17"
        End Select
     
        Exit Sub
     
    MauvaisType: 'etiquette
          MsgBox "Vous n'avez pas saisi un nombre entier", vbCritical
          choixMois ' on rappelle la procédure choix pour resaisie du mois
    End Sub

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    février 2007
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2007
    Messages : 848
    Points : 1 310
    Points
    1 310

    Par défaut

    Bonjour,

    tu as une balise code (icone #) pour rendre plus agréable la lecture.
    Non, il est incomplet. Normalement on doit rétablir le gestionnaire d'erreur juste après la ligne supervisée avec On Error Goto 0

    Mais pourquoi en faire un ?
    Travaille avec l'entier récolté et basta. Si l'utilisateur est assez bête pour saisir 5.3 pour mai, il devrait se lasser avant la machine normalement...
    eric

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    2 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 2 362
    Points : 4 084
    Points
    4 084

    Par défaut

    Bonjour
    Pourquoi une gestion d'erreur ? Il suffit de forcer --->>
    Je commencerais par ne pas utiliser Application.InputBox (qui prend trop la main) au profit d'une simple inputbox, ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim bon As Boolean, mois As Byte, saisie As String
    While Not bon
      saisie = InputBox("Entrer le mois à Traiter entre 1 et 12 ")
      If IsDate("29/" & saisie & "/2000") Then bon = True: mois = Val(saisie) ' -->> attention : le 29 et l'année 2000 ne sont pas choisis ici au hasard.
    Wend
    EDIT que l'on pourrait d'ailleurs traiter également ainsi et faire l'économie d'une booléenne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim mois As Byte, saisie As String
    While mois = 0
      saisie = InputBox("Entrer le N° de mois à traiter")
      If IsDate("29/" & saisie & "/2000") Then mois = Val(saisie)
    Wend
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.

  4. #4
    Membre expérimenté Avatar de dysorthographie
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2016
    Messages
    913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2016
    Messages : 913
    Points : 1 498
    Points
    1 498

    Par défaut

    Bonjour,
    En plus de la réponse unparia sens équivoque puisqu'il qualifie qu'il s'agit bien d'une date, je dirais qu'un select case a 12 entrées c'est ridicule alors qu'un Array ferait l'affaire il me semble.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Mois=Array("","Janvier",...,"Décembre")
    M=Mois(1)
    De plus si le mois de janvier est en colonne 8 je ne vois pas comment le mois de décembre pourrait être en 16!
    Il dit non avec la tête
    mais il dit oui avec le coeur
    il dit oui à ce qu’il aime
    il dit non au professeur {Jacques PRÉVERT}

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    2 362
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 2 362
    Points : 4 084
    Points
    4 084

    Par défaut

    Bonjour Robert
    Cet aspect des colonnes m'avait également interpellé.
    Impossible toutefois de le guider en parfaite connaissance de cause en ce qui concerne cet aspect-là, car trop dépendant de la manière dont la feuille est organisée, bien que je crois deviner que les données sont "regroupées" par semestre, le second étant séparé du 1er par deux colonnes (peut-être).
    Ce ne peut être qu'à partir de cette précision que le choix (select case - seulement 2 dans ce cas - ou array) le plus judicieux pourra être fait.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.

  6. #6
    Candidat au Club
    Homme Profil pro
    Gestionnaire de parc micro-informatique
    Inscrit en
    septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de parc micro-informatique
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2014
    Messages : 2
    Points : 3
    Points
    3

    Par défaut Merci à tous pour vos contributions respectives .

    Voilà de la matière pour progresser.
    Bien Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/05/2010, 19h47
  2. Réponses: 1
    Dernier message: 22/02/2008, 11h30
  3. Erreur lors de la création d'une variable
    Par neuro6 dans le forum C++
    Réponses: 5
    Dernier message: 22/01/2007, 08h40
  4. Réponses: 6
    Dernier message: 29/04/2006, 20h37
  5. message d'erreur lors de la création d'une base
    Par franculo_caoulene dans le forum MS SQL-Server
    Réponses: 4
    Dernier message: 16/04/2004, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo