Excel et VBA (Nouveau)

Post Reply
Amex
Posts: 17
Joined: 05 Nov 2006, 01:16

Excel et VBA (Nouveau)

Post 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!!!
Last edited by Amex on 19 Aug 2007, 18:57, edited 2 times in total.
GoHabsGo
Posts: 171
Joined: 26 Apr 2006, 23:12

Post 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
P4 3.0Ghz HT, 1Go Ram, AiW 9600XT, Windows XP pro sp2.
Dell Inspiron 6400, Centrino duo T2300, 1Go Ram, ATI X1400 256Mb, Windows XP pro sp2.
Amex
Posts: 17
Joined: 05 Nov 2006, 01:16

Post 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 !!
GoHabsGo
Posts: 171
Joined: 26 Apr 2006, 23:12

Post 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!
P4 3.0Ghz HT, 1Go Ram, AiW 9600XT, Windows XP pro sp2.
Dell Inspiron 6400, Centrino duo T2300, 1Go Ram, ATI X1400 256Mb, Windows XP pro sp2.
Amex
Posts: 17
Joined: 05 Nov 2006, 01:16

Post 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..?
GoHabsGo
Posts: 171
Joined: 26 Apr 2006, 23:12

Post 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"
P4 3.0Ghz HT, 1Go Ram, AiW 9600XT, Windows XP pro sp2.
Dell Inspiron 6400, Centrino duo T2300, 1Go Ram, ATI X1400 256Mb, Windows XP pro sp2.
Post Reply