Formulaire personnalisé USERFORM avec listbox+Combox+textbox

En effet, cela parait plus simple, mais ma question est la suivante, je connais bien la méthode pour user des cellules d'Excel et faire la validation des données. En revanche est ce que l'on peut par ce biais, réaliser la fonction d'un formulaire?? C'est à dire s'appuyer sur la présentation "ONGLET" pour alimenter une base de données dans une autre feuille Excel?? Et put on afficher sous forme de liste certaines des colonnes d'une base de données en fonction d'un critère?? Soit faire dérouler une liste et suivant sa sélection voir apparaitre les données dans une liste?? Je sais que pour une validation des données et les formules Excel on peut le faire en faisant une recherche verticale ou en colonne, mais j'ai compris que l'on a grande chance d'avoir qu'une donnée et non une liste??

Je sais que je pars de loin!!!

Une interrogation, dans une feuille Excel peut on placer les contrôles sous le menu développeur "Contrôle Active X ou formulaire" et les utiliser directement sur la feuille Excel??

Est ce la même façon de faire??

D'avance merci.

Si il me faut insérer des contrôles sous le menu DEVELLOPEUR

A priori non

Que dois je faire déjà en tout premier??

D'abord, créer tout simplement l'onglet avec les informations que tu souhaites introduire.

Ensuite définir un nom de cellule codé pour chaque information, par exemple _info12 pour l'information, qui ira colonne 12 de ta base de données.

Je te conseille de faire une maquette simple d'abord, tu verras comment cela se passe.

Ok Je vais déjà commencé par là! Merci beaucoup,

Si je peux me permettre de renvoyer mon fichier brouillon ensuite??

Merci bien

ok

Re,

Je me permets de compléter la réponse de Steelson

C'est à dire s'appuyer sur la présentation "ONGLET" pour alimenter une base de données dans une autre feuille Excel??

On peut tout à fait exporter les données de ton onglet dans une base de données, il suffit de le coder


Si il me faut insérer des contrôles sous le menu DEVELLOPEUR

Tu auras peut-être besoin de mettre un bouton d'export via l'onglet développeur, histoire de pouvoir tout transférer via un clic.


Et put on afficher sous forme de liste certaines des colonnes d'une base de données en fonction d'un critère??

C'est possible oui, il faut juste coder ça, le code ressemblera d'ailleurs pas mal à celui que l'on ferait pour alimenter une ListBox

Bonjour le fil, bonjour le forum,

Contrairement à Steelson, je déteste travailler directement sur un onglet où les contrôles sont, je trouve, plus compliqués à coder... Mais bon, les coups et les douleurs hein !...

En pièce jointe ton fichier modifié "full comment". Le secret c'est la variable LR (Ligne de Référence) qui varie en fonction de la ComBobox1 (nouvel élément ou pas) et de la ListBox1 (une seule ligne ou plusieurs) et aussi de la propriété [Tag] des contrôles qui renvoie leur valeur dans la colonne indiquée par la propriété... À tester...

Si il me faut insérer des contrôles sous le menu DEVELLOPEUR

Tu auras peut-être besoin de mettre un bouton d'export via l'onglet développeur, histoire de pouvoir tout transférer via un clic.

Je fais les modifications de la vase de données "à la volée" par une macro évnementielle.

Pas de soucis pour continuer avec ThauThème qui a proposé un userform.

Bonjour le fil, bonjour le forum,

Je n'ai bien testé que la Modification et une seule fois l'Ajout. Il faudra voir s'il n'y a pas des problèmes d'inversion des dates (01/02/2019 devient 02/01/2019). Pour moi il manque un bouton Suppression...

Sinon, pareil que Steelson, vois ce qui te parle le plus. On est là pour t'aider pas pour faire une compétition...

[Humour]Mais fais attention quand même il est parfois assez "vaseux"...

Je fais les modifications de la vase de données "à la volée" par une macro évnementielle.

[/humour]

Excellent ! j'en ris moi-même de mes bêtises.

Pour ma punition, je ne vais même pas modifié mon post !

C'est dommage que microsoft n'ai pas poursuivi le développement des userform en leur donnant des fonctionnalités que l'on trouve dans une feuille : formats date, numériques, validation des données etc.

Bonjour ThauThème,

Je ne sais pas si c'est normal mais le fichier excel est le même que mon fichier de base, je ne vois pas où sont les lignes à corriger??

Que dois-je faire??

Merci,

Excellent ! j'en ris moi-même de mes bêtises.

Pour ma punition, je ne vais même pas modifié mon post !

C'est dommage que microsoft n'ai pas poursuivi le développement des userform en leur donnant des fonctionnalités que l'on trouve dans une feuille : formats date, numériques, validation des données etc.

Hélas oui, ça aurait été bien

Sans parler de certaines documentations comme les modules de classe Où tu as juste la définition et débrouille toi...

Re,

Ben oui Mistinguette c'est le même fichier puisque je me suis servi de ton fichier de base pour faire celui-ci. Je ne comprends pas ce que tu veux dire par je ne vois pas les lignes à corriger !?...

Tu n'as rien à faire, juste à tester et voir ce qui plante... Mais pas sur ce fichier car la version 02 en pièce jointe est plus aboutie et devrait fonctionner nickel.

Re bonjour THAU THEME,

C'est exactement ça que je souhaitais obtenir!! Ca fonctionne très bien, juste lorsque l'on veux ajouter un nouveau titre, j'ai cette ligne ci qui m'indique une erreur:

Private Sub CommandButton2_Click() 'bouton "Ajouter"
Dim I As Integer 'déclare la variable I
Dim D As Date 'déclare la variable D (Date)

Application.ScreenUpdating = False 'masque les raffraîchissements d'écran
If MsgBox("Voulez-vous ajouter un nouveau Titre ?", vbYesNo, "Demande de confirmation") = vbYes Then 'condition : si "Oui" au message
   [Surligner] GT.Cells(LR, 1).Value = Me.ComboBox1.Value 'renvoie dans la ligne LR colonne 1 la valeur de la ComboBox1
[/Surligner]    For I = 1 To 20 'boucle sur les 20 TextBoxes
        Select Case I 'agit en fontion de I
            Case 3, 5, 10, 11 'cas 3, 5, 10 et 11
                D = DateSerial(Year(Me.Controls("TextBox" & I).Value), Month(Me.Controls("TextBox" & I).Value), Day(Me.Controls("TextBox" & I).Value)) 'définit la date D
                GT.Cells(LR, Me.Controls("TextBox" & I).Tag) = D 'renvoie dans la ligne LR colonne = propriété [Tag] de la Textbox, la date D
            Case Else 'autres cas
                'renvoie dans la ligne LR colonne = propriété [Tag] de la Textbox, la valeur de la TextBox de la boucle
                GT.Cells(LR, Me.Controls("TextBox" & I).Tag) = Me.Controls("TextBox" & I).Value
            End Select 'fin de l'action en fonction de I
    Next I 'prochaine TextBox de la boucle
End If 'fin de la condition
MsgBox "Enregsitré !" 'message
Unload Me ' Vide et ferme l'Userform
UserForm1.Show vbModeless  'Affiche l'UserForm
Application.ScreenUpdating = True 'affiche les raffraîchissement d'écran
End Sub

En revanche sinon c'est exactement ça, merci énormément surtout de m'avoir commenté chaque ligne cela va me permettre de comprendre comment faut -il faire la prochaine fois.

Merci encore pour tout!! YOUPIIII

Oh ça n'a pas surligné!:

Oups:

GT.Cells(LR, 1).Value = Me.ComboBox1.Value 'renvoie dans la ligne LR colonne 1 la valeur de la ComboBox1

Re,

Je ne comprend pas, chez moi ça marche. As-tu changé quelque chose ? Peux-tu mettre en pièce jointe le fichier qui plante ?

J'ai ouvert le fichier MISTINGUETTE_EP V2, je n'ai pas touché à quoi que ce soit, j'ai juste cliqué sur les boutons modifier etc... Mais question quand on souhaites faire un ajout, on doit d'abord cliquer sur modifier peut-être??

Je mets à nouveau le fichier

Re,

En fait il y a un bug dans mon programme car je n'ai permis l'ajout que si la valeur de la Combobox1 n'existait pas dans sa liste (si ListIndex = -1). Mais je viens de m'apercevoir que ça va pas. Je revoie ma copie et te proposerai une version 03.

Sinon, pour modifier, tu choisis un titre dans la ComboBox1, les TextBoxes se remplissent avec les données de la ligne, tu modifies la ou les TextBoxes qui sont erronées puis tu cliques sur le bouton MODIFIER. Comme l'UserForm se ferme et s'ouvre à nouveau sut la ligne que tu viens de modifier, tu vois desuite les modifications faites...

Re bonjour ThauThème,

Je te remercie grandement car c'est tout à fait ce que je cherchais à faire. Le formulaire fonctionne très bien en effet, juste le souci de l'ajout, en faite je veux pouvoir ajouter, car on peut très bien avoir des nouveaux titres à insérer qui n'ont pas encore été introduits dans la base de données. Je te remercie en tous cas de te pencher dessus et de m'aider. Afin que je puisse ne pas venir vous re-solliciter, juste une question pour bien comprendre:

Donc lorsque l'on insert une listbox, pour que celle ci puisse correspondre aux textboxs en fonction de la combobox, il faut que les colonnes de la listBox soit toujours associés aux dernières textboxs?? C'est à dire que les données de ma base qui doivent être dans la list box sont en plein milieu de mon tableau en colonne N, O, P (sur une base qui s'étend de A à U), quand je bâtis mon userform, les textboxs pour N,O,P, doivent être les 3 dernières textboxs en fin de ligne??

Merci bcp en tous cas cela m'aide fortement.

Merci encore.

Re,

Non c'est pas exactement ça. Quand j'ai construit l'UserForm au début je n'avais pas prévu les trois TextBoxes correspondant à la ListBox1. je les ai donc rajoutées après et c'est pour cela quelles portent les numéros 18 à 20

Les 3 colonnes de la ListBox1 s'alimente via le tableau des valeurs TV donc indépendamment des TextBoxes 18 à 20 avec :

For I = 2 To DL 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    If TV(I, 1) = Me.ComboBox1 Then 'condition : si la donnée ligne I colonne 1 de TV est égale à la valeur de la ComboBox1
        Ligne = I 'définit la ligne Ligne
        With Me.ListBox1 'prend en compte la ListBox1
            .AddItem 'ajoute un élément
            .Column(0, .ListCount - 1) = TV(I, 14) 'récupère dans la colonne 0 de la ListBox1 la donnée ligne I colonne 14 de TV
            .Column(1, .ListCount - 1) = TV(I, 15) 'récupère dans la colonne 1 de la ListBox1 la donnée ligne I colonne 15 de TV
            .Column(2, .ListCount - 1) = TV(I, 16) 'récupère dans la colonne 2 de la ListBox1 la donnée ligne I colonne 16 de TV
        End With 'fin de la prise en compte de la ListBox1
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle

En revanche, pour alimenter toutes les TextBoxes c'est la propriéte [Tag] de la TextBox qui permet de récupérer la valeur quelque soit l'ordre. Cette propriété correspond à la colonne du tableau.

'alimentation des TextBoxes
For I = 1 To 20 'boucle sur les 20 TextBoxes
    Me.Controls("TextBox" & I) = "" 'efface l'ancienne valeur
    Me.Controls("TextBox" & I) = GT.Cells(Ligne, Me.Controls("TextBox" & I).Tag) 'reçupère la valeur de la Ligne
Next I 'prochaine TextBox de la boucle

Pour mieux comprendre, sélectionne la propriété [Tag] dans la fenêtre des propriétés puis clique une à une dans les différentes TextBoxes et regarde cette propriété... Tu vois, l'ordre n'a plus d'importance et cela permet de renseigner les contrôles via une boucle comme cela permet de renvoyer les valeur des contrôles dans le tableau via une autre boucle.

J'espère que c'est clair.

Bon maintenant c'est moi qui ai une question.

Quand tu ajoutes un données qui est déjà dans la liste.

Est-ce que obligatoirement les colonnes B à M, Q à U restent inchangées et seules les colonne N à P peuvent changer ou

N'importe quelle colonne peut-être modifiée ?

Bonjour ThauThème,

Oui c'est très claire et merci pour ces explications. je fais donc réponse à ta question dans cette base de données ci, normalement les données ne peuvent pas changer de B à M (c'est un peu l'identité du titre et des sommes que l'on engage dessus), en revanche il peut y avoir en fonction de l'évolution du titre, des données qui changent en Q à U.

Si le codage varie lorsque les données sont changeantes ou pas et si c'est possible de me dire qu'elle sera alors la choses à veiller et à modifier, car par la suite, il se peut qu'un cas comme l'autre se présente.

D'avance merci,

C'est gentil d'avoir passer du temps pour cette aide, cela m'avait découragé car j'avais tenté plusieurs choses en lisant les différents post et ce fut difficile d'adapter, surtout quand on comprend pas déjà la base.

Merci encore.

Rechercher des sujets similaires à "formulaire personnalise userform listbox combox textbox"