Recherche avec plusieurs combobox
Bonsoir EXCEL PRATIQUE
Bonsoir a tous et a toutes
Svp et biensure si vous avez un peu du temps pour m'aider dans cette labyrinthe ..se sera vraiment un grand plaisir de votre part.
J'ai essaye avec cette facture de mettre 10 combobox pour afficher ( code produit ) et une combobox11 pour afficher ( clients )
j'ai alimenté ces 10 combobox par meme colonne D
est ce qu'il ya une autre facon d'alimenter ces 10 combobox d'une façon assez bref
j'ai alimenté combobox11 par colonne C
Ce que je veux voir c'est que lorsque je choisis un code produit par combobox1 s'affichera devant cette combobox le nom du produit "colonne E" dans textbox1
meme chose pour les autres combobox de 2 a 9.
Merci d'avance pour l'aide
Merci aussi pour votre precieux temps
Cordialement
MARTI
Bonjour,
Il n'y a que l'alimentation des tes combobox dans ton fichier.
Plutôt que cette énumération, je mettrai "D6:D" & la dernière ligne dans une variable String et j'affecterai cette valeur à la propriété RowSource de tes ComboBox au moyen d'une boucle : For i = 1 to 6 --- Controls("ComboBox" & i).RowSource = ...
Pour la suite, tu crées une procédure de recherche (dans le même module) qui fait la recherche sur ton tableau. La proc. Change de chaque ComboBox appelle cette proc. de recherche en lui donnant en argument son numéro, ce qui permet la proc. d'identifier la valeur cherchée, trouver le produit et l'affecter au textbox produit correspondant au combo appelant. Tu as intérêt à renommer tes TextBox de façon à ce qu'ils puissent être identifiés par combobox et par fonction que tu leur destine...
Avance un peu plus ton projet...
Cordialement
Ferrand
Bonsoir MFerrand
Ravi de te revoir
Franchement j'ai rien compris..
Je suis debutant en excel vba et je veux vraiment apprendre et comprendre
Tiens j'ai fais aussi quelque chose..alimenter les 5 textboxs
y'a pas autre moyen mieux que ces long codes
Merci d'avance pour l'aide
Cordialement
MARTI
Salut,
Tu as au moins 3 façons d'initialiser les contrôles à l'ouverture d'un Userform.
- si cette initialisation est fixe, tu la fixes à la conception et plus besoin de s'en occuper, elle sera là chaque fois (en laissant de côté les cas où tu réutilise un Userform sans l'avoir déchargé et que la valeur puisse être à réinitialisé, mais là on n'est plus dans l'ouverture initiale)
- si elle est variable, tu peux utiliser la procédure Initialize dans les cas où cette initialisation est homogène,
- tu peux enfin y procéder de l'extérieur, généralement par la procédure qui lance le Userform : on le charger avec l'instruction Load, initialiser les contrôles, puis l'afficher avec Show ; si le Userform a des utilisations diverses et que l'initialisation dépend de l'utilisation, cette méthode est préférable.
Mais ton Userform n'est pas finalisé dans sa mise en forme. Tu vas un peu vite en voulant coder un peu prématurément, tu risques d'avoir pas mal de modifications ultérieures. Prévois qu'il faut pouvoir identifier les contrôles par fonction et par type de choix. Il y a lieu de renommer avec un élément d'identification et un élément de position ou d'ordre (numérique), permettant de les défiler le cas échéant dans une boucle.
Ce que tu ne connais pas, tu l'apprendras au fur et à mesure, mais d'autant mieux que ta conception aura été plus affinée, et que tu sais exactement ce que tu veux obtenir et comment l'obtenir. Le code consiste ensuite à traduire le comment d'une façon interprétable par VBA et Excel. Pardonne moi d'insister mais je crois que en complétant par les étiquettes qui manquent, en redéfinissant les noms selon l'utilisation et les interactions prévisibles (et aussi de façon que toi tu les identifies du premier coup, je suis partisan de noms courts mais cela dépend de la façon de fonctionner de chacun). Ne commencer à coder de préférence que lorsque les noms des contrôles sont en principe définitifs... Dès lors que tu peux indiquer de façon définitive ce qui doit être initialisé et toutes les fonctions que le Userform devra assurer dans son fonctionnement (et ce qui doit se passer à la sortie), tu passes au codage de chaque volet et tu testes au fur et à mesure indépendamment du reste du programme.
Bon courage. A+
Un petit complément : en nommant en champ dynamique B6:B... tu mets le nom de plage dans la propriété RowSource du ComboBox et il n'est plus besoin d'initialisation sur ce point. Il faut savoir si les cellules B1 à B4 doivent rester vides ou non.
A+
MFerrand a écrit :Un petit complément : en nommant en champ dynamique B6:B... tu mets le nom de plage dans la propriété RowSource du ComboBox et il n'est plus besoin d'initialisation sur ce point. Il faut savoir si les cellules B1 à B4 doivent rester vides ou non.
A+
Salut MFerrand
Oui ces cellules restent vides
Merci pour tes remarques
Cordialement
MARTI
Donc tu mets par exemple le nom CodeP avec référence:
=DECALER(Feuil1!$D$6;;;NBVAL(Feuil1!$D:$D)-1;1)
Puis tu définis un nom Clients :
en référence : =DECALER(CodeP;;-1)
Tu utilises les noms dans la propriété RowSource des ComboBox, il n'y aura plus à y toucher.
A+
MFerrand a écrit :Donc tu mets par exemple le nom CodeP avec référence:
=DECALER(Feuil1!$D$6;;;NBVAL(Feuil1!$D:$D)-1;1)
Puis tu définis un nom Clients :
en référence : =DECALER(CodeP;;-1)
Tu utilises les noms dans la propriété RowSource des ComboBox, il n'y aura plus à y toucher.
A+
Bonsoir MFerrand
Merci pour l'aide
Peux tu svp me mettre ces codes dand le fichier pour mieux comprendre
Croyez moi je me sens sans fichier comme je suis dans terrible tourbillon
Merci d'avance
MARTI
Voilà un exemple :
(Aère et indente ton code si tu ne veux pas que ça devienne vite illisible.)
Salut MFerrand
il ne me reste que 2 gestes dans ce fichier et sera ma bonheur
* si je remplis les textboxs de (2 à 35) qui sont en realite un facture..comment faire qu'avec un command button transmettre les donnees saisient dans ces textbox dans les colonnes de F à K
* une numerotation automatique dans textbox 37
Merci MFerrand pour votre gentillesse et pour votre aide
Cordialement
MARTI
Tu as noté que j'avais renommé les textbox produits de façon à reduire à 2 lignes (3 si on compte l'appel du combobox) le code pour le rechercher ?
Tu illustres mes propos précédents, il faut savoir ce qu'il y aura dans tes autres textbox et si c'est de la saisie où ça doit aller de façon à d'abord renommer tes textbox afin d'avoir un code simple pour le transfert des données.
Par exemple si les text box d'une même 'colonne' du Userform vont dans une même colonne du tableau, on les renomme de façon à identifier la colonne...
Mais tu me dis que tu dois produire une facture, ce qui me semble un peu curieux avec la liste de clients sur le même tableau...
Salut MFerrand
Oui vous avez raison dans tes remarques
les clients normalement je vais ecrire ses noms dans combobox11
Ici dans ce tableau la liste des clients est comme un simple exemple car en realite je ne sais pas les noms de ces clients sauf au moment de facturation..
Donc je remplis l'userform avec : nom client ,et les textboxs maintenant sont du numero 2 à 35
Le reste est avec des comboboxs
On peut donc mettre la liste des clients dans feuil2 par exemple
J'espere que j'ai bien exprimé
Merci maitre pour tous
Cordialement
MARTI