Programmation VBA EXCEL [Résolu/Fermé]

Signaler
Messages postés
95
Date d'inscription
vendredi 16 janvier 2015
Statut
Membre
Dernière intervention
8 novembre 2015
-
LANGAZOU
Messages postés
95
Date d'inscription
vendredi 16 janvier 2015
Statut
Membre
Dernière intervention
8 novembre 2015
-
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.

11 réponses

Messages postés
27
Date d'inscription
mardi 30 septembre 2014
Statut
Membre
Dernière intervention
7 septembre 2016
2
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.
LANGAZOU
Messages postés
95
Date d'inscription
vendredi 16 janvier 2015
Statut
Membre
Dernière intervention
8 novembre 2015

Encore Ca marche pas . Peux-tu tester ma macro si ca te derange pas ?
Merci.
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 008
Bonjour LANGAZOU,
Je regarde votre fichier et vous donne réponse, patience.
Comment se déclenche votre code... !

Salutations.
Le Pingou
Messages postés
95
Date d'inscription
vendredi 16 janvier 2015
Statut
Membre
Dernière intervention
8 novembre 2015

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
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 008
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... ?

Messages postés
95
Date d'inscription
vendredi 16 janvier 2015
Statut
Membre
Dernière intervention
8 novembre 2015

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.
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 008
Bonjour,
Merci, pour ce soir c'est tout pour moi.
Bon dimanche.
Messages postés
95
Date d'inscription
vendredi 16 janvier 2015
Statut
Membre
Dernière intervention
8 novembre 2015

Bonjour,

à tré bientot Le Pingou .

Merci et bon dimanche
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 008
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

Messages postés
95
Date d'inscription
vendredi 16 janvier 2015
Statut
Membre
Dernière intervention
8 novembre 2015

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.
Messages postés
9517
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 décembre 2019
1 008
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.
Messages postés
95
Date d'inscription
vendredi 16 janvier 2015
Statut
Membre
Dernière intervention
8 novembre 2015

bonjour,

Désolé J'ai abouti à mon résultat souhaité ,je vous remercie Mr le Pingou pour votre suivi et votre aide préciseuse.

bonne journée et à très bientot :)