Bonjour,
Ci-joint la 2ème partie
Elle contient la correction de la partie 1 (pour les Tarifs).
Maintenant, créez cet UserForm comme le modèle .
Programmez-le afin de pouvoir Sauvegarder sur la feuille Base, les renseignements
saisis . Commencer Progressivement, en créant d’abord l’UserForm
Puis en initialisant le TextBox du Nom en Nom Propre, le Combobox de Destination et le Prix à payer
pour seulement la 1ère classe. Allons-y par palier
Attribuez par macro le lancement aux Boutons présents sur les deux onglets
Pour info, cet exercice est tiré d’un tuto de l’excellent Joël GARBE, mais qui l’à présenter sous forme de formulaire sur feuille (non sur USF) et avec des formules de calculs (non en VBA), mais, cela peut aider!!
Sur le classeur joint, créer un nouveau USF ressemblant au modèle (il y aura donc 2 USF, celui pour les TARIFS que vous avez déjà établi, et celui-ci)
Pour le moment, effectuez juste une macro pour :
Initialiser dans l’USF le combobox avec les DESTINATIONS de la feuille TARIFS
Renseigner le prix à payer avec le prix de 1er classe suivant la Destination dans le Label « Prix à Payer »
Renseigner la feuille BASE, avec le TextBox du Nom en Nom Propre, la Destination et le prix à payer
Le reste se fera au fur et à mesure, sauf si vous vous sentez et vous voulez vous lancer
Le Tuto de YouTube provient du concepteur Joël GARBE (qui à d’ailleurs un site perso très bien fait http://garbe.joel.free.fr/ ) .
Lui avait effectué la même conception mais avec des contrôles sur feuille et formule de calcul, vous pouvez donc vous en aider pour me transformer tout en VBA.
Tu peux l’utiliser par exemple pour qu’il te fasse la macro, et à toi ensuite la mettre en place dans ton montage
car l’enregistrement, c’est du brut de brut
Option Explicit
Dim Dl%
Private Sub BSauvegarde_Click()
If TextBox1.Value = « » Then
MsgBox " Vous devez remplir un NOM !!! "
End If
Dl = Range(« A » & Rows.Count).End(xlUp).Row + 1
Sheets(« Base »).Range(« A » & Dl) = TextBox1.Value
Unload Me
End Sub
Tu es bien parti
Je t’ai rajouté deux petites lignes
Une qui replace le curseur sur le TextBox pour le renseigner
l’autre pour sortir de la macro, sans fermer l’USF
Option Explicit
Dim Dl%
Private Sub BSauvegarde_Click()
If TextBox1.Value = "" Then 'Si le Textbox1 est vide
MsgBox " Vous devez remplir un NOM !!! " 'j'affiche un message
TextBox1.SetFocus 'je replace le focus (curseur)sur le Textbox1 qui est vide
Exit Sub 'Je sort de la macro 'Private Sub BSauvegarde_Click()) pour inscrire le Nom
End If
Dl = Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("Base").Range("A" & Dl) = TextBox1.Value
Unload Me
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Reste plus qu’à renseigner le Combobox avec les données des Tarifs (Désignation) et le Label pour afficher le prix
Stop là, tout à côté
le ComboBox doit être initialisé dans l’USF à son ouverture
Càd que quand l’USF s’ouvre, toutes les destinations doivent être en mémoire dans le Combobox
Donc on recherche bien la Dl (pour toi Di) de la feuille Tarifs
et on incrémente les destinations (ITEM) dans une boucle for / Next
par ex: With la feuille 1 pour la recherche
je cherche la Di de la colonne A
pour une boucle allant de 2 à la Di avec For
dans le combobox j’ajoute les items de la cellule (Di pour la ligne, 1 pour la colonne A) Next pour la fin de boucle End with pour fermer le With
ensuite, il suffit de rentrer depuis le bouton de validation, à la suite du remplissage de nom de mettre la valeur qui se trouvera dans le combobox dans la cellule de la même ligne sur la colonne B
Pour le tarif en 1ère classe, ce sera la même ligne avec un décalage d’une seule colonne (Offset)
J’ai suivi les progrès de @kiss6 et j’ai essayé d’avancer un peu, mais je ne progresse plus !
Je n’explique pas en détail tout ici, mais avec le ComboBox je recherche dans la liste “Destination”, bref je n’ais pas su mettre en œuvre la recherche avec une boucle With
Maintenant, je voudrai que si le ComboBox n’est pas vide et que l’OptionButton1 est sélectionné alors rechercher dans la liste Classe1 et afficher la résultat dans le Label “Classe1” ou si le ComboBox n’est pas vide et que l’OptionButton2 est sélectionné alors rechercher dans la liste Classe2 et afficher le résultat dans le Label “Classe2”.
Donc voilà, je pense que j’ai le bon raisonnement, mais bien sûr, je n’arrive pas a le mettre en œuvre.
@Mimimathy, un p’tit coup de pouce pour nous faire avancer le bouchon
Week-end difficile pour moi
Je viens de faire ça pour le trajet:
Private Sub CheckBox1_Click()
'Si case à cocher Trajet vrai et ComboBox diff de vide alors aller / retour
If CheckBox1.Value = True And ComboBox1 <> "" Then
LTrajet = "Aller / Retour"
'Sinon
Else
'Si case à cocher Trajet faux et ComboBox diff de vide alors aller
If CheckBox1.Value = False And ComboBox1 <> "" Then
LTrajet = "Aller"
End If
End If
End Sub
Bon MDO, tu m’as épaté avec ton initialisation du combobox (Je ne connaissais pas dans ce genre) (A savoir que dans cette correction, je vous mettrai une feuille COMPLEMENT avec les differentes façon de procéder)
Après, vous vous cassez la tête pour la 1ere ou 2eme classe,
Dans ma demande, pour l’instant, ne vous occupez pas des Classes (on y va “molo”)
je veux simplement que l’on retrouve la ligne qui donne la Destination et avec un décalage (Offset en VBA) on applique le montant dans l’USF et ensuite dans la Base
Donc soit avec un Equiv (Match en VBA) ou par FIND
Fouinez un peu sur GOGOL, c’est assez simple.
Et surtout, noubliez pas que la touche F1 est capable aussi de vous aider par des exemple de Microsoft, aussi bien sur Excel que VBA
On tape un début de fonction, on clique sur la fonction, F1 et on étudie l’aide
Je vous laisse pour cette nuit, demain à 6h00, je mets en ligne la réponse, et vous aurez perdu ma gratitude
Bonjour à tous,
Voici donc le classeur avec la solution pour le ComboBox et l’affichage du Prix à payer
Maintenant, suivant le choix des 2 OptionButton, il faut renseigner, suivant la Classe
cochée, le bon Prix à payer dans le Label, ainsi que dans la Base
Afficher aussi dans la colonne C de la Base 1° Classe ou 2° Classe
Initialiser le bouton option 2°classe afin qu’il soit coché à l’ouverture
Créer une macro Calcul qui servira à récupérer les valeurs des différentes variables (1° ou 2° classe) pour l’instant et d’effectuer le calcul et l’affichage du prix à payer, et ce à chaque changement des différents contrôles
Tu va trop vite, je demande simplement de gérer les options boutons, laisse le reste en suspend et concentre toi sur les 2 options de classe
(Je t’ai remis ton classeur sans mes demandes de Spin, Scroolbar et Chekbox)
Private Sub OB1_Change()
If OB1.Value = True And OB2.Value = False Then 'Si OB1 cocher et OB2 non cochet
LClasse = "1° Classe" 'Alors mettre dans LClasse 1°Classe
Else 'Sinon
LClasse = ""
End If
End Sub
Private Sub OB1_Click() serait mieux
L’ajout And OB2.Value = False pas besoin, c’est une option, si c’est pas un c’est l’autre
Ceci également Else 'Sinon LClasse = ""
Idem pour l’autre bouton
Et je n’ai pas demandé d’ajouter un label pour savoir la classe, la classe c’est celle qui est cochée, d’où le fait
qu’un des 2 boutons soit coché à l’ouverture de l’USF, soit par un ajout dans userform initialize, soit dans les propriétés (on va dire 2° classe coché à l’ouverture)
Ensuite, comme on connait la “LigneDestination” (N° de la ligne dans Tarifs pour la Destination), il suffit d’inscrire dans le label du prix, sur la formule déjà existante, le bon tarif qui se trouve soit en colonne 2 ou 3 , et son report sur l’appui de la sauvegarde
Mais je vois que tu as déjà jeté un sur les propriétés des contrôles cela donnera de l’avance pour la suite