Page 1 of 1

Excel et VBA (Nouveau)

Posted: 05 Aug 2007, 10:23
by Amex
Bonjour à tous !

Je vous explique un peu mon problème...:
Je suis en train de me monter un programme de gestion (pour une entreprise). Je le monte avec Excel, Access et VBA. Mais je suis tombé sur une énorme intérrogation et là-voici:

Dans un Userform, j'ai deux boutons d'options, permettant de mettre un rabais ou de ne pas en mettre. L'utilisateur doit alors cliquer sur Appliquer pour appliquer le rabais. Si l'utilisateur désire mettre un rabais, il clique sur "Facture avec un rabais", et doit alors entrer le code du rabais. Si l'utilisateur entre le code "E10", un label.caption affichera le détail du rabais, un peu comme le fait =RECHERCHEV() de Excel.
Voici une belle image pour les visuels (lles):
Image

C'est là mon problème:
lorsque je clique dans le textbox RAISON (dans mon code, il s'apelle Textbox1), et que je n'écrit rien, et que je sort du textbos, j'ai une erreur qui se produit, en me disant:
Impossible de lire la propriété VLookUp de la classe WorkSheetFunction.

Dans le fond, lorsque je sort de la textbos, mon Userform cherche automatiquement la valeur reliée au code entré. Mais s'il n'y a aucun code d'entré, il plante, car il ne sais pas qu'il ne doit pas chercher........

Voici mon code de ce UserForm, pour mieux comprendre:

Code: Select all

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim code As Variant
Dim raison As Variant
Dim rabais As Variant
code = TextBox1.Text
Sheets("_dta").Activate
raison = WorksheetFunction.VLookup((TextBox1.Text), Range("_escmpt"), 2, False)
rabais = WorksheetFunction.VLookup((TextBox1.Text), Range("_escmpt"), 3, False)
Label4.Caption = raison
pourcentage.Text = rabais

If TextBox1.Text = "n" Or TextBox1.Text = "N" Then
Dim perso As Double
perso = InputBox("Entrez le pourcentage de rabais accordé.")
pourcentage.Text = perso
End If

End Sub
Donc c'est ça, est-ce que quelqu'un pourrait m'aider à faire comprendre à Excel que si le TextBox1 est vide, de ne pas faire la recherche VLookUp ??
Mercii!!!

Posted: 05 Aug 2007, 22:41
by GoHabsGo
Bonjour,
je n'ai pas testé pour vérifier mais de mémoire, essayez cela avec IsNull(). Il serait probablement aussi valable de vérifier pour la chaine de caractère vide.:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim code As Variant
Dim raison As Variant
Dim rabais As Variant

If IsNull(TextBox1.Text) Or TextBox1.Text = "" Then
Exit Sub
End If

code = TextBox1.Text
Sheets("_dta").Activate
raison = WorksheetFunction.VLookup((TextBox1.Text), Range("_escmpt"), 2, False)
rabais = WorksheetFunction.VLookup((TextBox1.Text), Range("_escmpt"), 3, False)
Label4.Caption = raison
pourcentage.Text = rabais

If TextBox1.Text = "n" Or TextBox1.Text = "N" Then
Dim perso As Double
perso = InputBox("Entrez le pourcentage de rabais accordé.")
pourcentage.Text = perso
End If
End Sub

P.S. ceci:
If TextBox1.Text = "n" Or TextBox1.Text = "N" Then
peut être remplacé par:
If UCase(TextBox1.Text) = "N" Then

Posted: 06 Aug 2007, 20:46
by Amex
Mille fois merci, le nouveau bout de code fonctionne à merveille !

Et pour le code UCase, vous m'avez donné une idée... dans le même projet, mais un module différent, l'utilisateur doit entrer une ligne de commande (exemple: manage). Mais s'il ne l'entre pas en UCase, ça ne fonctionne pas, je vais faire convertire la ligne de commande ;)

Merci !!

Posted: 08 Aug 2007, 22:36
by GoHabsGo
Je suis très heureux que votre désagrément soit réglé. Si vous avez d'autres questions pendant le développement de votre projet, revenez nous voir!

Posted: 19 Aug 2007, 18:56
by Amex
J'ai une autre question, un petit problème que je n'arrive vraiment pas à résoudre, j'ai effectué beaucoup de recherches, mais je n'arrive à rien...

J'aimerais sortir un numéro de facture, basé sur l'année, le mois, le jour et l'heure.

Par exemple, le 20 avril 2008, à 9h27 32sec PM, j'aurai: 20080420212732

Est-ce possible..?

Posted: 22 Aug 2007, 20:57
by GoHabsGo
Bonsoir Amex,
pour une question différente, vous feriez mieux de créer un nouveau sujet. Ce serais plus évident que d'ajouter une question quelques jours plus tard dans un sujet existant.

Je ne suis pas certain de comprendre votre question. Mais regardez la fonction "format". Avec cette fonction, vous pouvez faire quelque chose du genre:
Dim noFacture as String

noFacture = format(Now(), "yyyymmddhNS")
' Si on est le 20 avril 2008, à 9h27 32sec PM
' Alors noFacture = "20080420212732"