Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 31/03/2011, 16h21   #1
Invité de passage
 
Inscription : octobre 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 15
Points : 4
Points : 4
Par défaut affecter valeur à un champ à partir de la valeur d'un champs calculé

Bonjour,

Dans un formulaire j'ai le code suivant :

Code :
1
2
3
4
5
Private Sub champ1_AfterUpdate()
If champs1.Value = "2" Then
champs2= "60"
End If
End Sub
Alors si le champs 1 est du type champs à renseigner par saisie ça fonctionne mais :

si le champ1 est un champ calculé le code ne fait rien.

Aves-vous une idée comment adapter le code pour que ça fonctionne ?

Merci
ubaal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 16h46   #2
Membre régulier
 
Inscription : novembre 2010
Messages : 101
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 101
Points : 81
Points : 81
Bonjour,

Code :
1
2
3
4
5
Private Sub champ1_AfterUpdate()
If me.champs1 = 2 Then
me.champs2= 60
End If
End Sub
ou en effectuant un calcul

Code :
1
2
3
4
5
Private Sub champ1_AfterUpdate()
If me.champs1 = 2 Then
me.champs2= me.champs1 * me.champs3 'par exemple
End If
End Sub
JeanYves70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 17h14   #3
Invité de passage
 
Inscription : octobre 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 15
Points : 4
Points : 4
Je vous remercie pour les rectifications dans la syntaxe. Mais le code reste muet. Je détail la nature du champs1 :

le champs 1 est obtenu par une formule saisie dans la source de contrôle du champs 1 : =[H M1]/[Dt M1]

Est-ce que ça vous donne d'autres idées ? Faut-il utiliser AfterUpdate sachant qu'il y a cette formule?

Merci
ubaal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 17h34   #4
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Bonjour.

Tu pourrais utiliser plutôt l'évènement AfterUpdate du contrôle "H M1" ET du contrôle "Dt M1". En fait de tous les contrôles utilisés dans le calcul.

Cordialement,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 17h46   #5
Invité de passage
 
Inscription : octobre 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 15
Points : 4
Points : 4
Excellent ça marche ; merci !!

Si je veux multiplier les conditions avec des intervales par exemple :
si champs1<2 attribuer la valeur 30
si champs1 >=2 et <3 attribuer la valeur 60
comment formulerez-vous cette succession de conditions avec des intervales ?

Merci pour votre aide
ubaal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 18h20   #6
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Hello.

Pour répondre à ta nouvelle question :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Select case me.Champ1.value
    Case Is < 2
        Me.Champ2 = ...
    Case 2 to 2.999999
        ...
    Case 3 to 3.999999
        ...
    ...
 
    Case is >= 12
        ...
End select
Sinon tu pourras être + précis avec
Code :
1
2
3
4
If Me.Camp1.Value < 2 then
    ...
ElseIf (Me.Champ1.Value >= 2) And (me.Champ1.Value <3) Then
    ...
Cordialement,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 18h36   #7
Invité de passage
 
Inscription : octobre 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 15
Points : 4
Points : 4
Merci pour votre expertise. Entre temps j'avais opté pour la seconde solution mais je vais tester votre première proposition. Voilà ce que j'avais rentré comme code avez-vous des commentaires la-dessus car je ne suis pas du tout initié à VBA:

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
Private Sub Dt_M1_AfterUpdate()
 
If Me.i_M1 > "2.5" Then
    Me.âge_M1 = "<2 ans"
 
        Else
            If Me.i_M1 <= "2.5" And Me.i_M1 > 2 Then
            Me.âge_M1 = "2ans<âge<4ans"
 
                Else
                    If Me.i_M1 < "2" And Me.i_M1 > 1.55 Then
                    Me.âge_M1 = "4ans<âge<6.5ans"
 
                        Else
                            If Me.i_M1 < 1.55 And Me.i_M1 >= 1.1 Then
                            Me.âge_M1 = "6.5ans<âge<9ans"
 
                                Else
                                If Me.i_M1 < 1.1 And Me.i_M1 >= 0.9 Then
                                Me.âge_M1 = "9ans<âge<11.5ans"
 
                                    Else
                                    If Me.i_M1 < 0.9 Then
                                    Me.âge_M1 = "âge>11.5ans"
 
                                    End If
                                End If
                            End If
                    End If
            End If
End If
 
End Sub
ubaal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 19h07   #8
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

Informations professionnelles :
Activité : Développeur Office VBA
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
Hello.

Deux remarques :
  • Plutôt que d'emboîter plusieurs If, utiliser If ... ElseIf ... ELseIf ... ElseIf ... ... End If
  • Quand tu ecris une expression logique encadre chaque terme avec des parenthèses : (a<B) And (a>c).
Cordialement,

PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham
Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 20h57   #9
Invité de passage
 
Inscription : octobre 2008
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 15
Points : 4
Points : 4
Merci beaucoup et bonne soirée.
ubaal 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 03h57.


 
 
 
 
Partenaires

Hébergement Web