Userform - Copier/Coller et #N/A

Bonjour a tous,

J'ai pas mal avance depuis la derniere fois (sujet ici https://forum.excel-pratique.com/viewtopic.php?f=2&t=140074)

J'ai encore besoin d'un dernier coup de pouce pour 2 choses:

Tout d'abord, le "Copier Coller en valeur". Je veux copier la valeur de la textbox4 (Nouveau Prix) dans la Base de donnee a la place de son ancien prix (var,3).

Cependant, comme vous pouvez le voir, ma macro ne marche pas

TextBox4.Copy Sheets("BDD").Cells(var, 3).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False MsgBox ("Le prix de l'article a correctement été changé!")

La deuxieme partie ou j'ai le plus besoin d'aide, c'est lorsque dans mon userform je rentre une reference non correcte (Par exemple "37" au lieu de "38").

J'aimerais pouvoir empecher l'utilisateur de continuer sa saisie via une msgbox ou juste supprimer les donnees de la textbox1 etc... J'ai essaye avec un "IsError" Then "Laisser vide" mais bon... Ma formule ne marche pas

Private Sub TextBox1_AfterUpdate() 'Remplir valeurs description et ancien prix If IsError(Application.WorksheetFunction.Match(TextBox1.Value, Sheets("BDD").Range("A:A"), 0)) Then TextBox1.Value = "" Else With Me .TextBox2 = Application.WorksheetFunction.VLookup(Me.TextBox1, Sheets("BDD").Range("Source"), 2, 0) .TextBox3 = Application.WorksheetFunction.VLookup(Me.TextBox1, Sheets("BDD").Range("Source"), 3, 0) End With End If End Sub

Merci bcp a tous!

Bonjour,

Pour le 1)

Pas besoin de copier coller. au lieu de

TextBox4.Copy
Sheets("BDD").Cells(var, 3).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

essayer

Sheets("BDD").Cells(var, 3).Value = TextBox4.Value

Pour le 2)

pour éviter de saisir une référence erronée, pourquoi ne pas utiliser une Combobox initialisée avec les références existantes ?

Comme ça, pas d'erreur de saisie et donc pas de gestion des erreurs de saisie?

A+

Merci pour la réactivité !

Le problème pour la 1,cest que je veux garder la cellule avec la devise "€" et quand je modifie le prix, la devise disparaît

Pour la 2,je ne veux pas de liste deroulante parce que ça serait dur de faire défiler plusieurs milliers de références... A moins que la liste deroulante n'empêche pas d'écrire ? Je n'ai jamais fait, je vais essayer ça

Merci !

Pour le 1,

le contenu d'une textbox= string, il faut donc le convertir en numérique.

A essayer :

Sheets("BDD").Cells(var, 3).Value = Ccur(TextBox4.Value)

il faudra voir si pas de soucis suivant le séparateur décimal utilisé.

La mise en forme (€) est à gérer sur la feuille Excel

Pour le 2)

regarder( entre autres ) cette discussion:

https://forum.excel-pratique.com/viewtopic.php?t=106093

A+

Au top merci, j'essaie ça et je passe le sujet en résolu si c'est trouvé 😊

Alors, pour la currency c'est nickel ! Et pour la combo box aussi, je ne suis pas passé par le fichier, mais par contre oui je suis passé par la combobox, j'ai changé dans les propriétés "matchrequired" sur true, et j'ai nommé ma colonne "références" dans la BDD, et dans les propriétés de la combobox, j'ai mis "références" en source !

Merci encore de m'avoir aidé et guidé, mon fichier est presque fini

le contenu d'une textbox= string, il faut donc le convertir en numérique.

A essayer :

Sheets("BDD").Cells(var, 3).Value = Ccur(TextBox4.Value)

il faudra voir si pas de soucis suivant le séparateur décimal utilisé.

Finalement, un peu embêtant d'avoir à utiliser le "." comme séparateur quand on a l'habitude d'utiliser la virgule, y'a t'il un moyen de régler ça svp ?

Pour le souci de virgule, une solution:

Dans Private Sub CommandButton1_Click() remplacer:

Sheets("BDD").Cells(var, 3).Value = Ccur(TextBox4.Value)

par

Sheets("BDD").Cells(var, 3).Value = val(Replace(TextBox4.Value, ",", "."))

Dans Private Sub TextBox4_AfterUpdate() supprimer la ligne

val = TextBox4.Value

Parce cette variable (Val) n'est utilisée nulle part et parce que c'est le nom d'une fonction VBA (utilisée ci dessus).

Supprimer également la déclaration de cette variable

Et pour éviter une erreur en cas de saisie de "." à la place de ",", rajouter

Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 If InStr("1234567890,.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
 If KeyAscii = 46 Then KeyAscii = 44
End Sub

seuls les chiffres pourront être saisis ainsi que "." et "," , le point étant alors transformé en ","

A+

Rechercher des sujets similaires à "userform copier coller"