Enregistrer données Texbox avec référence d'une ComboBox

Bonjour, Mon UserForm prend forme en partie grâce a vous . Merci!

je suis confronter a un autre problèmes pour le finaliser.

J'ai voulu récupérer un code pour:

- Lorsque j'inscris des données dans mes TextBox (10 au total) elles s'enregistrent dans la feuille INVENTAIRE dans les colonnes E à N en fonction que les texBox soient complétées ou non.

- Il faut aussi que les données que je rentre dans mes TextBox soient en relations lors de l'enregistrement avec le choix qui a été fait dans ma liste déroulante. (ComboTri) (la liste est la colonne A de la Feuille INVENTAIRE à partir de la cellule 16

Merci pour votre précieuse aide, si vous pouviez me donner une piste,

Bon week-end

6inventaire.zip (784.10 Ko)

Bonsoir,

De quel Userform parlez-vous ?

Il faudra être un peu plus explicite si vous voulez de l'aide

A+

Bonjour Bruno45,

En fait, c'est l'userForm "UserInventaire".

C'est vrai qu'il y en a deux dans le fichier.

Merci pour votre aide

Bonjour

Vous auriez pu rester sur le fil précédent pour éviter de dupliquer...
Je vous avais préparé ce code hier mais pas eu le temps de poster

Remplacez le code Combori change par celui ci

Private Sub ComboTri_Change()
Dim lig As Long

With Sheets("INVENTAIRE").ListObjects("Tableau15")
    On Error Resume Next
    lig = .ListColumns(1).DataBodyRange.Find(ComboTri.Value, LookIn:=xlValues, lookat:=xlWhole).Row - 15
End With

With Me
    .TextBox1 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 3).Value
    .TextBox2 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 4).Value
    .TextBox3 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 16).Value
    .TextBox4 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 15).Value
    '.TextBox5 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 4).Value
    .TextBox6 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 5).Value
    .TextBox7 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 6).Value
    .TextBox8 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 7).Value
    .TextBox9 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 8).Value
    .TextBox10 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 9).Value
    .TextBox11 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 10).Value
    .TextBox12 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 11).Value
    .TextBox13 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 12).Value
    .TextBox14 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 13).Value
    .TextBox15 = Sheets("INVENTAIRE").ListObjects("Tableau15").DataBodyRange(lig, 14).Value
End With

End Sub

Cordialement

Bonjour Dan,

Super je viens de changer le code dans ComboTri Change.

Ca fonctionne comme je le souhaites jusqu'à la TexBox5.

Par la suite à partir de la TexBox6, et jusqu'à la Texbox 15 est-ce possible de faire le renvoie des valeurs dans le fichier INVENTAIRE en fonction du produit choisi au préalable dans la liste déroulante? C'est a partir de l'UserForm que je souhaite prendre mon inventaire.

je renvoie le fichier corrigé et merci encore pour votre aide

Christian

10inventaire.zip (776.10 Ko)

Re,

j'avais pensé a ceci mais cela n'a pas l'air de fonctionner

Private Sub ButtonEnregistrer_Click()
Sheets("INVENTAIRE").Activate
Range("A16").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
ActiveCell = ComboTri.Value
ActiveCell.Offset(0, 5).Value = TextBox6
ActiveCell.Offset(0, 6).Value = TextBox7
ActiveCell.Offset(0, 7).Value = TextBox8
ActiveCell.Offset(0, 8).Value = TextBox9
ActiveCell.Offset(0, 9).Value = TextBox10
ActiveCell.Offset(0, 10).Value = TextBox11
ActiveCell.Offset(0, 11).Value = TextBox12
ActiveCell.Offset(0, 12).Value = TextBox13
ActiveCell.Offset(0, 13).Value = TextBox14
ActiveCell.Offset(0, 14).Value = TextBox15

Range("A16:Y" & Range("A" & Rows.Count).End(xlUp).Row).Sort , key1:=Range("A16"), order1:=xlAscending, Header:=xlN

End Sub

Ne m'envoyez pas un fichier cela ne me sert pas et cela alourdit le forum inutilement. J'ai le votre ici sur lequel j'effectue les modifications avant de vous les poster. Sans quoi je dois parfois tout recommencer

Par la suite à partir de la TexBox6, et jusqu'à la Texbox 15 est-ce possible de faire le renvoie des valeurs dans le fichier INVENTAIRE en fonction du produit choisi au préalable dans la liste déroulante? C'est a partir de l'UserForm que je souhaite prendre mon inventaire.

En gros lors de votre choix dans la combo, vous voulez uniquement récupérer les infos jusque la textbox5, ensuite vous complétez les textbox 6 à 15.
Une question : Le fait de cliquer sur ENREGISTRER implique que vous ajoutez les données à la dernière ligne de la feuille Inventaire ou que vous modifiez la ligne existante en rapport avec le choix dans la combotri ?

Autre chose dans votre dernier fichier, vous avez utilisé des ROWSSOURCE. A éviter !!!!. On n'a trop souvent des soucis avec cette instruction.
Je vous ai donné le code dans le fil précédent et vous ne l'utilisez pas
Votre code Private Sub UserInventaire_Initialize() est faux !. Vous devez mettre Private Sub UserForm_Initialize()

Merci pour les conseils des post. j'en prends bonne note.

Avec les données que je rentre dans les TexBox 6 à 15,

j'aimerais modifiez la ligne existante(de la colonne E à la colonne N du fichier INVENTAIRE) en rapport avec le choix dans la combotri

Merci pour votre aide précieuse pour moi

Je repars de votre dernier fichier.
Dans le votre faites déjà ceci.
Cliquez sur la combo puis modifiez ceci dans les propriétés
- Supprimez le rowssource
- Supprimez la valeur --> Haricot.... qui mise dans la propriété Text
- Remplacez Private Sub UserInventaire_Initialize() par Private Sub Userform_Initialize(). Vous ne devez jamais utiliser le nom de votre userform dans cet code et ce, quelque soit le fichier ou l'userform

Autre point : dans le fil précédent je vous avais dit de supprimer les lignes depuis 908 jusque 4392. Dans votre dernier fichier je vois toujours des lignes vides de 908 à 1507. Vous devez les supprimer. Relisez le fil précédent car si vous ne faites pas ce que je vous écris vous n'allez pas en sortir.
Dans les tableaux structurés, vous ne devez jamais avoir de lignes vides après la dernière ligne complétée. Votre dernière ligne est la 907...

Je vais regarder pour le code Enregistrer

Edit : est-ce qu'il est possible que les textbox 1 à 5 soient aussi modifiées ou sont-elles figées ?

@Dan je te reconnais bien là 🤔 quelle patience 😜🙏

Parfait je vais suivre à la lettre vos recommandations , je m'y attaque

Ok

Quid de ma question au sujet des textbox 1 à 5 ?

Le TexBox 1à 5 fonctionnent bien elles renvoient bien la valeur demandé .

je ne comprend pas bien la question

merci

Le TexBox 1à 5 fonctionnent bien elles renvoient bien la valeur demandé .

je ne comprend pas bien la question

Vous choisissez une donnée dans la combotri. Cette valeur vous renvoie des informations dans les textbox 1 à 5

Vous allez compléter les textbox 6 à15 mais vous pourriez aussi vouloir modifier une ou plusieurs des textbox 1 à 5.
La question est donc de savoir si cette userform sert uniquement à modifier ou compléter les textbox 6 à 15. Si oui, on peut prévoir de ne pas donner accès au textbox 1 à 5 dans cette userform.

Vous comprenez ?

Ha oui Parfait, je comprends le sens.

Oui c'est une bonne idée de pouvoir modifier les texbox de 1à 5 au cas ou les données changeraient mais se serait des cas isolés.

Mais oui pourquoi pas. Ce serait un plus

Merci beaucoup pôur votre soutient

Oui c'est une bonne idée de pouvoir modifier les texbox de 1à 5 au cas ou les données changeraient mais se serait des cas isolés.

En y repensant ce n'est peut être pas une bonne idée à ce stade. Au tout au moins, il faudrait peut être penser à cette possibilité au travers d'un bouton Modifier par exemple. (A voir plus tard)

Faites donc ceci :

1. Ouverture userform : Remplacez le code Private Sub Userform_Initialize() par celui ci-dessous. Cela évite d'aller modifier la combotri et les textbox 1 à 5.

Private Sub Userform_Initialize()
With Sheets("INVENTAIRE")
    ComboTri.List = .ListObjects("Tableau15").ListColumns(1).DataBodyRange.Value
    ComboTri.Style = fmStyleDropDownList
    For i = 1 To 5
        Me.Controls("Textbox" & i).Locked = True
    Next i
End With
End Sub

2. Bouton Enregistrer : Ajoutez le code ci-dessous pour le bouton Enregistrer

Private Sub ButtonEnregistrer_Click()
With Sheets("INVENTAIRE").ListObjects("Tableau15")
    On Error Resume Next
    lig = .ListColumns(1).DataBodyRange.Find(ComboTri.Value, LookIn:=xlValues, lookat:=xlWhole).Row - 15
    With .DataBodyRange
        .Item(lig, 5).Value = TextBox6.Value
        .Item(lig, 6) = TextBox7.Value
        .Item(lig, 7) = TextBox8.Value
        .Item(lig, 8) = TextBox9.Value
        .Item(lig, 9) = TextBox10.Value
        .Item(lig, 10) = TextBox11.Value
        .Item(lig, 11) = TextBox12.Value
        .Item(lig, 12) = TextBox13.Value
        .Item(lig, 13) = TextBox14.Value
        .Item(lig, 14) = TextBox15.Value
    End With
End With
End Sub

Dites moi si ok.

Cordialement

Ca fonctionne a merveille, je te suis très reconnaissant.

cela tombe a pic pour la fin de mois :) Merci de tout cœur. du temps passé pour ce projet qui mijotais depuis quelques temps dans ma tête.

je vais maintenant aller ligne par ligne pour essayer de bien comprendre le code.

Bonne fin de dimanche et encore merci pour la patience et ton dévouement.

Christian

Parfait.

Maintenant je pense qu'il y a d'autres choses que vous pourriez modifiez et aussi revoir l'userfom SaisieInventaire au sujet des Rowssource à supprimer

Si intéressé dites moi

Bonjour Dan,

oui certainement, je vous suis déjà très reconnaissant pour tout ce que vous m'avez appris et si je suis a votre disposition pour continuer.

ne m'en veuillez pas pour les réponses tardives mais oui tout a fait.

merci

Voici les premières propositions de modifications à effectuer.

Si vous êtes d'accord, veillez à bien suivre chaque point

Etape 1
- Allez dans le menu Excel formules --> Gestionnnaire de noms
- Sélectionnez la valeur TABLEAU15
- Cliquez sur le bouton Modifier
- dans la rubrique Noms changez le nom "Tableau15" en "TabInventaire". Ce sera un nom plus parlant
- Allez dans votre Userform "Userinventaire"
- Remplacez tous les noms "Tableau115" par le nom "TabInventaire" (veillez à respecter la casse - Majuscules et minuscules)

Etape 2

- Allez dans le menu Excel formules --> Gestionnaire de noms
- sélectionnez tous les noms où vous voyez #REF puis cliquez sur "Supprimer"

Etape 3

- Je mettrais les infos en B2 à B5 dans la feuille Liste de validation. Par exemple en colonne D
- Une fois fait, je supprimerais la feuille LISTE et renommerais la feuille "Liste de validation" en "LISTES"

Etape 4

- Dans votre feuille Liste de validation (devenue Listes à l'étape 3), sélectionnez H29 à H40
- Click droite et choisir l'option "Supprimer" --> "Ligne de Tableau"

Dites moi si ok sur ces propositions et je modifie le fichier sur lequel je travaille

Rechercher des sujets similaires à "enregistrer donnees texbox reference combobox"