Combobox & Textbox

Bonjour à tous,

Je suis actuellement entrain d'essayer de développer un fichier excel pour avoir un suivi des palettes (entrées et sorties).

Mon formulaire : "Enregistrement" est OK, il enregistre les infos dans un tableau situé dans la "feuil1"

Cependant, j'aurais voulu, grâce à des combobox, pouvoir retrouver les informations de mon tableau "feuil1".

Mon problème est le suivant :

Sujet 1

Dans mon formulaire "Modification", qui est le même que "enregistrement", j'aurais voulu, grâce aux 3 combobox

"N°transport"

"Transporteur"

"Client "

Pouvoir alimenter le tableau du dessous et ses différentes textbox.

sujet 2

Et une fois les textbox alimentées, pouvoir les modifier, et que mes nouvelles informations remplacement les anciennes sans modifier l'ordre de mon tableau.

Exemple, si la case J1 est 1 et que je modifie dans le formulaire "Modification", en y indiquant 4. je voudrais que la valeur dans la cellule devienne 4.

Je suis débutant sur excel, c'est ma première "application" en VBA, cela fait 5 jours que je cherche une solution pour ces deux problèmes, j'ai essayé plusieurs codes que j'ai trouvé sur internet, mais aucun ne me permet d'arriver au résultat que je souhaite.

J’espère qu'une âme charitable pourra m'aider sur ce sujet.

En vous remerciant par avance.

Si je n'ai pas été assez claire n'hésiter pas .

Cordialement.

Bonjour,

Sujet1

Je vous déconseille d'utiliser la propriété .RowSource pour alimenter vos ComboBox via une source de données présente dans votre classeur dès lors que cette source est modifiée dans votre code. Vous risquez de provoquer un dysfonctionnement d'Excel.

Il faut charger vos ComboBox dynamiquement soit globalement via la propriété .List, soit unitairement via la méthode .AddItem

ci-dessous code pour charger vos ComboBox sans doublon et avec tri :

Private Sub UserForm_Initialize()
    Dim tableau As ListObject, liste1 As Object, liste2 As Object, liste3 As Object

    Set liste1 = CreateObject("System.Collections.Arraylist")
    Set liste2 = CreateObject("System.Collections.Arraylist")
    Set liste3 = CreateObject("System.Collections.Arraylist")
    Set table = Sheets("feuil1").ListObjects(1)

    With tableau
        For i = 1 To .ListRows.Count
            If Not liste1.contains(.ListColumns("Numéro de transport").DataBodyRange.Rows(i).Value) Then liste1.Add .ListColumns("Numéro de transport").DataBodyRange.Rows(i).Value
            If Not liste2.contains(.ListColumns("Transporteur").DataBodyRange.Rows(i).Value) Then liste2.Add .ListColumns("Transporteur").DataBodyRange.Rows(i).Value
            If Not liste3.contains(.ListColumns("Infos Client ").DataBodyRange.Rows(i).Value) Then liste3.Add .ListColumns("Infos Client ").DataBodyRange.Rows(i).Value
        Next i
    End With

    liste1.Sort: liste2.Sort: liste3.Sort
    Me.ComboBox311.List = Application.Transpose(liste1.toarray)
    Me.ComboBox312.List = Application.Transpose(liste2.toarray)
    Me.ComboBox313.List = Application.Transpose(liste3.toarray)

End Sub

Bonsoir,

ci-jointe proposition pour sujets 1 et 2

Bonjour Thev,

Super, merci beaucoup pour votre réponse c'est vraiment super ce que vous avez fait !!!!

J'ai un autre besoin si vous acceptez que je profite de vos compétences pour avancer sur cette petite application.

Je voudrais retrouver les informations de mon tableau "feuil1" dans une listview, qui est dans le formulaire "suivre", j'arrive à alimenter cette listview.

Mais je voudrais en plus, pouvoir la filtre grâce aux combobox du formulaire "Suivre".

De mon côté, je vais essayer de comprendre votre code !!!

Cordialement,

Ci-joint le fichier sur lequel j'ai tout "préparé" lol.

Merci

Bonsoir,

Je ne peux pas vous apporter d'aide sur un contrôle ListView car ce type de contrôle n'est pas reconnu dans ma version d'Excel.

Vous aurez d'ailleurs forcément des soucis avec ce contrôle dès lors que vous voudrez faire fonctionner votre application sur une version 64 bits et non 32 bits. Pour assurer une meilleure compatibilité, le mieux est de choisir plutôt un contrôle ListBox.

Pour mémo, voir le souci rencontré par reglaet

https://forum.excel-pratique.com/excel/listview-excel-2016-t101006.html

Bonjour Thev,

Oui effectivement je ne connaissais pas la fonction Listbox et finalement c'est un peu la même chose qu'une listview !!!

J'ai réussi à Alimenter ma listbox par rapport à mon tableau "feuil1".

Est-il possible de filtrer cette listbox grâce aux 3 checkbox que j'utilise ?

Cela permettra à l'utilisateur de trier les informations par transporteurs.

Je te remercie par avance !!

J'ai un peu l'impression que ce n'est plus mon application ahah.

Mais j'apprends tout de même grâce aux codes que tu fournis à l'application (même si cela me prend quelques heures de recherches et de compréhension archarnées.....)

En PJ tu pourras trouver le fichier avec la listbox déjà prête.

Cordialement,

Bonsoir,

Je vous rappelle qu'il est déconseillé d'utiliser la propriété .RowSource pour alimenter votre ListBox via une source de données présente dans votre classeur dès lors que cette source est modifiée dans votre code. Vous risquez de provoquer un dysfonctionnement d'Excel.

ci-jointe proposition avec :

une correction du module Enregistrement concernant la suppression des lignes vides en colonne A,

une petite rectification du module Modification

Bonjour Thev,

Merci encore pour votre aide précieuse.

J'aurai une nouvelle fois besoin de vos compétences (oui j'abuse de vous ).

Dans le formulaire "enregistrement".

J'ai ajouté une nouvelle fonction, quand nous cliquons sur "enregistrer le transport".

Nous devons fournir une fiche avec le résumé du transport à nos transporteurs.

Je voudrais que l'utilisateur ai la possibilité d'imprimer celle-ci en fonction du dernier transport qu'il enregistre.

Une fois que l'utilisateur à remplit le formulaire "enregistrement" et qu'il clique sur "enregistrer le transport", un message box dit "voulez-vous imprimer la fiche palette pour ce transport?", si oui, l'userform2 s'ouvre, si non, il revient au formulaire "enregistrement",

Sujet 1 :

Quand j'indique "non" sur le message box, je reviens au formulaire "enregistrement", mais les données sont toujours affichées.... il faut donc que je vide à la main les textbox.

Je voudrais que celles-ci soient vides, car de toute façon, le transport est enregistré.

Sujet 2 :

Je voudrais que "userform2" affiche les informations du dernier transport enregistré. (Dans les labels que j'ai intégré). Je ne sais pas si c'est la meilleur solution.

J'ai essayé de faire des = textbox52 par exemple mais cela ne fonctionne pas.

Merci une nouvelle fois de votre aide.

Cordialement,

Je voudrais que "userform2" affiche les informations du dernier transport enregistré. (Dans les labels que j'ai intégré). Je ne sais pas si c'est la meilleur solution.

J'ai essayé de faire des = textbox52 par exemple mais cela ne fonctionne pas.

Pour les infos de tournée, mieux vaut reprendre les noms des contrôles TextBox présents dans le formulaire Enregistrement. Cela simplifie le code.

ci-dessous nouvelle version

Bonjour Thev,

C'est super merci, désolé pour le temps de réponse je n'ai pas eu le temps à consacrer sur l'application ces derniers jours.

Concernant l'"userform2", celui qui contient les fiches palettes.

Pensez-vous qu'il est possible de pouvoir rechercher les informations de mon tableau "feuil1" pour afficher les données d'un transport précédent en cliquant sur "actualiser " ?

Ex : J'enregistre le transport numéro 10, et je retrouver sur les fiches palettes les informations du transport n° 4 pour ré-éditer les fiches palettes.

Une nouvelle fois, merci pour votre aide.

Cordialement,

Thibaut

Bonjour,

Pour les infos de la tournée précédente, j'ai utilisé le code et les noms des contrôles TextBox du formulaire Modification. Cela simplifie le code.

ci-dessous nouvelle version

Bonjour Thev,

J'ai du mal m'expliquer.

Pour editer les fiches palettes je voudrais que l'utilisateur ait deux possibilités :

La première :

Il enregistre un nouveau transport, dans ce cas, quand il va cliquer sur "enregistrer le transport", un msgbox lui propose d'imprimer la fiche, si il dit oui, l'userform2 s'ouvre avec les informations que l'utilisateur vient de rentrer.

Si non, l'userform2 ne s'ouvre pas et l'userform "Enregistrement" ce rafraichi pour que l'utilisateur puisse enregistrer un nouveau transport (car ils peuvent en enregistrer plusieurs à la suite).

La deuxième :

L'utilisateur veut modifier un transport dans l'userform "modifier" (par exemple pour modifier le nombre de palettes).

Dans ce cas la fiche palette ne correspond plus.

Je voudrai, que dans le userform "menu" ci l'utilisateur clique sur la commandbutton "éditer une fiche palette" l'userform 2 apparait (celui avec les fiches), et qu'il puisse, grâce aux combobox filtrer tous les transports enregistrés pour retrouver dans les fiches palettes les informations du transport choisi.

Pensez-vous que cela soit possible ?

Merci beaucoup.

Cordialement

Oui, c'est possible mais avant il faudrait préciser :

1- le rôle des 2 fiches palettes, fiche 1 : transport venant d'être enregistré, fiche 2 : transport précédent ??

2- les critères de sélection des transports précédents qui sont différents selon les formulaires. Au niveau modification, numéro de transport et au niveau palette, date de départ ??

Effectivement je n'ai pas précisé.

La fiche de gauche et la fiche de droite doivent avoir les mêmes informations, celle de gauche sera remise au transporteur et celle de droite sera un exemplaire que nous garderons.

Les deux fiches correspondent donc à un seul et unique transport.

Et cocnernant les combobox je voudrais pouvoir retrouver les informations du tableau "feuil1" dans les différents labels qui sont situés sur les fiches.

Est-ce plus claire ?

Oui sur le premier point, mais sur le deuxième vous n'expliquez pas pourquoi vous retenez la date de départ comme critère de sélection pour la fiche palette alors que vous utilisez le numéro de transport pour la modification.

Bonjour Thev,

Je voulais donner la possibilité à l'utilisateur de pouvoir rechercher les informations par "transporteur", "date de départ".

Mais suite à votre remarque, il est peut-être préférable de rechercher directement par n° de transport pour n'avoir qu'un seul résultat.

Je vous remet le fichier modifié.

Cordialement

Bonjour,

ci-jointe nouvelle version

Bonjour Thev,

Super c'est ce que je voulais.

Encore quelques petites modifications et je pourrais présenter l'application.

1 ère modification :

Dans le userform2, si je veux y aller en passant par "editer une fiche", la fiche de gauche n'indique pas les données. Celle de droite si. Est-ce possible pour vous de faire la même chose pour la fiche de gauche ?

2 ème modification :

Je n'arrive pas à mettre à jour les formulaires sans les quitter.

Ex : quand je modifie un transport, et passe ce même transport, de 4 à 10 palettes dans le formulaire "modification", et bien dans la listview, les données ne sont pas actualisées,

Même chose pour les enregistrement de transport, le numéro de transport ne sacrément pas de +1 après enregistrement.

3 ème modification :

Dans le userform menu, vous m'avez donné la possibilité de pouvoir filtrer la listview en fonction des transporteurs. Mais une fois que je filtre, je ne peux plus la réinitialiser, j'entend par là, ne plus avoir de filtres, et voir donc, voir la liste complète des transports.

Cordialement,

Bonsoir,

ci-jointe nouvelle version

Bonjour Thev,

Merci,

Malheureusement le numéro de transport n'augmente pas de 1 lorsque je veux enregistrer un nouveau transport, je dois quitter le formulaire et revenir sur celui ci pour voir le numéro de transport augmenter.

Est-il possible de le faire augmenter de 1 lorsque je refuse d'éditer une fiche palette, et lorsque j'accepte également ?

C'est le label26 qui est concerné.

Cordialement.

Rechercher des sujets similaires à "combobox textbox"