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 :

Tableau Double entrées avec case à cocher [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Points : 41
    Points
    41
    Par défaut Tableau Double entrées avec case à cocher
    Bonjour,
    Est il possible de créer l'équivalent d'une requête croisée dynamique, mais dans laquelle des données peuvent être saisies ?

    J'ai une table utilisateur, une table appareil avec un champs "Utilisé" (oui/non)
    Je voudrais, pour un jour donné, faire un tableau avec en ligne tous les utilisateur, en colonne tous les appareil et que la personne qui saisie les données coche les cases correspondante (croisement utilisateur-appareil).

    Merci à ceux qui ont des idées pour m'aider

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Points : 41
    Points
    41
    Par défaut Tableau Double entrées avec case à cocher
    J'ai finalement trouvé une solution, avec l'aide de Morsi

    Je crée en code une table avec un champs "Utilisateur " de type char(20) et autant de champs "Appareil" de type YesNo qu'il y a d'appareil dans la table TabAppareil en leur affectant leur nom respectif.

    J'injecte par sqll les utilisateur.
    Je crée dynamiquement le formulaire associé à cette table.

    Ne reste plus qu'à boucler sur les enregistrement en identifiant les appareils par le nom du champs et à mettre à jour les tables correspondantes après la saisie de l'utilisateur (bouton valider non écrit)

    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
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    Sub TableauDoubleEntrées()
        Dim r As Recordset, sql$, f As Field, i%
     
        CurrentDb.Execute ("drop Table Test")
     
        Set r = CurrentDb.OpenRecordset("select Appareil From TabAppareil")
        With r
            .MoveFirst
            While Not .EOF
                If Not .AbsolutePosition > 0 Then sql = "Create Table Test(Utilisateur char(20), [" & .Fields("Appareil") & "] YesNo" Else sql = sql & ", [" & .Fields("Appareil") & "] YesNo "
                .MoveNext
            Wend
            .Close
        End With
        Set r = Nothing
        sql = sql & ");"
        CurrentDb.Execute (sql)
        sql = "INSERT INTO Test ( Utilisateur )SELECT TabUtilisateur.Utilisateur FROM TabUtilisateur INNER JOIN TabTitre ON TabUtilisateur.nTitre = TabTitre.nTitre WHERE (((TabTitre.Titre)='Technicien') AND ((TabUtilisateur.[Actif])=-1));"
        CurrentDb.Execute (sql)
     
        create_form ("select * from Test")
        'sql = sql
    End Sub
    Public Function create_form(sql As String) As Boolean
     
    Dim frm As Form
    Dim rst As Recordset
    Dim ctl As Control
    Dim i%, j%
    '------------------Source---------------------------
    'Morsi
    'http://morsi.developpez.com/?page=Form#formdynamique
    '----------------------------------------------------
     
        '--Ouvrir le formulaire en mode modification et caché
        DoCmd.OpenForm "Test", acDesign, , , , acHidden
     
        Forms![Test].RecordSource = Empty
        ' --suppression de tous les contrôles avant de les créer de nouveau
        For i = Forms!Test.Controls.Count To 1 Step -1 ' Each ctl In Forms!Test.Controls
            'If ctl.Name <> "DateduJour" And ctl.Name <> "Valider" Then DeleteControl "Test", ctl.Name
            If Forms!Test.Controls(i - 1).Name <> "LabelPlanning" And Forms!Test.Controls(i - 1).Name <> "Valider" And Forms!Test.Controls(i - 1).Name <> "Valider" Then DeleteControl "Test", Forms!Test.Controls(i - 1).Name
        Next
     
     
        ' --Source de données de mon formulaire
        Forms![Test].RecordSource = sql
        Set rst = CurrentDb.OpenRecordset(sql)
     
        ' --nous ne pensons pas que vous aurez plus de 100 contrôles
        Dim controle(1 To 100) As Control
        ' --Création des contrôles
        If rst.RecordCount <> 0 Then
            i = 1
            j = 1000
            While i < rst.Fields.Count
                ' -- Créer le contrôle i
                If rst.Fields(i - 1).Name = "Utilisateur" Then
                    Set controle(i) = CreateControl("Test", acTextBox)
                    With controle(i)
                        .Left = 10
                        .Width = 1800
                        .BackColor = "10081789"
                    End With
                Else
                    Set controle(i) = CreateControl("Test", acCheckBox)
                    With controle(i)
                        .Left = j + 1800
                        .Width = 284
                        .Top = 57
                    End With
     
                    j = j + 1134
                End If
     
                controle(i).Name = "TXT_" & rst.Fields(i - 1).Name
                controle(i).ControlSource = rst.Fields(i - 1).Name
                i = i + 1
            Wend
        End If
     
        ' --Création des entêtes
        j = 1000
        i = 1
        While i < rst.Fields.Count
            Set controle(i) = CreateControl("Test", acTextBox, acHeader)
            controle(i).Name = "HD_" & rst.Fields(i - 1).Name
            controle(i).ControlSource = "='" & rst.Fields(i - 1).Name & "'"
            If rst.Fields(i - 1).Name <> "Utilisateur" And rst.Fields(i - 1).Name <> "LabelPlanning" Then
                With controle(i)
                    .Left = 150 + j
                    .Width = 1150
                    .Height = 700
                    .Top = 800
                    .BackColor = "10081789"
                    .SpecialEffect = 0
                    .BorderStyle = 1
                    .TextAlign = 2
                    .FontWeight = 700
                End With
            Else
                controle(i).Visible = False '100 + j
            End If
            i = i + 1
            j = j + 1150
        Wend
        rst.Close
        Set rst = Nothing
     
        ' --Sauvegarder le formulaire
        DoCmd.Save acForm, "Test"
        DoCmd.OpenForm "Test"
     
    End Function

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Points : 41
    Points
    41
    Par défaut mise à jour des données
    pour être complet, bouton valider

    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
    Private Sub Valider_Click()
        Dim sql$, r As Recordset, f As Field, nUtilisateur#, nAppareil#, r2 As Recordset
        Set r = CurrentDb.OpenRecordset("select * from TabPlanningDuJour")
        With r
            While Not .EOF
                For Each f In .Fields
                    If f.Name <> "Utilisateur" Then
                        If f.Value = -1 Then
                            Set r2 = CurrentDb.OpenRecordset("select nUtilisateur from Tabutilisateur where utilisateur='" & .Fields("Utilisateur") & "'")
                            nUtilisateur = r2.Fields("nUtilisateur")
                            r2.Close
                            Set r2 = CurrentDb.OpenRecordset("select nAppareil from TabAppareil where Appareil='" & f.Name & "'")
                            nAppareil = r2.Fields("nAppareil")
                            r2.Close
                            Set r2 = Nothing
     
     
                            sql = "insert into TabPlanning (nUtilisateur, nAppareil, [Date Analyse], Nbre) values (" & nUtilisateur & ", " & nAppareil & ", #" & DateduJour.Value & "#), 1"
                            CurrentDb.Execute (sql)
                        End If
                    End If
                Next
                .MoveNext
            Wend
            .Close
        End With
        Set r = Nothing
        DoCmd.Close acForm, Me.Name, acSaveNo
        Form_FormPrincipal.SetFocus
        DoCmd.Maximize
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. formulaire avec tableau à double entrée
    Par dmalik dans le forum Services
    Réponses: 1
    Dernier message: 02/07/2013, 21h49
  2. Bordure double entre les cases d'un tableau
    Par Juju54350 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 11/09/2012, 18h20
  3. tableau avec cases à cocher
    Par king10481 dans le forum Langage
    Réponses: 1
    Dernier message: 06/06/2008, 09h36
  4. PB controle formulaire avec tableau à double entrées
    Par Poutchou dans le forum Général JavaScript
    Réponses: 36
    Dernier message: 23/03/2006, 14h37
  5. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07

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