Additionner 2 txtbox sur une 3éme txtbox dans un userform

Bonjour , savez comment je pourrais s'il vous plait pour que quand je fais une saisie avec le formulaire, le txtCodeProduit ce remplis automatiquement en fessant la référence + le numéro du produit par exemple: Référence: LSPPN + Numéro:12345678900 = Code Produit : LSPPN 12345678900 . J'ai essayer de le faire avec un petit programme ( voir ci-dessous ) , mais je l'ai retirer du Excel car il me fait planter le formulaire de saisie je comprend pas pourquoi. J'envoie le fichier Excel en pièce joint, merci pour votre aide.

Private Sub txtRéférence_Change()
CalculSomme
End Sub
Private Sub txtNuméro_Change()
CalculSomme
End Sub
'ajoute le txtréférence et le txtNuméro dans le txtCodeProdui
Private Sub CalculSomm()

Me.txtCodeProduit.Value = Me.txtRéférence.Value + Me.txtNuméro.Value

End Sub

Cordialement.

8stock-v6.xlsm (75.19 Ko)

Bonjour,

Il faut remplacer le + par un & qui est l'opérateur de concaténation des chaines de caractères.

Cdlt,

Bonjour,

Essayez :

Private Sub txtNuméro_Change()
     If txtRéférence <> "" Then
        txtCodeProduit = txtRéférence & " " & txtNuméro
     End If
End Sub

A oui cela fonctionne bien maintenant, merci!

Petite dernière question svp, pourquoi quand je rentre un nouveau produit avec le formulaire de saisi, il ne s'ajoute pas dans mon tableau. Je veut dire qu'il ne prend pas la forme de mon tableau avec les bonnes couleurs, merci.

capture d ecran 2022 02 20 154837

Cordialement

Bonjour à tous,

Parce qu'il semble que votre tableau ne soit pas un tableau structuré. Seuls les TS se restructurent et permettent la propagation des formules et en général des mises en forme.

Il n'y a aucun formatage couleur dans votre procédure de validation. Il n'y a pas non plus de mise en forme conditionnelle sur la colonne C de votre onglet.

Qu'est ce que je pourrais faire du coup pour permettre la propagation de la mise en forme svp? J'ai vérifier et j'ai bien un tableau non? En ce qui concerne la colonne C, je mets pour l'instant la couleurs manuellement, je réfléchis si je dois mettre un programme vba pour changer la couleur automatiquement.

Cordialement.

Bonjour,

Il faut mettre votre tableau sous forme de tableau structuré justement en le sélectionnant, et en faisant Accueil/mettre sous forme de tableau, en cochant avec en-têtes. Là, pour l'instant, votre tableau ne semble pas structuré sur l'image (je n'ai pas ouvert votre fichier).

Il faudra veiller à le renommer (dans l'onglet contextuel nommé CREATION apparaissant à droite en jaune) pour le manipuler plus simplement depuis l'éditeur de code.

Cdlt,

Bonjour 3GB, j'ai bien suivi t'es instructions, j'ai renommé mon tableau "TStock2022" et donc par la suite modifier mon VBA, il a bien un en-tête mais il ne prend toujours pas automatiquement les nouvelles lignes que j'ajoute . Je suis obligé détirer manuellement mon tableau après chaque saisie de nouveau produit. Pourriez-vous y jeter un œil svp? j'envoie le fichier a jour en pièce joint. Merci pour votre aide.

Cordialement

5gestionstock.zip (351.71 Ko)

Bonjour Minakashi,

Désolé je n'ouvre pas les fichiers... Mais vous pouvez poster vos codes ici à l'aide des balises </> si vous voulez.

Avant toute chose, il faut que le tableau soit "plein", c'est-à-dire sans ligne vide.

Ensuite, l'archivage peut par exemple se faire de cette manière :

with range("TStock2022")
    nvl = .rows.count + 1 'ou .listobject.listrows.count + 1
    .cells(nvl, 1) = "nouvelle valeur en col 1"
end with

où nvl est la nouvelle ligne.

Cdlt,

A oui d'accord, voici le code pour l'instant provenant d'un bouton dans un UserForm:

'Procédure permettant de sauvegarder l'ajout d'un nouveau produit dans la base de donnée
Private Sub btnValider_Click()

     'On se que les controles ont bien ete saisie
     If Len(Me.txtDésignation) = 0 Then
         Me.lblMessage = "Veuillez saisire la désignation du Produit."
         Me.txtDésignation.SetFocus
     ElseIf Len(Me.txtRéférence) = 0 Then
         Me.lblMessage = "Veuillez saisire la référence du Produit."
         Me.txtRéférence.SetFocus
     ElseIf Len(Me.txtNuméro) = 0 Then
         Me.lblMessage = "Veuillez saisire le Numéro du Produit."
         Me.txtNuméro.SetFocus
     ElseIf Len(Me.txtCodeAlice) = 0 Then
         Me.lblMessage = "Veuillez saisire le Code Alice du Produit."
         Me.txtCodeAlice.SetFocus
     ElseIf Len(Me.txtPoids) = 0 Then
         Me.lblMessage = "Veuillez saisire le Poids du Produit."
         Me.txtPoids.SetFocus
     ElseIf Len(Me.txtEmplacement) = 0 Then
         Me.lblMessage = "Veuillez saisire l'Emplacement du Produit."
         Me.txtEmplacement.SetFocus
     ElseIf Len(Me.txtQuantité) = 0 Then
         Me.lblMessage = "Veuillez saisire la Quantité du Produit."
         Me.txtQuantité.SetFocus
     ElseIf Len(Me.txtDateEntrer) = 0 Then
         Me.lblMessage = "Veuillez saisire la Date d'Entrer du Produit."
         Me.txtDateEntrer.SetFocus
     ElseIf Len(Me.CboNomStock) = 0 Then
         Me.lblMessage = "Veuillez sélectionner le Nom du Stock ."
         Me.CboNomStock.SetFocus
     Else    'Si tous les champs sont saisie alors on peut sauvgarder la source
         'On cherche la prochaine ligne vide de la source
         Feuil2.Activate
         Feuil2.Range("A1048576").End(xlUp).Offset(1, 0).Select
         'On affecte les données du formulaire dans la source
         ActiveCell.Offset(0, 0) = Me.txtCodeProduit
         ActiveCell.Offset(0, 1) = Me.txtDésignation
         ActiveCell.Offset(0, 2) = Me.txtRéférence
         ActiveCell.Offset(0, 3) = Me.txtNuméro
         ActiveCell.Offset(0, 4) = Me.txtCodeAlice
         ActiveCell.Offset(0, 5) = Me.txtPoids
         ActiveCell.Offset(0, 6) = Me.txtEmplacement
         ActiveCell.Offset(0, 7) = Me.txtQuantité
         ActiveCell.Offset(0, 8) = Me.txtDateEntrer
         ActiveCell.Offset(0, 9) = Me.CboNomStock

         MsgBox "Votre produit a bien été ajouter à votre base de données", vbOKOnly + vbInformation, "CONFIRMATION"

     End If

End Sub

Savez-vous ou je dois ajouter le vôtre ? Merci.

Cordialement

Voici un essai de réorganisation du code, basé sur les noms des contrôles :

'Procédure permettant de sauvegarder l'ajout d'un nouveau produit dans la base de donnée
Private Sub btnValider_Click()
tSaisie = array("txtCodeProduit", "txtDésignation", "txtRéférence", "txtNuméro", "txtCodeAlice", _
                    "txtPoids", "txtEmplacement", "txtQuantité", "txtDateEntrer", "CboNomStock")
redim tData(1 to ubound(tSaisie) + 1)
'boucle sur les controles pour sonder les vides
for each elem in tSaisie
    n = n + 1: tData(n) = me.controls(elem)
    if me.controls(elem) = "" then
        msg = msg & vblf & " > " & replace(replace(elem, "txt", ""), "Cbo", "")
    end if
next elem
'Validation : si des vides existent, on met à jour le msg et on sort
if msg <> "" then me.lblMessage = "Saisie incomplète :" & vblf & msg: exit sub
'Enregistrement
with range("TStock2022")
    nvl = .rows.count + 1 'ou .listobject.listrows.count + 1
    .cells(nvl, 1).resize(1, n) = tData
end with
'MsgBox "Votre produit a bien été ajouter à votre base de données", vbOKOnly + vbInformation, "CONFIRMATION"
'Nettoyage
for each elem in tSaisie
    me.controls(elem) = ""
next elem
End Sub

Cdlt,

La nouvelle valeur ne prend toujours pas en compte la forme du tableau... fin bon ce n’est pas très grave je vais rester comme ça pour l'instant, vous m'avez déjà trop aidée. Merci 1000 fois 3GB.

Cordialement.

Comment ça ? Les nouvelles valeurs sont bien intégrées au tableau n'est-ce pas ?

Quant au format, il faut enlever le remplissage qui existait avant que le tableau ne soit structuré pour constater la propagation de la mise en forme.

Non les valeurs ne s'intègre pas au tableau, j'ai pourtant bien fais " aucun remplissage" en sélectionnant des lignes en dessous du tableau.

capture d ecran 2022 02 23 141635 capture d ecran 2022 02 23 141016

Cordialement.

C'est étrange, je ne crois pas avoir déjà rencontré ce problème.

Essayez ce code à la place :

'Procédure permettant de sauvegarder l'ajout d'un nouveau produit dans la base de donnée
Private Sub btnValider_Click()
tSaisie = array("txtCodeProduit", "txtDésignation", "txtRéférence", "txtNuméro", "txtCodeAlice", _
                    "txtPoids", "txtEmplacement", "txtQuantité", "txtDateEntrer", "CboNomStock")
redim tData(1 to ubound(tSaisie) + 1)
'boucle sur les controles pour sonder les vides
for each elem in tSaisie
    n = n + 1: tData(n) = me.controls(elem)
    if me.controls(elem) = "" then
        msg = msg & vblf & " > " & replace(replace(elem, "txt", ""), "Cbo", "")
    end if
next elem
'Validation : si des vides existent, on met à jour le msg et on sort
if msg <> "" then me.lblMessage = "Saisie incomplète :" & vblf & msg: exit sub
'Enregistrement
with range("TStock2022").listobject
    .listrows.add.range = tData
end with
'MsgBox "Votre produit a bien été ajouter à votre base de données", vbOKOnly + vbInformation, "CONFIRMATION"
'Nettoyage
for each elem in tSaisie
    me.controls(elem) = ""
next elem
End Sub

OH incroyable vous avez réussi! je penser que j'allais rester comme ça indéfiniment haha. Merci 3GB vous êtes vraiment fort en VBA. Pouvez-vous juste m'expliquer comment vous avez fait svp? je ne comprends pas grand-chose , merci.

Cordialement

Super, je suis content que ça marche ! J'ai juste remplacé :

with range("TStock2022")
    nvl = .rows.count + 1 'ou .listobject.listrows.count + 1
    .cells(nvl, 1).resize(1, n) = tData
end with

par

with range("TStock2022").listobject
    .listrows.add.range = tData
end with

Dans le premier cas, on agit sur la plage nommée TStock2022 (sans tenir compte du fait que ce soit un TS). On stocke la position de la prochaine nouvelle ligne dans la variable nvl et ensuite, on restitue le tableau de valeur tData (alimenté plus haut dans le code) justement à cette nouvelle ligne. L'opération a marché mais le tableau ne s'est pas automatiquement restructuré comme il l'aurait dû...

Dans le second code, j'ajoute vraiment une nouvelle ligne au TS à laquelle j'affecte tData.

range("TStock2022").listobject est le tableau structuré, .listrows renvoie la collection des lignes, la méthode .add renvoie la ligne qu'on ajoute, .range renvoie l'objet range correspondant à cette ligne.

A ok je comprend beaucoup mieux, merci pour t'es explications.

Cordialement.

Rechercher des sujets similaires à "additionner txtbox 3eme userform"