XL 2010 Formulaires VBA - Liste déroulantes saisie de données

David2Coree

XLDnaute Junior
Bonjour Cher Forum XL Downloads !!!

Cela fait bien longtemps que je n'ai pas posté une demande d'aide car j'ai toujours pu réussir à trouver mon bonheur !

Mais là, je fais appel à nouveau à votre générosité. En effet, j'aimerai créer 3 formulaires pour 3 onglets de mon fichier clients, informations réseau et info prestataires (je veux mettre 3 UserForm).
Dans un premier temps j'ai pu trouver un tuto super bien expliqué sur une plateforme de partage de vidéo You.
J'ai mis en place ses instructions et le rendu est vraiment, pratiquement ce que je recherche.
Mais voilà, nous n'avons jamais ce que nous voulons exactement. Ce que j'essaie désespérement de mettre en place est que dans ma combobox 2 affiche le nom de mon client par rapport au numéro client (combobox1).
Mais voilà, si je modifie le code VB de ma combobox 2 alors ma combobox1 n'affiche plus les codes clients.
Je vous ai mis un bout de mon fichier avec l'userform1 en place.

De plus, pour les prochaines userform pour les onglets Info réseau et prestataires, croyez-vous que je pourrai afficher le nom du client sur chaque formulaire ?

Merci à tous ceux qui auront lu mon post et qui m'aideront à trouver une solution à mon problème.
En attendant de vous lire, je vais commencer mes formulaires pour les 2 onglets restants.

Cordialement
David
 

Pièces jointes

  • INFOS-CLIENTS_Forum.xlsm
    89.3 KB · Affichages: 136

Paritec

XLDnaute Barbatruc
Bonsoir David2coree le forum
je viens d'ouvrir ton fichier et je cherche les explications de ce que tu veux obtenir, mais rien !!!!
alors tu veux quoi?? tu parles de changer le code de ton combobox2 oui pour faire quoi ??
dans ton combobox2 tu n'as pas de liste quel besoin d'un code??
bref j'ai rien compris explique en détail et on va avancer.
expliques clairement ce que tu veux obtenir et on va te faire cela
a+
Papou:)
 

David2Coree

XLDnaute Junior
Bonsoir David2coree le forum
je viens d'ouvrir ton fichier et je cherche les explications de ce que tu veux obtenir, mais rien !!!!
alors tu veux quoi?? tu parles de changer le code de ton combobox2 oui pour faire quoi ??
dans ton combobox2 tu n'as pas de liste quel besoin d'un code??
bref j'ai rien compris explique en détail et on va avancer.
expliques clairement ce que tu veux obtenir et on va te faire cela
a+
Papou
:)

Bonjour Paritec,
Je vous prie de m'excuser si je n'ai pas été clair. Je vais essayer de me faire mieux comprendre.
Lorsque j'exécute le formulaire, la combobox ID_CLIENT m'affiche la liste déroulante des codes clients de l'onglet BDD_CLIENT. Mais la combobox NOM_CLIENT, ne m'affiche pas la liste déroulante des NOM_CLIENT de l'onglet BDD_CLIENT.
Dans l'absolue, j'aimerai que nous ayons le choix pour afficher la fiche client soit en sélectionnant le code client ou le nom client.
En l'état actuel, les info client s'affichent uniquement en sélectionnant le code client. Sur le site Votre Assistante qui m'a grandement aidé à avancer dans mon projet, j'aurai aimé pouvoir modifier le premier bloc de code VB.
En effet, le code d'origine de la combobox2 permet l'affichage d'une liste déroulante de civilité :
Option Explicit


Dim Ws As Worksheet

'Pour le formulaire
Private Sub UserForm_Initialize()
Dim J As Long
Dim I As Integer
ComboBox2.ColumnCount = 1 'Pour la liste déroulante Civilité
ComboBox2.List() = Array(« », « M. », « Mme », « Mlle ») J'ai retiré cette ligne, pour ne pas avoir cette liste.
Set Ws = Sheets(« BDD_CLIENT ») 'Correspond au nom de votre onglet dans le fichier Excel
With Me.ComboBox1
For J = 2 To Ws.Range(« A » & Rows.Count).End(xlUp).Row
.AddItem Ws.Range(« A » & J)
Next J
End With
For I = 1 To 7
Me.Controls(« TextBox » & I).Visible = True
Next I
End Sub

J'aimerai pouvoir adapter le code ci-dessous de la combobox1 pour la liste de NOM_CLIENT, dès que je modifie, Combobox1 en Combobox2 et que je modifie ComboBox2 = Ws.Cells(Ligne, "B") en ComboBox2 = Ws.Cells(Ligne, "A"), les listes déroulantes ne sont plus opérationnelles.

'Pour la liste déroulante Code client

Private Sub ComboBox1_Change()

Dim Ligne As Long
Dim I As Integer

If Me.ComboBox1.ListIndex = -1 Then Exit Sub

Ligne = Me.ComboBox1.ListIndex + 2

ComboBox2 = Ws.Cells(Ligne, "B")

For I = 1 To 7

Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 2)

Next I

End Sub

Dès que ce formulaire sera au point, j'aimerai reporter ces codes pour chaque onglet (BDD_RZO et BDD_PRESTATAIRES) tout en apportant une nuance.
Pour chaque onglet, j'ai placé la colonne ID_CLIENT et lorsque nous sélections ou saisissons le nom client, j'aimerai que le code client s'affiche sur le formulaire.

J'espère avoir plus claire dans mes explications.

Je vous remercie d'avance.

Cordialement
David
 

Pièces jointes

  • forum_01.PNG
    forum_01.PNG
    7.5 KB · Affichages: 85
  • forum_02.PNG
    forum_02.PNG
    4.2 KB · Affichages: 78
Dernière édition:

David2Coree

XLDnaute Junior
Bonjour à tous !

J'ai terminée mon fichier contenant mes 3 formulaires (Info clients, info réseaux, et info presta).
Les 3 formulaires fonctionnent indépendamment, les saisies d'une nouvelle donnée ou des modifications s'effectuent correctement.
Mes derniers point à solutionner et que je n'y arrive toujours pas malgré mes recherches sur le net sont que :
  • La liste déroulante "nom client" sur chaque formulaire n'est pas visible et je ne peux pas afficher les informations si je décide sélectionner ou saisir le nom des clients.
  • j'aimerai que pour les formulaires "Info Réseaux" et "info presta" l'identifiant client et le nom client soient liés par ma base de données "BBD_CLIENT". C'est à dire, dans le formulaire INFO_RESEAUX ou INFO_PRESTA, je puisse avoir les listes déroulante de ma BDD_CLIENTS et si la correspondance est exacte alors qu'il m'affiche les valeurs des BDD correspondant soit aux infos réseaux ou infos presta.
Je vous remercie pour toute aide à mon projet.

Cordialement
David
 

Pièces jointes

  • INFOS-CLIENTS_Forum.xlsm
    105.9 KB · Affichages: 121
  • forum_04.PNG
    forum_04.PNG
    16.9 KB · Affichages: 69
  • forum_03.PNG
    forum_03.PNG
    21.8 KB · Affichages: 83
  • forum_01.PNG
    forum_01.PNG
    7.5 KB · Affichages: 78
  • forum_02.PNG
    forum_02.PNG
    4.2 KB · Affichages: 76

David2Coree

XLDnaute Junior
Bonsoir.
Suggestion: Utilisez mes objets ComboBoxLiées.

Bonjour Dranreb,
J'ai farfouillé le forum et j'ai trouvé ceci qui pourrait m'intéressé.

J'ai réadapté votre code :

Option Explicit

Dim WithEvents CBL As ComboBoxLiés <== il me semble que je ne peux pas utiliser Ce lien n'existe plus dans un userform


Dim Ws As Worksheet
'

'Pour la liste déroulante NOM_CLIENT
Private Sub UserForm_Initialize()

Set CBL = New ComboBoxLiés
CBL.Plage Sheet(BBD_CLIENTS).Range("B65536").End(xlUp).Row
CBL.Add ComboBox1, "B"
CBL.Actualiser

End Sub


Mais cela me met l'erreur : Erreur de compilation : Type défini par l'utilisateur non défini.

Merci de votre aide.

Cordialement
David
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Si, WithEvents ne peut même être utilisé que dans les modules objets.
Là vous avez sans doute seulement dû oublier d'installer les modules de classe ComboBoxLiées, ComboBoxMmbr et TableIndex. Ceux sont eux qui définissent les types définis par l'utilisateur.
Attention vous spécifier autre chose qu'un Range à la méthode Plage. Spécifiez en un qui représente au moins la première ligne du tableau.
Par exemple CBL.Plage Sheet(BBD_CLIENTS).Rows(2)
Il trouvera tout seul l'ensemble du tableau grâce à la fonction PlgUti du module Utilit, et (conseil) accéderez y toujours par CBL.PlgTablo dans la programmation du reste de l'UserForm.
Spécifiez d'autres ComboBox pour d'autres colonnes: l’intérêt c'est de les lier pour pouvoir choisir des trucs dans n'importe lesquelles et qu'il complète tout seul les non renseignées dès que la combinaison de celles qui le sont devient unique dans la base.

Important: La discussion en lien est un peu ancienne. ComboBoxLiés a évolué depuis en ComboBoxLiées qui n'utilise plus de Dictionary et est pourvu de fonctionnalité supplémentaires, dont la prise en compte des ListObject. J'en équiperai quand vous voudrez un de vos classeurs joint, et vous le retournerai sous le nom de CBxLiéesDavid2Coree.xlsm
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous ne réagissez pas ?
Reprenons.
Ce que j'essaie désespérement de mettre en place est que dans ma combobox 2 affiche le nom de mon client par rapport au numéro client (combobox1).
Mais voilà, si je modifie le code VB de ma combobox 2 alors ma combobox1 n'affiche plus les codes clients.
Eh ben alors fichons en l'air complètement le code VB des 2 ComboBox et confions en la charge à un objet ComboBoxLiées. Il se débrouillera tout seul pour prévenir votre UserForm (si toutefois ça l'intéresse) d'un numéro de ligne dans la base clients correspondant à une saisie ou un choix venant d'être effectué dans l'un d'eux, par quelqu'un qui pourra voir aussi dans l'autre ce qui y correspond.
Tout ça sans aucune programmation dans l'UserForm, à part l'enseignement de son cahier de charge à l'objet, au début, dans l'UserForm_Initialize, et bien sûr ce dont vous avez besoin, en aval, s'il y a lieu, quand vous avez ce fameux numéro de ligne (c'est le n° dans la base, pas dans sa feuille: 1 pour la 1ère ligne de la base clients).
 

David2Coree

XLDnaute Junior
Bonjour.
Vous ne réagissez pas ?
Reprenons.
Eh ben alors fichons en l'air complètement le code VB des 2 ComboBox et confions en la charge à un objet ComboBoxLiées. Il se débrouillera tout seul pour prévenir votre UserForm (si toutefois ça l'intéresse) d'un numéro de ligne dans la base clients correspondant à une saisie ou un choix venant d'être effectué dans l'un d'eux, par quelqu'un qui pourra voir aussi dans l'autre ce qui y correspond.
Tout ça sans aucune programmation dans l'UserForm, à part l'enseignement de son cahier de charge à l'objet, au début, dans l'UserForm_Initialize, et bien sûr ce dont vous avez besoin, en aval, s'il y a lieu, quand vous avez ce fameux numéro de ligne (c'est le n° dans la base, pas dans sa feuille: 1 pour la 1ère ligne de la base clients).

Bonjour Dranreb !
Désolé pour la réponse tardive. Pour tout vous dire, je ne suis pas un développeur VB, je recopie des bout de code qui m'interesse et je réadapte à "ma sauce".

Pour ce qui est j'essaie de comprendre vos explications et de les mettre en place. De plus, j'étais absent et je ne pouvais vous répondre.

J'ai mis mon fichier dans un des posts. Pourriez-vous modifier le code VBA de mon fichier ?

Je vous remercie d'avance.

P.S : Franc-Comtois un jour, Franc-Comtois toujours ! Je suis originaire de Bezac !!! :-D
 

Dranreb

XLDnaute Barbatruc
Je veux bien faire un UserForm mais vous ferez les autres.
Je regarde le 3 des Informations Prestataires. Mais tout de suite je tombe sur un problème : les ID et NOM client doivent ils être cherchés dans la base clients ou dans la base prestataires ? Je ne peux pas les chercher dans les deux à la fois à l'aide de plusieurs ComboBoxLiées qui auraient en charge les mêmes ComboBox et actifs en même temps, ce serait le plantage assuré.
À la rigueur je pourrais me débrouiller pour isoler tous les prestataire se rapportant à un ID client, par une programmation supplémentaire, en dehors du ComboBoxLiées. Mais il faudrait les afficher dans une ListBox pour pouvoir sélectionner celui que vous voudriez modifier. Sinon l'idéal ce seraient que les lignes prestataires soient identifiées par autre chose que les infos clients, celles ci n'étant que des infos rapportées sur lesquelles on ne pourrait chercher une ligne prestataire.
Il faudrait vraiment qu'il n'y ait qu'un seul prestataire par ligne. Ce serait plus facile pour les chercher.
Le plus facile à faire et le plus classique serait l'UserForm1 (Fiche client).
 

David2Coree

XLDnaute Junior
Je veux bien faire un UserForm mais vous ferez les autres.
Je regarde le 3 des Informations Prestataires. Mais tout de suite je tombe sur un problème : les ID et NOM client doivent ils être cherchés dans la base clients ou dans la base prestataires ? Je ne peux pas les chercher dans les deux à la fois à l'aide de plusieurs ComboBoxLiées qui auraient en charge les mêmes ComboBox et actifs en même temps, ce serait le plantage assuré.
À la rigueur je pourrais me débrouiller pour isoler tous les prestataire se rapportant à un ID client, par une programmation supplémentaire, en dehors du ComboBoxLiées. Mais il faudrait les afficher dans une ListBox pour pouvoir sélectionner celui que vous voudriez modifier. Sinon l'idéal ce seraient que les lignes prestataires soient identifiées par autre chose que les infos clients, celles ci n'étant que des infos rapportées sur lesquelles on ne pourrait chercher une ligne prestataire.
Il faudrait vraiment qu'il n'y ait qu'un seul prestataire par ligne. Ce serait plus facile pour les chercher.
Le plus facile à faire et le plus classique serait l'UserForm1 (Fiche client).

Bonjour Dranreb,

Les identifiants et nom client doivent être cherchés que par la BBD_CLIENTS.
Dans l'absolue, pour chaque formulaire, j'aurai aimé que les informations s'affichent soit en recherchant par numéro client ou par nom client.

Je reste à votre disposition pour toutes informations complémentaires.
Cordialement
David
 

Discussions similaires

Réponses
1
Affichages
103
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 080
Messages
2 085 150
Membres
102 794
dernier inscrit
espinata