Je rame desesperemment sur un problème dont j'ai joint un exemple pour être plus clair. Je cherche une macro qui m'evite de passer par la formule "=recherchev...", je ne veux plus de la demande de mise a jour lors de l'ouverture d'un fichier qui recherche des valeurs provenant d'autres fichiers. C'est une source à erreur pour mes utilisateurs.
L'exemple se présente sur une feuille, alors que mon désir est d'avoir un fichier nommé par exemple catalogue.xls et un autre devis.xls.
Est ce que je suis obligé de faire une macro qui copie/colle les infos de catalogue.xls dans le fichier devis.xls pour avoir une liste a inserer dans une combobox et d'en traiter les infos ?
Pour infos il y aura qu'un article par feuille.
Ok pour ouvrir le fichier catalogue aussi, mais comment indiquer à la combobox (dans devis.xls) que ma liste provient de catalogue.xls. Dans la RowSource peut on mettre =d:\*******feuil1!a1:a3
Et selon mon exemple joint, si je modifie des infos de ma fiche article (infos provenant du catalogue), je ne veux pas que ces infos soit modifié dans mon fichier catalgue mais uniquement sur ce devis et de plus qu'il garde en memoire ces infos modifiés.
Le VBA est un outils puissant, tu définit d'abord les objets sur lesquels tu veux travailler, ensuite tu les utilises.
Tu trouveras ci-joint deux fichiers : Devis.xls et Catalogue.xls (à mettre dans le même répertoire)
1) Ouvre le fichier Devis (le fichier catalogue sera ouvert automatiquement)
2) Clique sur le bouton article (tous les articles du catalogue seront présent dans ton USF
le code ne doit pas être juste parce qu'il me fait un calcul faut.
Seconde question, si je change un prix dans la userform (provenant du catalogue) je voudrait que le calcul se modifie automatiquement, est ce possible sans initializer la user
merci aussi pour tes infos, une question, tu recuperes les infos dans catalogue, ok mais t'en fait quoi ? tu les colles dans yoyo ou tu les garde en memoire ?
> J'ai completé ma userform avec un recalcul automatique "si changement de valeur dans TextBoxP1". Le problème il me donne le resultat que si les valeur sont entiere soit 0.5 X 0.4 = 0 et 1 X 1 = 1
Private Sub TextBoxP1_Change()
calculsomme
End Sub
Sub calculsomme()
TextBoxT1 = Val(TextBoxQ1) * Val(TextBoxP1)
TextBoxT1 = Format(TextBoxT1.Value, "#,##0.00")
End Sub
encore merci bruno, j'essayerais cela demain
j'avais pour l'instant remplacer val par cdtv (c'est pas tout a fait ça)
mais mon problème maintenant c'etait le point du clavier numerique qu'il n'acceptait pas mais seulement la virgule.
quelques exemples pour la saisie de valeurs numériques dans un TextBox.
avec . tu employes val
avec , cdbl(tu as un exemple dans l'userform)
'remplace le point par une virgule
Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 46 Then KeyAscii = 44
End Sub
'avec la virgule non valide (entier)
Private Sub textBox1_Change()
On Error Resume Next
If Not IsNumeric(Right(TextBox1, 1)) Then
MsgBox "Le caractere saisi n'est pas valide"
TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
End If
End Sub
'avec la virgule valide(décimale)
Private Sub textBox1_Change()
On Error Resume Next
If Not IsNumeric(Right(TextBox1, 1)) And Right(TextBox1, 1) <> "," Then
MsgBox "Le caractere saisi n'est pas valide"
TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
End If
End Sub
'Auteur Didier MdF
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case Is < 48, Is > 57
KeyAscii = 0
End Select
End Sub