Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
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 16/04/2011, 12h59   #1
Invité de passage
 
Inscription : avril 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 3
Points : 2
Points : 2
Par défaut Comment sélectionner un textbox en fonction de la valeur d'une liste de choix?

Bonjour,
Je débute tout juste avec access 2007 et là je coince, j'ai tourné un peu partout mais je n'arrive toujours pas à ce que je souhaite!
Tout est dans le titre...
Dans mon formulaire j'ai une liste de choix avec 3 valeurs: Chèque, Espèces, et Non réglé
1/ Je voudrais atteindre le textbox TxtN°Cheque si je sélectionne Chèque

2/ Je voudrais atteindre le textbox TxtRéglé si je sélectionne Espèces

3/ Je voudrais avoir un msgbox si je sélectionne Non réglé

Je suis persuadé que ça peut se faire mais pas avec mes seules recherches et essais.
Alors merci à vous pour vos lumières.
fforac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2011, 14h29   #2
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 071
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 071
Points : 4 367
Points : 4 367
Envoyer un message via Skype™ à GAYOT
Bonjour
Sur l'évènement "après mise à jour" de ta liste
Code :
1
2
3
4
5
6
7
8
9
 
Private Sub TaListe_AfterUpdate()
If Me.TaListe..Column(0) = "Chèque" Then
   Me.TxtChèque.SetFocus
ElseIf Me.TaListe.Column(0) = "Espèces" Then
   Me.Txt_Réglé.SetFocus
ElseIf Me.TaListe..Column(0) = "Non Réglé" Then
   MsgBox "XXXXXX"
End If
Il faut bien sûr que dans ce cas tes valeurs soit dans la colonne1 de ta liste, sinon il faut modifier le numéro de colonne.
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/04/2011, 15h11   #3
Invité de passage
 
Inscription : avril 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 3
Points : 2
Points : 2
Merci beaucoup!
Une journée complète à chercher et essayer un peu tout, et grace à ton intervention je peux enfin passer à autre chose...:
fforac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2011, 15h27   #4
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Il serait préférable d'avoir un SELECT CASE dans la mesure où le test porte systématiquement sur la colonne 0

Code :
1
2
3
4
5
6
7
8
9
10
 
Private Sub TaListe_AfterUpdate()
Select Case Me.TaListe.Column(0) 
    Case "Chèque" 
        Me.TxtChèque.SetFocus
    Case "Espèces" 
        Me.Txt_Réglé.SetFocus
    Case "Non Réglé" 
        MsgBox "XXXXXX"
End Select
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/04/2011, 16h04   #5
Invité de passage
 
Inscription : avril 2011
Messages : 3
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 3
Points : 2
Points : 2
Merci beaucoup
Les 2 solutions marchent impeccablement
La 2nde étant plus légère

Merci à vous
fforac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2011, 17h05   #6
Rédacteur/Modérateur
 
Avatar de GAYOT
 
Homme Jean-Damien GAYOT
Inscription : novembre 2004
Messages : 2 071
Détails du profil
Informations personnelles :
Nom : Homme Jean-Damien GAYOT
Âge : 56
Localisation : France, Meuse (Lorraine)

Informations professionnelles :
Secteur : Distribution

Informations forums :
Inscription : novembre 2004
Messages : 2 071
Points : 4 367
Points : 4 367
Envoyer un message via Skype™ à GAYOT
Citation:
Envoyé par Maxence HUBICHE Voir le message
Il serait préférable d'avoir un SELECT CASE dans la mesure où le test porte systématiquement sur la colonne 0

Code :
1
2
3
4
5
6
7
8
9
10
 
Private Sub TaListe_AfterUpdate()
Select Case Me.TaListe.Column(0) 
    Case "Chèque" 
        Me.TxtChèque.SetFocus
    Case "Espèces" 
        Me.Txt_Réglé.SetFocus
    Case "Non Réglé" 
        MsgBox "XXXXXX"
End If
Effectivement, mais en général pour les débutants la solution "If-Else-End If", se révèle, il me semble, plus intuitive. Mais ce n'est qu'un avis.

Et puis dans ce cas, il faut finir par
__________________
Plus j'avance et plus j'ai l'impression de ne rien savoir. Et comme j'essaie d'aller loin..!!.

Tutoriels sur:http://jdgayot.developpez.com

Pas de sujets techniques par Mp. Sinon
GAYOT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 01h34   #7
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
erf !
Heureusement que tu as l'oeil !
La beauté du copier-coller, c'est aussi sa plus grande perte...
:s
Désolé pour le End If restant...

Personnellement, même en cours débutant, je préconise toujours le Select End Select dans la mesure où on teste toujours la même variable.
  • Ne serait-ce que pour la lisibilité
  • Egalement pour la maintenance.
  • Enfin, un SELECT est interprété plus rapidement qu'un IF, d'où un accroissement des performances du programme
Bref... quand on peut faire un SELECT, autant en pofiter

A propos des vitesses d'interprétation IF vs SELECT, voici un petit code à lancer dans Excel (à cause des plages de cellules...
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Option Explicit
Sub Testeur()
    TestIF
    TestSELECT
    TestIF
    TestSELECT
    TestIF
    TestSELECT
    TestIF
    TestSELECT
    TestIF
    TestSELECT
End Sub
 
Sub TestIF()
    Dim i As Long
    Dim t As Date
    Dim t2 As Date
 
    t = VBA.DateTime.Now
    For i = 1 To 5000
        t2 = VBA.DateTime.Now
        If Minute(t2) = 1 Then
            Debug.Print 1
        ElseIf Minute(t2) = 2 Then
            Debug.Print 2
        ElseIf Minute(t2) = 3 Then
            Debug.Print 3
        ElseIf Minute(t2) = 4 Then
            Debug.Print 4
        ElseIf Minute(t2) = 5 Then
            Debug.Print 5
        ElseIf Minute(t2) > 5 And Minute(t2) <= 30 Then
            Debug.Print "plus petit que 30"
        ElseIf Minute(t2) > 30 And Minute(t2) <= 45 Then
            Debug.Print "troisième quart"
        ElseIf Minute(t2) > 45 Then
            Debug.Print "dernier quart"
        Else
            Debug.Print "J'ai dû oublier quelque chose... le zéro"
        End If
    Next
    t = VBA.DateTime.Now - t
    Range("A10000").End(xlUp).Offset(1, 0).Value = "If|" & t
End Sub
Sub TestSELECT()
    Dim i As Long
    Dim t As Date
    Dim t2 As Date
 
    t = VBA.DateTime.Now
    For i = 1 To 5000
        t2 = VBA.DateTime.Now
        Select Case Minute(t2)
        Case 1
            Debug.Print 1
        Case 2
            Debug.Print 2
        Case 3
            Debug.Print 3
        Case 4
            Debug.Print 4
        Case 5
            Debug.Print 5
        Case 5 To 30
            Debug.Print "plus petit que 30"
        Case 30 To 45
            Debug.Print "troisième quart"
        Case Is > 45
            Debug.Print "dernier quart"
        Case Else
            Debug.Print "J'ai dû oublier quelque chose... le zéro"
        End Select
    Next
    t = VBA.DateTime.Now - t
    Range("A10000").End(xlUp).Offset(1, 0).Value = "Select|" & t
End Sub
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE 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 03h26.


 
 
 
 
Partenaires

Hébergement Web