Gérer les combobox et changer simultanément la valeur de 2 checkbox
Bonjour,
Vous trouverez ci-joint une partie de mon fichier, où normalement tous les éléments nécessaires à la résolution de mon problème, y sont.
Lorsque l'on ajoute un client, nous allons également renseigner le nombre de personnes présentent sur l'embarcation. Une fois la validation faire, la fiche va se ré ouvrir autant de fois que d'individus sur l'embarcation. La première feuille qui est rempli, est la feuille du client " Loueur" puis les suivantes (qui correspondent aux individus de la même embarcation) seront les accompagnateurs
Voici ce que je souhaite faire :
- Lors de la PREMIÈRE saisie, c'est à dire du Loueur, je souhaiterais que la case catégorie soit directement remplis par Loueur.
- Lors de la PREMIÈRE saisie, le nombre d'individus sur l'embarcation est donc égale au nombre de personnes qu'il reste à saisir. J'aimerai donc que lorsque je saisi la textbox Nbr, la textbox Nbr.Value se remplisse automatiquement avec la même valeur.
- Lors des saisies qui suivent la première (Si il y a plus de 1 individu sur l'embarcation), la combobox "catégorie" va automatiquement passer de Loueur à Accompagnateur.
J'espère avoir été clair, si ce n'est pas le cas, n'hésitez pas à me le dire pour que j'essaye de clarifier les choses ! :)
Merci d'avance à vous !
Bonjour
1. Lors de la PREMIÈRE saisie, c'est à dire du Loueur, je souhaiterais que la case catégorie soit directement remplis par Loueur.
Modifiez ce code dans votre USerform
Private Sub UserForm_Initialize()
'---------------------------------------------------------------------
' Création des éléments qui constituent la listbox du Type de Location
'---------------------------------------------------------------------
With Type_Location
.AddItem "Catamaran"
.AddItem "Dériveur"
End With
With Catégorie
.AddItem "Loueur"
.AddItem "Accompagnateur"
.Value = "Loueur"
End With
End SubPetit conseil, évitez les accents dans les noms de vos objets dans votre userform. Par exemple enlevez l'accent sur le e de catégorie --> Categorie
Nbr.value ? c'est pas Nbrbis dont vous parlez ?2. Lors de la PREMIÈRE saisie, le nombre d'individus sur l'embarcation est donc égale au nombre de personnes qu'il reste à saisir. J'aimerai donc que lorsque je saisi la textbox Nbr, la textbox Nbr.Value se remplisse automatiquement avec la même valeur.
Merci c'est parfait pour le premier et le dernier point que je voulais mettre en place ! Le menu déroulant se change bien automatiquement et les bonnes valeurs se mettent !
Pour le second point, oui, autant pour moi, c'est bien nbrbis.Value qui doit prendre la valeur nbr.Value que l'on va rentrer à la première saisie du formulaire
Pour le secone point, oui, autant pour moi, c'est bien nbrbis.Value qui doit prendre la valeur nbr.Value que l'on va rentrer à la première saisie du formulaire
Ok mais vous pouvez entrer une deuxième valeur après la validation ?? Pour bien comprendre comment vous fonctionnez. Ce sont les mots "première saisie" que je voudrais comprendre
Voici une explication plus concrète pour mieux vous expliquer le problème :
La première saisie, correspond au client qui loue l'embarcation, d'où la categorie " Loueur". Sa famille l'accompagne et ils sont donc 4 sur l'embarcation. Par conséquent, je vais mettre "4" à nbr.value ( C'est à dire le nombre de personnes sur l'embarcation). Personne n'a pour l'instant été enregistré, par conséquent, on a forcément à cette étape (première saisie, c'est à dire le client qui loue), nbrbis.value = Nbr.value : Il reste autant de personne à enregistrer que de personnes présentent sur l'embarcation.
( Quand on valide le formulaire, l'individu est enregistré dans la base puis le formulaire réinitialise les données qu'il faut remplir pour l'accompagnateur suivant et ainsi de suite )
Une fois la première validation faite, on passe aux personnes qui accompagnent notre loueur sur l'embarcation, d'où la catégorie " Accompagnateur". A ce stade, nbrbis.Value = Nbrbis.Value-1 ! On a ajouté l'individu précédent, il reste donc 1 personne de moins à ajouter dans la base. On va donc boucler sur les accompagnateurs de cette manière. Lorsque Nbrbis.Value atteint 0, cela signifie que l'on a rentré tous les individus ! Par conséquent la boucle est terminée et on s’arrête.
J'espère vous avoir bien expliqué ce qui vous bloquait !
Ainsi, nbr.Value ne sera saisi qu'une seule fois lors du client " loueur" ( Ici 4 )
Ensuite Nbrbis.Value va donc successivement prendre les valeurs suivantes :
Nbrbis.Value = Nbr.Value = 4 ( Client Loueur, premier formulaire )
Nbrbis.Value = Nbrbis.Value - 1 = 3 ( Client accompagnateur, deuxième formulaire )
Nbrbis.Value = Nbrbis.Value - 1 = 2 ( Client accompagnateur, troisième formulaire )
Nbrbis.Value = Nbrbis.Value - 1 = 1 ( Client accompagnateur, quatrième formulaire )
La boucle s'arrete, les 4 personnes ont été saisies
Vous pouvez essayer avec ce code à ajouter dans l'userform
Private Sub Nbr_Change()
If Nbr.Value > 1 Then
Catégorie.Value = "Accompagnateur"
Nbrbis.Value = Nbr.Value
End If
End SubA mon avis je pense que mettre accompagnateur serait plus normal dans la sub valider dans le dernier ELSE. De cette sorte, le mot accompagnateur n'apparaitra que si vous valider le loueur
D'autre part, j'ai aussi changé un peu une partie du code pour la validation afin de ne pas répéter deux fois les mêmes lignes. Si vous voulez je vous le poste après test de la macro ci-dessus
Merci beaucoup c'est enfin nickel !! J'avais enfaite les bonnes formules, mais je ne les avais pas mises aux bons endroits ,' d'où mes soucis ! Problèmes rectifié grâce à vous, un grand merci !
Parfait
Voici la partie de code "Valider" modifié jusque la mention "Création des autres personnes..."
Private Sub Valider_Click()
Dim premiere_ligne_vide As Integer, index as integer, index_fiche As Integer, lig As Integer
Dim Client_En_Base As Boolean
Dim i As Byte
premiere_ligne_vide = WorksheetFunction.CountA(Sheets("Client").Range("B:B")) + 1
Client_En_Base = False
index = 3
' -------------------------------------------------------------------
' Ajout du client
' Création des éléments dans la feuille pour créer un fichier PDF
' -------------------------------------------------------------------
While (Client_En_Base = False) And (index <= premiere_ligne_vide - 1)
' Il faut que le nom ET le prénom soient les memes
If (Sheets("Client").Cells(index, 2).Value) = UserForm1.Nom_Client.Value And (Sheets("Client").Cells(index, 3).Value) = UserForm1.Prénom_Client.Value Then
Client_En_Base = True
index_fiche = index
End If
index = index + 1
Wend
If Client_En_Base Then
If MsgBox("La fiche est déjà en base. Voulez vous l'écraser", vbYesNo) = vbYes Then lig = index_fiche
Else: lig = premiere_ligne_vide
End If
If lig > 0 Then
With Sheets("Client")
.Cells(lig, 2).Value = UserForm1.Nom_Client.Value
.Cells(lig, 3).Value = UserForm1.Prénom_Client.Value
.Cells(lig, 4).Value = UserForm1.Date_Client.Value
.Cells(lig, 5).Value = UserForm1.Tel_Client.Value
.Cells(lig, 6).Value = UserForm1.Adresse_Client.Value
.Cells(lig, 7).Value = UserForm1.CP_Client.Value
.Cells(lig, 8).Value = UserForm1.Ville_Client.Value
.Cells(lig, 9).Value = UserForm1.Type_Location.Value
.Cells(lig, 10).Value = UserForm1.Date_Location.Value
.Cells(lig, 11).Value = UserForm1.Code_client.Value
For i = 1 To 8
.Cells(lig, i + 11).Value = UserForm1.Controls("CheckBox" & i).Value
Next i
End With
End If
'---------------------------------------------------------------------------------------------------
' Création des autres personnes présentes sur le meme bateau que le client tout juste renseigné
'-On aurait encore pu simplifier un peu sur Index_fiche mais j'ai laissé en l'état
Bonjour Joh.v et le forum
@Dan: Heureux de te rencontrer à nouveau sur ce forum.
C'est un sujet que j'ai pris en cours tardivement. Je me permets de proposer ma version (@Dan: même idée que pour Lulu).
La feuille "Client" est transformée en Tableau structuré (Tableau1) .
En cliquant sur un des bateaux de la feuille "Accueil", le formulaire "Gestion des clients" s'affiche. Il permet:
1- de saisir de nouveaux clients,
2- de modifier les clients présents dans la base, ce qui évite de ressaisir toutes les coordonnées. Par exemple, on modifie la journée de location, les heures ,le nombre et les coordonnées des accompagnateurs.
3- d'établir une facture, de l'imprimer et éventuellement de la sauvegarder en PDF.
Le ComboBox2 (Nbre de participants) gère le cadre des accompagnateurs.
- Si =1 -> le cadre accompagnateurs reste invisible
- Si=2 -> le cadre s'affiche avec 3 Textbox (nom, prénom et âge)
- Si =3 -> une 2ème série de 3 TextBox
- Si =4 -> une 3ème série.
A découvrir.
Cdt
Henri
Message du samedi à 18:05 rectifié avec un autre fichier joint (location-joh2) suite à des rectifications et améliorations.
Cdt
Henri