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 Sub

Petit 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

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.

Nbr.value ? c'est pas Nbrbis dont vous parlez ?

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 Sub

A 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

9location-joh2.xlsm (78.04 Ko)

Message du samedi à 18:05 rectifié avec un autre fichier joint (location-joh2) suite à des rectifications et améliorations.
Cdt
Henri

24location-joh2.xlsm (78.30 Ko)
Rechercher des sujets similaires à "gerer combobox changer simultanement valeur checkbox"