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 :

problème avec une macro décimale [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut problème avec une macro décimale
    Bonjour à tous,

    La marco ci-dessous me permet d'avoir 2 décimales après la virgule et ensuite la tabulation se fait automatiquement.
    Cependant, je rencontre un problème, si je me suis trompé dans la saisie de mon premier chiffre, alors un message d'erreur apparaît et cela plante mon application.

    "L'indice n'appartient pas à la sélection"
    Merci par avance pour votre éclairage.

    Le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub TxtMontant_Change()
    Dim Test As Variant
    Dim DS As String
     
    DS = Application.DecimalSeparator
     
    Test = Split((TxtMontant), DS)
    If UBound(Test) Then
        If Len(Test(UBound(Test))) = 2 Then SendKeys "{TAB}"
        End If
    End Sub

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Je proposerai ceci
    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
    Private Sub TxtMontant_Change()
    Dim Pos As Integer
    Dim Decim As String
     
    With Me.TxtMontant
        Pos = InStr(.Text, ".")
        If Pos > 0 Then
            Decim = Mid(.Text, Pos + 1)
            If Len(Decim) >= 2 Then
                Pos = InStr(.Text, ".")
                .Text = Left(.Text, Pos + 2)
                Me.TextBox2.SetFocus    'Control suivant
            End If
        End If
    End With
    End Sub
    Une autre proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub TxtMontant_Change()
    Dim Pos As Integer
     
    With Me.TxtMontant
        Pos = InStr(.Text, ".")
        If Pos > 0 Then
            Pos = InStr(.Text, ".")
            .MaxLength = Pos + 2
            If Len(.Text) = Pos + 2 Then Me.TextBox2.SetFocus
        Else
            .MaxLength = Len(.Text) + 1
        End If
    End With
    End Sub
    Et une autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub TxtMontant_Change()
     
    With Me.TxtMontant
        If .Text Like "*.??" Then
            .MaxLength = Len(.Text)
            Me.TextBox2.SetFocus    'Control suivant
        Else
            .MaxLength = Len(.Text) + 1
        End If
    End With
    End Sub
    Bien sûr, à tester

  3. #3
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par NEC14 Voir le message
    Merci par avance pour votre éclairage.
    En espérant que ça te serve:


    Désolé... J'ai pas pu m'empêcher

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour mercatog,

    Merci pour ton aide, je teste tes propositions et je te tiens informé.

    Ce code ci fonctionne trés trés bien. Super

    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
     
    Private Sub TxtMontant_Change()
    Dim Pos As Integer
    Dim Decim As String
     
    With Me.TxtMontant
        Pos = InStr(.Text, ".")
        If Pos > 0 Then
            Decim = Mid(.Text, Pos + 1)
            If Len(Decim) >= 2 Then
                Pos = InStr(.Text, ".")
                .Text = Left(.Text, Pos + 2)
                Me.TextBox2.SetFocus    'Control suivant
            End If
        End If
    End With
    End Sub
    Bonjour Yolak,

    Tu as du temps à perdre ?

  5. #5
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par NEC14 Voir le message
    Bonjour Yolak,

    Tu as du temps à perdre ?
    Oui malheureusement, et je m'excuse d'être venu polluer ce post, c'est pas mon genre...

    Pour me faire pardonner, je vais tout de même apporter ma contribution:
    Pourquoi réaffecter InStr(.Text, ".") à Pos une seconde fois ?
    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
    Private Sub TxtMontant_Change()
    Dim Pos As Integer
    Dim Decim As String
     
    With Me.TxtMontant
        Pos = InStr(.Text, ".")
        If Pos > 0 Then
            Decim = Mid(.Text, Pos + 1)
            If Len(Decim) >= 2 Then
                 ''''''''''Pos = InStr(.Text, ".")
                .Text = Left(.Text, Pos + 2)
                Me.TextBox2.SetFocus    'Control suivant
            End If
        End If
    End With
    End Sub
    Et allez hop, je propose même une solution !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub TxtMontant_Change()
        With Me.TxtMontant
            .Text = Replace(.Text, ",", ".")  'Pour éviter les pb de caractère de décimale
            If Len(.Text) > 3 Then
                If Mid(.Text, Len(.Text) - 2, 1) = "." Then
                    Me.CommandButton1.SetFocus
                End If
            End If
        End With
    End Sub

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    A Yolak

    dans TxtMontant tu écris 34.71
    le focus sort vers le contrôle suivant

    clique encore une fois dans TxtMontant et ajoute un chiffre après la virgule,
    Que remarques tu?

  7. #7
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Veuillez m'excuser mon cher,
    je n'avais pas finalisé mon code dans ce sens.

    Avec mes excuses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub TxtMontant_Change()
        With Me.TxtMontant
            .Text = Replace(.Text, ",", ".")  'Pour éviter les pb de caractère de décimale
            If Len(.Text) > 3 Then
                If Mid(.Text, Len(.Text) - 2, 1) = "." Then
                    .MaxLength = Len(.Text)
                    Me.CommandButton1.SetFocus
                End If
            End If
        End With
    End Sub
    De toute évidence et avec ma blague pourrie, me voilà mal vu :/

    Pour me rattraper, je propose même ceci:
    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
    Private Sub TxtMontant_Change()
        With Me.TxtMontant
            .Text = Replace(.Text, ",", ".")  'Pour éviter les pb de caractère de décimale
            If IsNumeric(.Text) Then
                If .TextLength  > 3 Then
                    If Mid(.Text, .TextLength - 2, 1) = "." Then
                        .MaxLength = .TextLength 
                        Me.CommandButton1.SetFocus
                    End If
                End If
            ElseIf .TextLength > 0 Then
                .Text = Mid(.Text, 1, .TextLength - 1)
            End If
        End With
    End Sub
    Qui teste si on saisit bien des chiffres

    EDIT : J'ai aussi changé les Len(.Text) par .TextLenght, ce qui me semble plus propre

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Avec ton dernier code
    écris 34.98
    Puis efface ce chiffre
    et essayes d'écrire 456700.98

  9. #9
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Il m'en veux, il m'en veux, il m'en veux

    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
    Private Sub TxtMontant_Change()
        Dim iPos As Integer
        With Me.TxtMontant
            .Text = Replace(.Text, ",", ".")  'Pour éviter les pb de caractère de décimale
            If IsNumeric(.Text) Then
                If Len(.Text) > 3 Then
                    If Mid(.Text, Len(.Text) - 2, 1) = "." Then
                        '.MaxLength = Len(.Text)
                        Me.CommandButton1.SetFocus
                    ElseIf .TextLength > InStr(1, .Text, ".") + 2 Then
                        .Text = Mid(.Text, 1, .TextLength - 1)
                    End If
                End If
            ElseIf .TextLength > 0 Then
                .Text = Mid(.Text, 1, .TextLength - 1)
            End If
        End With
    End Sub
    Tu t'es excusé, tu peux toujours supprimer cette blague
    Non,non j'assume

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Sinon une proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub TxtMontant_Change()
    Dim Pos As Integer
     
    With Me.TxtMontant
        Pos = InStr(.Text, ".")
        If Pos > 0 Then
            If Len(Mid(.Text, Pos + 1)) > 2 Then
                .Text = Left(.Text, Pos + 2)
                Me.TextBox2.SetFocus
            End If
        End If
    End With
    End Sub
    Bonne soirée

  11. #11
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    huhu à mon tour:

    Le focus n'est pas passé au textbox2 si je saisis 20.23 par ex

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Citation Envoyé par Yolak Voir le message
    Il m'en veux, il m'en veux, il m'en veux
    Essayes d'écrire 56789.98


    Le focus n'est pas passé au textbox2 si je saisis 20.23 par ex
    Oui certes, alors écris 20.230

    Sinon,
    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
    Private Sub TxtMontant_Change()
    Dim Pos As Integer
     
    With Me.TxtMontant
        Pos = InStr(.Text, ".")
        If Pos > 0 Then
            If Len(Mid(.Text, Pos + 1)) >= 2 Then
                If .SelStart > Pos Then
                    .Text = Left(.Text, Pos + 2)
                    Me.TextBox2.SetFocus
                End If
            End If
        End If
    End With
    End Sub

  13. #13
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Citation Envoyé par mercatog Voir le message
    As tu testé l'usine à gaz? Essayes d'écrire 56789.98
    Oui, ça marche...
    Non ??

  14. #14
    Membre actif Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Points : 206
    Points
    206
    Par défaut
    Note avec le recul: c'est vrai que c'est une usine à gaz....
    Bon... finalement j'aime bien la proposition choisie par NEC14...

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

Discussions similaires

  1. [XL-2007] problème avec une macro TCD
    Par wsanchez dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/06/2009, 21h05
  2. problème avec une macro
    Par jeanjack dans le forum Débuter
    Réponses: 2
    Dernier message: 21/04/2009, 09h32
  3. Problème avec une macro
    Par Nyck0las dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 28/11/2007, 15h04
  4. Problème avec une macro impression
    Par Border_xls dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/11/2007, 15h18
  5. Problème avec une macro faisant apel à un tableau Excell
    Par valouche dans le forum Macros et VBA Excel
    Réponses: 52
    Dernier message: 19/06/2007, 12h38

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