IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Table qui prend le nom en fonction des cases à cocher [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut Table qui prend le nom en fonction des cases à cocher
    bonjour,

    j'ai essayé d'optimiser mon code d'origine en ce qui va suivre mais je n'ai aucun résultat ni message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    If Cadre1.Value = 2 And Cadre2.Value = 3 And Cadre3.Value = 3 Then
    table = "Table_1"
    tables = "Table_1a"
    ElseIf Cadre1.Value = 2 AndCadre2.Value = 3 And Cadre3.Value = 7 Then
    table = "Table_2"
    tables = "Table_2a"
    ElseIf Cadre1.Value = 3 And Cadre2.Value = 3 And Cadre3.Value = 3 Then
    table = "3"
    tables = "3a"
    For i = 1 To 40
    res = Nz(DLookup("Chm", "tables", "[ID] = " & i))
    Next i
    merci

  2. #2
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto,

    Tout me semble confus dans ton code mais "tables" ne varie pas parce que protégé :

    Il faut passer la variable soit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = Nz(DLookup("Chm", tables, "[ID] = " & i))
    Pour le reste je ne sais pas ou tu veux en venir, mais j'espère que toi tu le sais

    Et le End IF il est ou ?

    Pourvu que Mumen ne tombe pas sur ce fil de discussion


    JimboLion

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    je suis d'accord avec toi dans le coté confus c'est pour cela que j'aimerai que le nom de ma table prend le nom en fonction des cases qui sont cochés

  4. #4
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto,

    Me voilà déjà rassuré !

    Bon as tu essayé la modif sur le test et n'oublie pas de mettre ton End if avant le for

    JimboLion

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    j' ai fais ce que tu m'as dit, a peine une case cochée et j'ai un message d'erreur d'execution 2428
    vous avez entre un argument non valide dans une fonction de domaine
    l'erreur se situe dans la ligne du dlookup


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = Nz(DLookup("Chm", tables, "[ID] = " & i))

  6. #6
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto,

    peux tu afficher le contenu des variables avant le dlookup

    Je viens te tester ta fonction, pas de soucis chez moi

    JimBoLion

  7. #7
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    I=1
    tables = "Paramètres"
    res = Nz(DLookup("RaisonSociale",tables, "[Nu] = " & i))
    res me renvoie bien une valeur et en l'occurence la raison sociale de la table parametres lorsque Nu=1

    JimBoLion

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    rien pour moi,est ce que je peux faire la meme chose avec un recordset?
    ne serait ce pas plus simple?

  9. #9
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto,

    Le recordset ne t'apportera rien de plus. La fonction Dlookup fonctionne correctement, donc piste le contenu de tes variables avant le dlookup

    debug.print tables

    chm est bien un champ de ta table ?

    JimBoLion

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    tu as raison cela fonctionne bien sans la prise en compte des cases a cocher tel que tu le presente.
    des que je veux utiliser les cases a cocher cela ne fonctionne plus et je me retrouve encore avec le message d'erreur.

  11. #11
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto,

    Bien je vois que l'on a progressé. Avant d'envoyer le Dlookup la variable tables a t'elle changée d'état (autrement dit une valeur est-elle renseignée).

    Je pense sincèrement que ton problème vient de ta boucle et qu'aucune de ces conditions n'est réalisée. Reposes ton problème sur papier, quelles sont les conditions permettant de mettre à jour ta variable. D'autre part pourquoi table et tables sont utilisées (quelle est la vrai variable contenant le nom de l'objet table dans ta base ?).

    Regarde comment fonctionne le select case (bien plus efficace que les if imbriqués)

    JimBoLion

  12. #12
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    Sur la ligne 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cadre1.Value = 2 And Cadre2.Value = 3 And Cadre3.Value = 3 Then
    Ne serait-ce pas plutôt cela que tu voulais mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cadre1.Value = 2 And Cadre2.Value = 3 And Cadre3.Value = 3 Then
    D'autre part on constate que Cadre2.Value doit être égal à 3, n'y a t'il pas moyen de contrôler cette valeur avant et provoquer une sortie de la procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ElseIf Cadre1.Value = 2 AndCadre2.Value = 3 And Cadre3.Value = 7 Then
    Pour les cas suivants (ligne 1 et 7) tu testes Cadre3.Value = 3, est-il normal de tester la valeur 7 sur cette ligne ?

    JimBoLion

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    Je sais bien que le sélect case est performant mais je ne sais pas comment faire pour les 3cases à cocher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sélect case cadre1.value and cadre2.value and cadre3.value
              Case is ????????

  14. #14
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto,

    Dejà synthetises !

    Regardes le message précédent et réponds aux questions posées :

    Sur le premier test Cadre1.Value = 2 c'est pas 1 la valeur ?

    Sur le troisième test Cadre3.Value = 7 Then (c'est pas 3 la valeur comme dans les deux tests précédents)

    Au vu du test redondant Cadre2.Value = 3 (les conditions s'avèrent exacts dans tous les cas si Cadre2.Value = 3 : donc si <>3 on sort avant)

    L'utilisation du Select...Case

    Je te laisse chercher un peu, et te donnerai la solution qu'en dernier ressort (après réponse à mes questions) ...

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.80).aspx


    JimBoLion

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    pour repondre a tes questions:
    j'ai 3 cadres dont les 2 premiers ont 2 cases a cocher et le 3 eme a 10 cases a cocher.
    le cadre par defaut a une valeur a 1 pour cela que les cases commence a 2 concernant les cadres 1 et 2.
    concernant le cadre 3 qui a une valeur a 7 c'est juste que je n'ai pas voulu mettre l'ensemble des cases(j'en ai pris une au hasard)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select Case Cadre1.Value And Cadre2.Value And Cadre3.Value
            Case Is =Cadre1.Value = 2 And Cadre2.Value = 2 Cadre3.Value = 9
                      pnomtable = "Table_1"
     
           Case Is =Cadre1.Value = 2 AndCadre2.Value = 2 Cadre3.Value = 7
                      pnomtable = "Table_2"
     
             end select
    j'ai essayé ce select case mais cela ne fonctionne pas completement (seulement la derniere partie)

  16. #16
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto,

    Je dois partir mais peux tu m'envoyer une copie de ta base ou à défaut un screenshot car j'ai du mal à comprendre les cas d'utilisation !

    Positionnes bien avant tes cases et dis moi ce que tu souhaites avoir en sortie pour chacune des cases !

    Je regarderai çà en fin d'AM

    Merci

    JimBoLion

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    je te joint un extrait du code

    ce que j'aimerai c'est que cette partie du code soit fixe avec le nom de la table qui prend le nom en fonction des cases a cocher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Form!("WindowsMediaPlayer" & i).Visible = True
    Form!("WindowsMediaPlayer" & i).Height = 1100
    Form!("WindowsMediaPlayer" & i).Width = 1300
    Form!("WindowsMediaPlayer" & i).BorderColor = RGB(0, 0, 0)
    res = Nz(DLookup("Video", "Table_1", "[ID] = " & i))
    Set Xwmp = Form!("WindowsMediaPlayer" & i).newMedia(res)
    Form!("WindowsMediaPlayer" & i).currentPlaylist.insertItem 0, Xwmp
    Form!("WindowsMediaPlayer" & i).Object.Controls.play
    Form!("WindowsMediaPlayer" & i).Object.Controls.pause
    Form!("WindowsMediaPlayer" & i).Visible = False
    Form!("Étiquette" & i).Caption = ""
    etiq = Nz(DLookup("Etiquettes", "Table_1a", "[IDChemin] = " & i))
    Form!("Étiquette" & i).Caption = etiq
    Next i
    Images attachées Images attachées  

  18. #18
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto bonjour,

    Dans l'exemple suivant, et pour répondre à ta question initiale, j'ai adapté ton code afin d'utiliser le select case (plus facile à lire que les if imbriqués).
    D'autre part je constate qu'en fonction de chaque cas, une grande partie du code est réutilisable, il faut donc déporter tout çà dans une fonction en spécifiant des arguments (cas, boucle).... Du fait, si tu dois modifier ton code, tu ne le fais qu'à un seul endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Compare Database
    Private Sub traitement()
    Dim i As Integer
    Dim j As Integer
    ' suite des declarations
     
    Select Case Me.cadre1.Value
    Case 2
        Select Case Me.cadre2.Value
        Case 3
            Select Case Me.cadre3.Value
            Case 3
                Table = "Table_1"
                X = Traitement_Fctn(1, 40)
            Case 7
                Table = "Table_2"
                X = Traitement_Fctn(2, 19)
            End Select
        End Select
     
    Case 3
     
        Select Case Me.cadre2.Value
        Case 3
            Select Case Me.cadre3.Value
            Case 3
                Table = "3"
                X = Traitement_Fctn(3, 25)
            End Select
        End Select
     
    End Select
    End Sub
    Function Traitement_Fctn(Cas, boucle)
    '
    For i = 1 To boucle
    '
    '
    ' traitement
    Next
     
    End Function
    JimBoLion

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 625
    Par défaut
    merci ,peux tu me dire si je dois declarer X?
    de plus au niveau de ma fonction de traitement ma table1 n'est pas reconu ,elle est vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = Nz(DLookup("Video", table, "[ID] = " & i))

  20. #20
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    chuspyto,

    X est un exemple mais tu dois déclarer X en effet

    dim x as boolean si tu souhaites que ta fonction retourne un booleen (sinon mettre dim X as Variant)

    Pour ton deuxième problème que te renvoie la variable i et la variable table ?

    La question à se poser est :

    est ce que dans la table x (variable table) j'ai un enregistrement dont [ID] = i (valeur de la variable) et qui me retournerait le contenu du champ Video. Une fois que tu as récupéré ces valeurs, une lecture de ta table devrait te permettre de voir si les conditions sont réunies.

    JimBoLion

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/06/2012, 11h59
  2. Réponses: 4
    Dernier message: 12/12/2008, 07h28
  3. Fusionner deux tables en gardant le nom d'une des deux
    Par fafabzh6 dans le forum SAS Base
    Réponses: 0
    Dernier message: 30/07/2008, 14h54
  4. Comment faire un DROP sur des tables qui change de nom ?
    Par GeantBioHazard dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/07/2008, 15h03
  5. Réponses: 1
    Dernier message: 14/06/2007, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo