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 :

Macro avec pb de point


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut Macro avec pb de point
    Bonjour à vous tous

    Voici une macro de mon cru qui bug :

    Lorsque je rentre le 1er versement sans le point du pavé numérique (exemple:14), la macro se déroule correctement, mais quand je tape 14.5, j'ai le message suivant (la ligne de code en gras est la source du problème) :


    Message erreur execution 13

    type incompatible


    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    R = MsgBox("Le 1er versement est-il fixe ?", vbYesNo + vbInformation, "Calcul automatique")
     
    If R = vbYes Then
     
    Message = "Veuillez entrer le montant du 1er versement."
    Titre = "Calcul automatique"
    Montant1 = InputBox(Message, Titre)
     
     
     
    'delai en moins de 12 mois
    numéro_erreur = "Référence de l'erreur : [calcul_auto_2]"
     
    If NbEch > 1 Then
    Range("F18:F29").ClearContents
    Range("H18:H29").ClearContents
     
    
    Range("F18").Value = Montant1
     
     
     Ech = (MontantDelai - Montant1) \ (NbEch - 1)
     N = NbEch - 2
     DernierVers = (MontantDelai - Montant1) - (Ech * N)
     DateEch = Datedebut
     
        
        
        For h = 1 To N + 1
        K = h + 17
        Cells(K, 8).Value = DateEch
        DateEch = DateAdd("m", 1, DateEch)
        Next h
        
        K = K + 1
        Cells(K, 8).Value = DateEch
        
        
        
        For i = 1 To N
        J = i + 18
        Cells(J, 6).Value = Ech
        Next i
         
        J = J + 1
        Cells(J, 6).Value = DernierVers
    Merci beaucoup !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    ce qui est inscrit dans une inputbox est considéré comme du texte, il te faut le convertir. regarde du coté de la fonction val

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut
    Je ne suis pas un expert en macros

    Comment utiliser cette fonction val ?

    Merci

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Au lieu de mettre un point met une virgule et hop ca marche
    Par contre tu risque d'avoir le meme probleme su d'autre micro mùais en sens inverse, cherche un peu sur le forum y'a deja eu une question a se sujet, "separateur decimal" je crois, un truc dans le genre.

    Pour l'utilisation de val tu peux faire
    Val(l'expression a convertir)

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut
    En effet, ce fichier sera installé sur un grand nombre de micros et je ne peux pas être sûr de la configuration de chacun

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Et pour éviter une erreur par la saisie de l'utilisateur qui pourrait taper un point...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Dim Montant1
        Montant1 = InputBox("Montant=")
        Montant1 = Replace(Montant1, ".", ",")
    A+

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    Et pour éviter une erreur par la saisie de l'utilisateur qui pourrait taper un point...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       Dim Montant1
        Montant1 = InputBox("Montant=")
        Montant1 = Replace(Montant1, ".", ",")
    A+
    Re
    Le soucis en faisant ca c'est qu'on obtient le probleme inverse si l'utilisateur a defini le point comme separateur decimal
    il me semblais que tu avais participé a la resolution d'un probleme similaire LeForestier, non ?
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonsoir

    tu peux aussi convertir la valeur inputbox en numeric

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim Montant1
        Montant1 = Val(InputBox("Montant="))

  9. #9
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonsoir,

    Citation Envoyé par Qwazerty Voir le message
    Re
    Le soucis en faisant ca c'est qu'on obtient le probleme inverse si l'utilisateur a defini le point comme separateur decimal
    il me semblais que tu avais participé a la resolution d'un probleme similaire LeForestier, non ?
    A++
    Qwaz
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test()
    Dim Sep As String, Montant
        Sep = Application.International(xlDecimalSeparator)
        Montant = Replace(Replace(InputBox("Montant="), ".", Sep), ",", Sep)
    End Sub
    Ceci dit, je préconise personnellement de NE JAMAIS EMPLOYER InputBox, qui est une infâme cochonnerie, et de faire appel systématiquement à un UserForm, où la gestion d’erreur est bien + facile à gérer.

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    on peut aussi utuliser ça, l'utilisateur comprend de lui même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub num()
    If Not IsNumeric(InputBox("Montant")) Then num
    End Sub

  11. #11
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour,

    Citation Envoyé par alsimbad Voir le message
    on peut aussi utiliser ça, l'utilisateur comprend de lui même
    Pas d’accord : si une application est correctement écrite, il ne doit jamais être nécessaire de supposer que l’utilisateur va comprendre de lui-même. Au contraire, il faut que quelle que soit la bêtise ou la maladresse de l’utilisateur potentiel, il ne puisse pas faire planter l’appli.

    Un cas typique est celui de l’appli où tout se passe bien jusqu’au jour où l’utilisateur habituel tombe malade ou part en vacances, et est remplacé par quelqu’un qui fait des bétises (qui ne remplit pas un UserForm en totalité par exemple, sans qu’existe un contrôle de saisie suffisant).

    Pour en revenir à InputBox, avec ton code, si l’utilsateur ne comprend pas et s’obstine, il ne peut même pas sortir de la boucle dans laquelle il est enfermé en utilisant le bouton Annuler.

    Quand je dis que InputBox est une cochonnerie

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    Citation Envoyé par bigalo
    Pas d’accord : si une application est correctement écrite, il ne doit jamais être nécessaire de supposer que l’utilisateur va comprendre de lui-même.
    je suis d'accord avec toi sur le principe, mais bon, c'est un exemple rapide, je suis sur, meme si je l'ai pas en tete qu'on peu mettre un bouton annuler sur une inputbox, et que meme si l'on ne peut pas faire confiance a l'utilisateur pour qu'il fasse les actions comme l'on souhaiterais, on peut au moins lui accorder le crédit d'avoir une reflexion intelligente si au lieu de le renvoyer au départ du programme, on met un message d'erreur genre "entrez un chiffre valide", et meme word (qui est quand meme écrit par des pro non ?) quand il demande une virgule, tu peux toujour essayer de placer un point, il va pas faire l'effort de traduire.

  13. #13
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Citation Envoyé par alsimbad Voir le message
    on peut au moins lui accorder le crédit d'avoir une reflexion intelligente
    Malheureusement, non

    On peut tomber sur des utilisateurs particulièrement mal à l’aise devant un ordinateur (problème d’âge ou de forme d’esprit). Pire, on rencontre parfois des utilisateurs qui font montre d’une évidente mauvaise volonté.

    Une appli doit tenir compte de ces éléments.

  14. #14
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 16
    Par défaut
    Je suis d'accord sur le fait qu'une appli doit être conçue pour être utilisée par le plus ignare en informatique (et il en existe )

    Bref, pour mon problème de point, l'input box n'étant pas parfaite au niveau du format, j'ai réglé le problème en optant pour une cellule à remplir du montant souhaité (elle apparaît par mise en forme conditionnelle), et j'ai défini la cellule dans ma macro (plus de problème de format comme ça )

    Merci pour votre aide

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

Discussions similaires

  1. problème macro avec nuage de point
    Par Razekiel_ dans le forum Macros et VBA Excel
    Réponses: 35
    Dernier message: 14/06/2011, 15h03
  2. [CSV] Problème avec CSV et point virgules
    Par Lotz dans le forum Langage
    Réponses: 6
    Dernier message: 09/03/2006, 15h11
  3. [VBA][Excel]Exécution macro avec fichiers source
    Par ouezon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/12/2005, 00h00
  4. macro avec visual
    Par moldavi dans le forum MFC
    Réponses: 4
    Dernier message: 02/04/2005, 20h14
  5. [Debug]Pb avec les breaks points
    Par RoMinoU dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 13/05/2004, 12h36

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