Programmation VBA EXCEL
Résolu
LANGAZOU
Messages postés
100
Statut
Membre
-
LANGAZOU Messages postés 100 Statut Membre -
LANGAZOU Messages postés 100 Statut Membre -
Bonjour,
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 intégrer 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 déclenche " depassement de la grille de taux".
La grille de taux se situe au niveau d'un tableau ("Feuil1") et j'ai plusieurs conditions à mettre en place au même temps. je voulais utiliser le code suivant mais ça fonctionne pas.
Dim TheRow As ListRow
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
ci joint mon fichier :https://www.cjoint.com/?0ArtQWqwmyD
Merci pour votre précieuse aide.
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 intégrer 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 déclenche " depassement de la grille de taux".
La grille de taux se situe au niveau d'un tableau ("Feuil1") et j'ai plusieurs conditions à mettre en place au même temps. je voulais utiliser le code suivant mais ça fonctionne pas.
Dim TheRow As ListRow
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
ci joint mon fichier :https://www.cjoint.com/?0ArtQWqwmyD
Merci pour votre précieuse aide.
A voir également:
- Programmation VBA EXCEL
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
11 réponses
Bonjour
Je n'ai pas essayé votre code, mais peut-être pourriez-vous tenter de mettre les Exit For et End If dans le bon ordre.
Il ne me SEMBLE pas que cela soit correct.
Je n'ai pas essayé votre code, mais peut-être pourriez-vous tenter de mettre les Exit For et End If dans le bon ordre.
Il ne me SEMBLE pas que cela soit correct.
Bonjour LANGAZOU,
Je regarde votre fichier et vous donne réponse, patience.
Comment se déclenche votre code... !
Salutations.
Le Pingou
Je regarde votre fichier et vous donne réponse, patience.
Comment se déclenche votre code... !
Salutations.
Le Pingou
Salut Pingou,
Ce code je l'ai trouvé quelque part et je veux l'intégrer au sein de mon commandbutton. je le trouve très adéquat et correspond mieux que mettre plusieurs fonctions SELECT ou IF.juste pour info les conditions à respecter sous la Feuil1 ne sont q'un petit exemple parmi plusieurs conditions que je vais encore les rajouter.
Merci pour votre réponse
Ce code je l'ai trouvé quelque part et je veux l'intégrer au sein de mon commandbutton. je le trouve très adéquat et correspond mieux que mettre plusieurs fonctions SELECT ou IF.juste pour info les conditions à respecter sous la Feuil1 ne sont q'un petit exemple parmi plusieurs conditions que je vais encore les rajouter.
Merci pour votre réponse
Bonjour,
Merci pour l'information.
J'ai la réponse à ma question : le code se déclenche dès l'ouverture du classeur.
En marge les procédures dans les 2 modules (Module1 et Module2) n'ont strictement rien à voir avec votre formulaire.
Le code du formulaire n'est pas correct et en plus il manque l'initialisation du formulaire, il est vide..... pas de choix pour [Nom] et [Devise].... Étrange.
Pouvez-vous expliquer ce que vous voulez réaliser et le résultat à obtenir (ou insérer les données validées... ?
Merci pour l'information.
J'ai la réponse à ma question : le code se déclenche dès l'ouverture du classeur.
En marge les procédures dans les 2 modules (Module1 et Module2) n'ont strictement rien à voir avec votre formulaire.
Le code du formulaire n'est pas correct et en plus il manque l'initialisation du formulaire, il est vide..... pas de choix pour [Nom] et [Devise].... Étrange.
Pouvez-vous expliquer ce que vous voulez réaliser et le résultat à obtenir (ou insérer les données validées... ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
le module 1 et 2 n'ont rien à voir avec le formulaire c'est juste des test. cette macro c'est juste un petit exemple. si j'aurais la réponse sur cette miniature je vais recopier le code sur ma macro d'origine (qui est plus clair et plus compliquée).
je veux seulement savoir utiliser et intégrer le code que je t'avais cité (for Each..) dans ma commandbutton. je veux la création d'une alerte à chaque dépassement de la grille sous la Feuil1.
je veux seulement savoir utiliser et intégrer le code que je t'avais cité (for Each..) dans ma commandbutton. je veux la création d'une alerte à chaque dépassement de la grille sous la Feuil1.
Bonjour,
Première chose, votre code ne marche pas car vous faites référence à [ListObjects("Tab_Taux")] qui n'existe pas .... Et par analogie l'instruction [TheRow.Range(1, 1).Value)] est aussi erronée....
Alors je vous décris ce que je pense que vous voulez réaliser : entrer des données dans le formulaire [UserForm1] (Montant, Nb Jours et Taux) et contrôler que ceux-ci soient dans la fourchette des valeurs de la ligne correspondante du tableau nommée [Tab_Taux] de la feuille [Feuil1] et en cas de non concordance un message d'alerte vous demande de modifier la/es valeur/s.
Si tout en ordre on écrit les valeurs à la suite dans la feuille [Historique].
Note : Le taux est imposé selon les valeurs NBj et Montant donc il devrait être entré automatiquement dans le formulaire....Oui / Non
J'attends votre réponse pour poursuivre
Première chose, votre code ne marche pas car vous faites référence à [ListObjects("Tab_Taux")] qui n'existe pas .... Et par analogie l'instruction [TheRow.Range(1, 1).Value)] est aussi erronée....
Alors je vous décris ce que je pense que vous voulez réaliser : entrer des données dans le formulaire [UserForm1] (Montant, Nb Jours et Taux) et contrôler que ceux-ci soient dans la fourchette des valeurs de la ligne correspondante du tableau nommée [Tab_Taux] de la feuille [Feuil1] et en cas de non concordance un message d'alerte vous demande de modifier la/es valeur/s.
Si tout en ordre on écrit les valeurs à la suite dans la feuille [Historique].
Note : Le taux est imposé selon les valeurs NBj et Montant donc il devrait être entré automatiquement dans le formulaire....Oui / Non
J'attends votre réponse pour poursuivre
Bonjour ,
J'ai bien tourné ma macro avec la création du tableau sous la Feuil1. mais le problème c'est que le message d'erreur qui s'affiche ne contient pas la borne sup dépassé par exple "dépassement de la grille de taux :1.60" comment procéder svp à rajouter la borne sup dans le message box en conservant le code initial ci -dessous:
Dim TheRow As ListRow
For Each TheRow In Feuil3.ListObjects("Tab_Taux").ListRows
'On recherche la ligne qui correspond à critère Montant et Nbr de jour
If TextBox3 <> "" And TextBox7 <> "" And TextBox11 <> "" And ComboBox1 <> "" And ComboBox2 <> "" Then
If (CDbl(TextBox7.Text) >= TheRow.Range(1, 1).Value) And (CDbl(TextBox7.Text) < TheRow.Range(1, 2).Value) And (CDbl(TextBox3.Text) >= TheRow.Range(1, 3).Value) And (CDbl(TextBox3.Text) < TheRow.Range(1, 4).Value) Then
'On controle le taux
If CDbl(TextBox11.Text) > TheRow.Range(1, 5).Value And CheckBox1.Value = False Then
TextBox11.Value = ""
MsgBox " dépassement de la grille "
CheckBox1.Visible = True
'On quitte la boucle
Exit For
End If
End If
End If
Next
j'ai crée un checkbox1 ("Accord sup") qui devient visible lorsque je tape un taux supérieur à la grille de taux et il me faut que je le coche afin de valider mon placement avec un taux supérieur à la grille.
https://www.cjoint.com/?0AsxhnW6WsO
Merci pour votre réponse.
J'ai bien tourné ma macro avec la création du tableau sous la Feuil1. mais le problème c'est que le message d'erreur qui s'affiche ne contient pas la borne sup dépassé par exple "dépassement de la grille de taux :1.60" comment procéder svp à rajouter la borne sup dans le message box en conservant le code initial ci -dessous:
Dim TheRow As ListRow
For Each TheRow In Feuil3.ListObjects("Tab_Taux").ListRows
'On recherche la ligne qui correspond à critère Montant et Nbr de jour
If TextBox3 <> "" And TextBox7 <> "" And TextBox11 <> "" And ComboBox1 <> "" And ComboBox2 <> "" Then
If (CDbl(TextBox7.Text) >= TheRow.Range(1, 1).Value) And (CDbl(TextBox7.Text) < TheRow.Range(1, 2).Value) And (CDbl(TextBox3.Text) >= TheRow.Range(1, 3).Value) And (CDbl(TextBox3.Text) < TheRow.Range(1, 4).Value) Then
'On controle le taux
If CDbl(TextBox11.Text) > TheRow.Range(1, 5).Value And CheckBox1.Value = False Then
TextBox11.Value = ""
MsgBox " dépassement de la grille "
CheckBox1.Visible = True
'On quitte la boucle
Exit For
End If
End If
End If
Next
j'ai crée un checkbox1 ("Accord sup") qui devient visible lorsque je tape un taux supérieur à la grille de taux et il me faut que je le coche afin de valider mon placement avec un taux supérieur à la grille.
https://www.cjoint.com/?0AsxhnW6WsO
Merci pour votre réponse.
Bonjour,
Pour ce soir je vous remercie pour les réponses à mon message... pas trouvées....
En plus le code en question n'est pas le même que celui du fichier précédent qui lui bloc sur l'erreur de mon message...
Sur le fichier actuel si j'entre comme montant le nombre 1000 il se transforme en 36 526 comme par miracle ... difficile de comprendre...
Et ensuite la procédure m'indique une autre erreur et va se positionné sur une fonction du module 1.
Pour ce soir je vous remercie pour les réponses à mon message... pas trouvées....
En plus le code en question n'est pas le même que celui du fichier précédent qui lui bloc sur l'erreur de mon message...
Sur le fichier actuel si j'entre comme montant le nombre 1000 il se transforme en 36 526 comme par miracle ... difficile de comprendre...
Et ensuite la procédure m'indique une autre erreur et va se positionné sur une fonction du module 1.
Merci.