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 :

Intégration d'une grille de taux


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Par défaut Intégration d'une grille de taux
    Je suis débutant en VBA EXCEL et je souhaite trouver une solution à mon serieux problème qui est le suivant:
    j'ai créé un USERFORM ("PLACEMENT") avec des TEXTBOX intitulé (Montant, période, Taux). je voulais integrer une grille de taux au sein de mon commandbutton ("valider").

    par exemple: si le 50< Montant<100 et 10< période <90 le taux ne doit pas dépasser 1.20%, si ca dépasse le textbox "Taux" s'efface automatiquement et un message box se declenche " depassement de la grille de taux".

    j'ai plusieurs conditions à mettre en place au même temps, j'ai essayé la fonction If mais ca fonctionne pas. quelqu'un m'a dit qu'il faut utiliser une matrice et franchement aucune idée sur ca .

    Merci pour votre précieuse aide. Exemple.xlsm

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par LANGAZOU Voir le message
    j'ai plusieurs conditions à mettre en place au même temps, j'ai essayé la fonction If mais ca fonctionne pas. quelqu'un m'a dit qu'il faut utiliser une matrice et franchement aucune idée sur ca .
    Bonjour,


    Si votre fonction if ne fonctionne pas correctement, c'est que vos bornes se chevauchent.

    Pour plus de lisibilité, vous devriez utiliser des Select case.

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    Private Sub TextBox11_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
     
            Select Case TextBox7
                   Case 90 To 179
                        Select Case TextBox3
                            Case 31 To 100
                                 If CDbl(TextBox11) > 0.5 Then
                                    MsgBox "Dépassement de la grille, le taux doit être inférieur à 0,5"
                                    TextBox11 = ""
                                    Exit Sub
                                 End If
                            Case 101 To 500
                                 If CDbl(TextBox11) > 1.25 Then
                                    MsgBox "Dépassement de la grille, le taux doit être inférieur à 1,25"
                                    TextBox11 = ""
                                    Exit Sub
                                 End If
                            Case 501 To 3000
                                 If CDbl(TextBox11) > 1.5 Then
                                    MsgBox "Dépassement de la grille, le taux doit être inférieur à 1,5"
                                    TextBox11 = ""
                                    Exit Sub
                                 End If
     
                            Case 3001 To 5000
                                 If CDbl(TextBox11) > 1.6 Then
                                    MsgBox "Dépassement de la grille, le taux doit être inférieur à 1,6"
                                    TextBox11 = ""
                                    Exit Sub
                                 End If
                        End Select
                   Case 180 To 359
                        Select Case TextBox3
                            Case 0 To 100
                                 If CDbl(TextBox11) > 0.7 Then
                                    MsgBox "Dépassement de la grille, le taux doit être inférieur à 0,7"
                                    TextBox11 = ""
                                    Exit Sub
                                 End If
                            Case 101 To 500
                                 If CDbl(TextBox11) > 1.3 Then
                                    MsgBox "Dépassement de la grille, le taux doit être inférieur à 1,3"
                                    TextBox11 = ""
                                    Exit Sub
                                 End If
                            Case 501 To 3000
                                 If CDbl(TextBox11) > 1.6 Then
                                    MsgBox "Dépassement de la grille, le taux doit être inférieur à 1,6"
                                    TextBox11 = ""
                                    Exit Sub
                                 End If
     
                        End Select
            End Select
     
    End Sub
    Nb : Il ne suffit pas d'indiquer que le taux est dépassé, il faut en préciser la limite dans le message.


    Personnellement, je trouve irritant de recevoir un message indiquant que j'ai dépassé une limite. Il serait plus judicieux d'ajouter un événement sur changement de valeur de la période dans un label comme dans le vidage d'écran ci-dessous :
    Pièce jointe 166402


    Pour cela ajouter ou modifier les événements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub TextBox3_Change()
    TextBox3 = Format(TextBox3, "# ### ##0")
    If Val(TextBox7) > 0 Then LabelMessageTaux.Caption = MessageTaux(TextBox7, TextBox3)
    End Sub
     
    Private Sub TextBox7_Change()
       LabelMessageTaux.Caption = MessageTaux(TextBox7, TextBox3)
    End Sub

    Et la fonction MessageTaux dans un module standard :

    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
     
     
    Function MessageTaux(ByVal Periode As Variant, ByVal Montant As Variant) As String
     
            MessageTaux = ""
            If Montant = "" Or Periode = "" Then MessageTaux = "Pour calculer le taux, saisissez un montant et définissez la période !"
     
            Select Case Periode
                   Case 90 To 179
                        Select Case Montant
                            Case 31 To 100
                                    MessageTaux = "Le taux doit être inférieur à 0,5"
                            Case 101 To 500
                                    MessageTaux = "Le taux doit être inférieur à 1,25"
                            Case 501 To 3000
                                    MessageTaux = "Le taux doit être inférieur à 1,5"
                            Case 3001 To 5000
                                    MessageTaux = "Le taux doit être inférieur à 1,6"
                        End Select
                   Case 180 To 359
                        Select Case Montant
                            Case 0 To 100
                                    MessageTaux = "Le taux doit être inférieur à 0,7"
                            Case 101 To 500
                                    MessageTaux = "Le taux doit être inférieur à 1,3"
                            Case 501 To 3000
                                    MessageTaux = "Le taux doit être inférieur à 1,6"
                        End Select
            End Select
     
    End Function
    Enfin, je vous souhaite d'avoir à maintenir ce code d'ici quelques mois... Il vous faut nommer vos objets avec des noms clairs pour ne pas gaspiller votre temps à comprendre à quoi correspondent vos Textbox1, 2, 3.... C'est irritant ^1000. Exemples : TextBoxMontant, TextBoxPeriode, TextBoxTaux....



    Cordialement.

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    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 122
    Par défaut
    Salut

    Juste pour information Langazou, cette écriture ne fonctionne pas en vb

    l'écriture correct est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (90 <= i) and (i < 180) Then

    Sinon pour simplifier la maintenance, il serait peut-être possible de faire un tableau dans le fichier excel, de placer les bornes Montant et Nb jour correspondant à chaque taux. Il suffit ensuite de faire une boucle dans le code qui utilise c'est information dans une structure if.


    [Edit]

    Le tableau nommé Tab_Taux, placé sur la Feuil1(CodeName) donc l'onglet Historique.

    Nom : 2015-01-17_094523.png
Affichages : 152
Taille : 6,4 Ko

    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
    Sub teste()
    Dim Nbj As Integer
    Dim Montant As Integer
    Dim Taux As Double
    Dim TheRow As ListRow
     
    Nbj = 100
    Montant = 800
    Taux = 2
     
    'On boucle sur les lignes du tableau
    For Each TheRow In Feuil1.ListObjects("Tab_Taux").ListRows
        'On recherche la ligne qui correspond à critère Montant et Nbr de jour
        If (Nbj >= TheRow.Range(1, 1).Value) And (Nbj < TheRow.Range(1, 2).Value) And (Montant >= TheRow.Range(1, 3).Value) And (Montant < TheRow.Range(1, 4).Value) Then
            'On controle le taux
            If Taux > TheRow.Range(1, 5).Value Then
                'Traitement
                'On quitte la boucle
                Exit For
            End If
        End If
    Next
    End Sub

    Il est très probable que la même chose puisse être faite directement dan le tableau, en utilisant une Mise En Forme Conditionnelle qui irait chercher dans le tableau Tab_Taux avec la fonction Somme.prod (je pense).
    Plus besoin du userforme, l'utilisateur tape directement das le tableau et la case Taux passe en rouge si le taux ne colle pas au critère saisi


    [/Edit]
    ++
    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

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Salut

    Juste pour information Langazou, cette écriture ne fonctionne pas en vb

    Bonjour Qwazerty,

    Tu as raison, je n'avais même pas tilté.

    Cordialement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Par défaut Iintégration de la Grille de Taux
    Bonjour,

    Je vous remercie énormément pour votre aide précieuse.

    Mr Quazerty, votre solution est très pertinente si j'aimerais un jours changer la grille des taux alors ça sera très facile de modifier le tableau que modifier la totalité du code.
    je suis débutant en vba et j'apprends de petit à petit alors votre solution me semble un peu compliquée parce que je n'arrive pas à renommer le tableau (tab_taux)et l’intégrer dans ma macro actuelle. j'ai créé le tableau sous la "Feuil1" et je n'arrive pas à le renommer et l’intégrer . ci-joint ma macro modifiée et le code déjà intégré sous ma commandbutton qui ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For Each TheRow In Feuil1.ListObjects("Feuil1").ListRows
        'On recherche la ligne qui correspond à critère Montant et Nbr de jour
        If (TextBox7 >= TheRow.Range(2, 1).Value) And (TextBox7 < TheRow.Range(2, 2).Value) And (TextBox3 >= TheRow.Range(1, 3).Value) And (TextBox3 < TheRow.Range(2, 4).Value) Then
            'On controle le taux
            If TextBox11 > TheRow.Range(2, 5).Value Then
                'Traitement
                'On quitte la boucle
                Exit For
            End If
        End If
    Next
    je vous remercie encore une fois pour votre réactivité et votre aide.

    Exemple - Copie.xlsm

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    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 122
    Par défaut
    Salut

    Il faut cliquer dans le tableau ou sont inscrite les données puis aller dans le menu, onglet Insertion -> Tableau.
    Ça crée un tableau sur la feuille.
    Ensuite lorsqu'on clique dans le tableau, un onglet s'ajoute au bandeau menu en haut contenant les options liés au tableau, entre autre, son nom.

    ++
    Ps: si ça ne dérange pas, je préfère le tutoiement.

    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

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

Discussions similaires

  1. [Debutant(e)]Quel composant utiliser pour faire une grille
    Par elitost dans le forum Composants
    Réponses: 7
    Dernier message: 21/06/2004, 20h44
  2. [Débutant] Affichage d'une grille
    Par Mathieu.J dans le forum OpenGL
    Réponses: 25
    Dernier message: 13/06/2004, 19h38
  3. : Adapter la taille d'une grille
    Par SteelBox dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/07/2003, 07h08
  4. Désactiver la multi-sélection d'une grille
    Par Riko dans le forum Composants VCL
    Réponses: 6
    Dernier message: 17/06/2003, 09h47
  5. jaimerais savoir commen creer une grille.......
    Par zephyr dans le forum Flash
    Réponses: 5
    Dernier message: 29/04/2003, 12h14

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