IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Contrôle d'erreur lors de la saisie d'une variable de type Byte [XL-2010]


Sujet :

Macros et VBA Excel

  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 : 59
    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 expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    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
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    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.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Invité
    Invité(e)
    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!

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    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.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  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 : 59
    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