Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2012, 22h10   #1
Membre à l'essai
 
Inscription : octobre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 64
Points : 22
Points : 22
Par défaut Empêcher décrémentation d'un champs quand égale à 0

Bonjour à tous,

J'ai un petit soucis, j'ai un formulaire d'inventaire pour incrémenter ou décrémenter mon champs total_en_inventaire, mais présentement je peux décrémenter sous 0, ce que je veux empêcher.

Voici mon code actuel:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
rivate Sub BTN_Decrementer_Click()
 
If Not IsNull(Me.CodeBarre.Value) Then
 
        'Recherche et affichage de l'enregistrement correspondant au code
        With Me.RecordsetClone
 
            .FindFirst "[Code_Barre]=" & Me.CodeBarre.Value
 
            'Si enregistrement trouvé, Affichage des champs, décrémentation de 1 et refresh de la table
            If .NoMatch = False Then Me.Bookmark = .Bookmark:
            If .NoMatch = False Then [Total_en_inventaire] = [Total_en_inventaire] - 1
            If .NoMatch = False Then Me.Refresh
 
            'Si enregistrement non trouvé, Affichage message d'erreur
            If .NoMatch = True Then MsgBox "Aucun enregistrement valide" & Chr(13) + Chr(10) & "Essayer un nouveau code barre."
 
        End With
 
    Else
        'Si champs texte vide, Message d'erreur
        MsgBox "Vous devez saisir un code barre."
 
    End If
 
    'Efface la valeur du champs texte et lui remet le focus
    Me.CodeBarre.Value = Null
    Me.CodeBarre.SetFocus
 
End Sub
Tout fonctionne très bien, alors voici ce que j'ai fait comme modification pensant régler mon problème.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
Private Sub BTN_Decrementer_Enter()
 
 
If Not IsNull(Me.CodeBarre.Value) Then
 
        'Recherche et affichage de l'enregistrement correspondant au code
        With Me.RecordsetClone
 
            .FindFirst "[Code_Barre]=" & Me.CodeBarre.Value
 
            'Si enregistrement trouvé, Affichage des champs, décrémentation de 1 et refresh de la table
            If .NoMatch = False Then Me.Bookmark = .Bookmark:
            If .NoMatch = False Then
 
                If [Total_en_inventaire].Value > 0 Then
                [Total_en_inventaire] = [Total_en_inventaire] - 1
 
                else [Total_en_inventaire].Value <= 0
                MsgBox "Il n'y a plus de cette article en inventaire."
 
                End If
 
            If .NoMatch = False Then Me.Refresh
 
            'Si enregistrement non trouvé, Affichage message d'erreur
            If .NoMatch = True Then MsgBox "Aucun enregistrement valide" & Chr(13) + Chr(10) & "Essayer un nouveau code barre."
 
        End With
 
    Else
        'Si champs texte vide, Message d'erreur
        MsgBox "Vous devez saisir un code barre."
 
    End If
 
    'Efface la valeur du champs texte et lui remet le focus
    Me.CodeBarre.Value = Null
    Me.CodeBarre.SetFocus
 
End Sub
Mais sa ne fonctionne pas, sa me donne une erreur de fonction With. Alors, j'avoue que je ne sais pas trop comment faire, si vous pouvez me donner un petit coup de main! :p

Merci!!
asvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 22h31   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 479
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 479
Points : 7 568
Points : 7 568
Il y a peut-être un end if qui manque.

Pour des raisons de lisibilité je t'invite à toujours utiliser la structure
même pour les tests simples.

ce qui permet plus facilement de voir cela.

De plus dans mon expérience parfois with se croise les yeux. Tu pourrais remplacer le

Code :
1
2
3
With Me.RecordsetClone
    'Ici ton code qui utilise le with
End with
par

Code :
1
2
3
dim r as dao.recordset:set r=Me.RecordsetClone 
   'Ici ton code qui utilise le with
set r=nothing
et utiliser des élément complétement qualifié comme

Code :
r.FindFirst "[Code_Barre]=" & Me.CodeBarre.Value
Ça ne rallongerai pas beaucoup ton code et cela éviterai d'avoir à deviner à quel objet tu fais référence.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 07h58   #3
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Pour compléter ce que dit marot_r, tu écris :

Code VBA :
1
2
3
4
5
If [Total_en_inventaire].Value > 0 Then
    [Total_en_inventaire] = [Total_en_inventaire] - 1
Else [Total_en_inventaire].Value <= 0
    MsgBox "Il n'y a plus de cette article en inventaire."
End If

Si je reprends ton code :
Tu fais une condition sur Total_en_Inventaire strictement supérieur à 0 ce qui sous entend que dans la partie SINON, tu envisages le reste des cas

Ta condition ne devrait donc être que :

Code VBA :
1
2
3
4
5
If [Total_en_inventaire].Value > 0 Then
       [Total_en_inventaire] = [Total_en_inventaire] - 1
Else
       MsgBox "Il n'y a plus de cette article en inventaire."
End If
__________________
Jeannot

Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 15h11   #4
Membre à l'essai
 
Inscription : octobre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 64
Points : 22
Points : 22
Merci à vous deux!

J'avais 2 erreurs. Il manquait un End if dans mon code, alors j'ai utilisé ce que marot_r m'a conseillé,

Plus simple à suivre et règle mon erreur.

Ensuite, j'ai modifié ma condition comme Jeannot45 l'a écrit, car sa avait pas de sens! :p

Merci, tout fonctionne super bien!!
asvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h19.


 
 
 
 
Partenaires

Hébergement Web