Combobox garde ses anciennes valeurs

Bonjour,

je suis loin de maîtriser complètement Excel et le VBA, c'est d'ailleurs pourquoi je suis ici.

J'ai créé un document qui permet de faire des factures automatiquement en répondant à une série de questions.

Dans un premier temps, l'utilisateur doit choisir, dans une liste déroulante, le client à qui il veut facturer. Ensuite, dans une autre liste, il doit choisir les articles spécifiques à ce client qu'il veut facturer, etc...

Lors de la première exécution, il n'y a pas de problème.

Or, après avoir créé la première facture, si je lance une 2ème facture, le combobox garde les valeurs précédentes. Pire, j'ai l'impression que même après avoir choisi le client, les articles affichés dans le 2 ème combobox sont ceux du client précédent.

Ma question est donc:

Comment pourrais-je, à la fin (ou au tout début) de ma macro, m'assurer que les combobox sont réinitialisés?

Au moment de l'initialisation, je fais un Me.ComboBox1.Clear mais je n'ai pas l'impression que cela fonctionne.

Private Sub UserForm_Initialize() 'Remplir la liste déroulante selon le nom des onglets Dim I As Long Dim NbreClients As Integer I = 3 NbreClients = Worksheets("Base").Range("L3").Value + 2 Me.ComboBox1.Clear For I = 3 To NbreClients Me.ComboBox1.AddItem ThisWorkbook.Worksheets(I).Name Next Me.ComboBox1.Value = "Choisir le nom du client"End Sub

D'ailleurs, lors de la 2ème exécution, la valeur par défaut est celle de la facture précédente, alors qu'elle devrait être "choisir le nom du client".

Je mets le fichier, ça sera plus simple

Merci d'avance pour votre aide!

Bonjour,

je suis loin de maîtriser complètement Excel et le VBA, c'est d'ailleurs pourquoi je suis ici.

Pas si sûr en voyant tous les codes.... Où alors votre appli a été réalisée par quelque d'autre

D'ailleurs, lors de la 2ème exécution, la valeur par défaut est celle de la facture précédente, alors qu'elle devrait être "choisir le nom du client".

Logique puisque vous utilisez l'instruction HIDE (Qui.hide). C'est fou ce que bon nombre de personnes font cela.
HIDE = caché. Cela veut dire que votre userform est cachée à l'arrière plan en conservant vos choix lorsque vous relancez le processus

Pour décharger une userform, utilisez UNLOAD + Nomde l'userform
Dans votre cas :

Unload Qui

Une petite remarque en voyant votre fichier, je pense que vous auriez pu faire plus simple en mettant toutes les rubriques dans une seul userform. C'est un peu compliqué à gérer.

Cordialement

Dan,

tout d'abord, merci pour votre réponse!

Pas si sûr en voyant tous les codes.... Où alors votre appli a été réalisée par quelque d'autre

Alors je suis pas complètement débutant, mais y a beaucoup de choses que je ne maîtrise pas, dont les combobox apparemment ;-)

Pour le hide, j'ai pensé que c'était le problème, mais je n'avais pas trouvé la solution!

Une petite remarque en voyant votre fichier, je pense que vous auriez pu faire plus simple en mettant toutes les rubriques dans une seul userform. C'est un peu compliqué à gérer.

Merci pour la remarque. Je suis assez d'accord que c'est hyper lourd. Est-ce que vous avez des suggestions? Mon problème c'est qu'un client peut avoir 1, 2, 10 animaux. Pour chaque animal, il peut y avoir plusieurs mois de facturations, plusieurs autres frais, etc...

Donc, dans le userform, est-ce qu'il y a la possibilité de faire quelque chose de dynamique? Par exemple, afficher un nouveau combobox à chaque fois que le précédent est <> ""?

Cordialement

Vous êtes déjà loin dans ce projet.

Déjà peut être savoir si le changement de Hide par Unload résoud votre souci

Pour ce qui est des userforms, sans trop connaitre comment vous fonctionnez, il me semble que j'aurais essayé de rassembler plusieurs userform en une seule. Mais ce serait aussi un peu tout refaire

Peut être améliorer pas à pas ?

Alors le Unload résout mon problème, merci infiniment!

Je suis pas contre l'idée de repenser le concept, mais pour cela j'ai un principal problème.

Est-il possible dans le même userform, de mettre à jour combobox2 en fonction de la sélection de combobox1?

Est-il possible dans le même userform, de mettre à jour combobox2 en fonction de la sélection de combobox1?

Bien entendu.
Quelle est l'userform concernée.

Edit : en regardant un peu le fichier, il me semble que j'aurais en premier fait une base de données avec le nom des clients et leur animaux, plutot qu'une feuille par client. Mais avant de bouger cela, deux questions :
- Combien de client pouvez-vous avoir ou avez-vous (car je vois num client 2000, 1000...)
- Combien d'animaux sont concernés par client ? Si j'ai bien compris, vous mettez un prénom à chaque animal pour le suivi et le prix pratiqué ?

Quelle est l'userform concernée.

Je voudrais que si je change de client, le combobox des animaux se mettent à jour.

Combien de client pouvez-vous avoir ou avez-vous (car je vois num client 2000, 1000...)

A priori je dirais maximum 20 clients, avec max 10 animaux par client... Et oui, chaque animal a un nom et un tarif, selon son âge ou son genre

Je voudrais que si je change de client, le combobox des animaux se mettent à jour.

Je dois savoir les userform concernées

En l'occurence, il s'agirait de fusionner le Qui avec Vaches par exemple

Ok faites ceci dans l'userform Qui

- en dessous de la combobox1, ajoutez une combobox (elle doit être nommé "combobox2)
- Sélectionnez la combobox1
- dans la fenetre propriétés, allez à la rubrique TEXT et mettez ceci --> "Choix du nom du client" (voir toutefois NB plus bas)
- Répétez la même opération pour la combobox2 et mettez "Choix du nom de la vache" (voir toutefois NB plus bas)
- Remplacez le code Private Sub Initialize par celui ci-dessous

Private Sub UserForm_Initialize()
    'Remplir la liste déroulante selon le nom des onglets
    Dim I As Byte, NbreClients As Byte

    I = 3
    NbreClients = Worksheets("Base").Range("L3").Value + 2
    For I = 3 To NbreClients
        Me.ComboBox1.AddItem ThisWorkbook.Worksheets(I).Name
    Next I
End Sub

- Ajoutez le nouveau code ci-dessous qui agira sur le changement de la combobox1

Private Sub ComboBox1_Change()
Combobox2.clear
With Worksheets(ComboBox1.Value)
    ComboBox2.List = .Range("C6:C" & .Range("C" & Rows.Count).End(xlUp).Row).Value
End With
End Sub

- Supprimez l'userform Vache

NB : Plutot que d'ajouter les mentions dans les deux combobox, j'aurais plutôt ajouté un label juste au-dessus des deux combobox et mis les deux infos "nom client" et "nom vache" dans la rubrique Controltyptext.
Cela vous évite d'aller mettre par erreur l'info "Nom du client" ou "nom de vache" dans la feuille si par hasard vous cliquez sur Ok ou que vous appuyez sur la touche Entree du clavier

- Tout autre chose, pour vos macros, essayez de ne pas utiliser le même nom que celui attribué à un module. Dans certains cas cela pourrait vous poser des soucis

Dan,

merci beaucoup pour vos réponse et votre aide précieuse.

je vais essayer la méthode que vous me suggérez.

Pour moi, le cas est résolu et je vais le marquer en tant que tel. Les potentielles améliorations à apporter ne doivent plus faire partie de ce topic je pense.

Bonne fin de journée!

Bah pas de soucis pour continuer sur ce fil. Cela permet de voir le suivi directement.

Je garde le fichier sous le coude

Au fait il faudra aussi adapter votre macro creationfacture car elle appelle l'usf Vache qui doit être supprimée. Là vous allez avoir un bug --> donc à adapter

Crdlt

Rechercher des sujets similaires à "combobox garde anciennes valeurs"