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 :

Incrémenter et classer des données dans une listebox access [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut Incrémenter et classer des données dans une listebox access
    Bonjour,

    J'ai un formulaire qui contient 3 textes_box , une liste_box et un bouton de commande :
    -2 texte_box contiennent des dates à référencer : Texte_DateDebut et Texte_DateFin sous le format jj/mm/aaaa hh :mm
    -1 texte_box contient un numéro de porte à référencer : Texte_Porte
    -La liste_box afficher les résultats : Liste_Vrac
    Tout fonctionne très bien lorsque je lance la requête SQL (ci-dessous) par le biais du bouton de commande.

    La liste_box est composé de 6 colonnes (cf exemple ci dessous):

    Journee : 30/06/2014
    heure debut : 30/06/2014 17:00
    heure fin : 30/06/2014 23:30
    PFC destinataire : RENNES
    porte : 60
    Nombre : 1335


    Maintenant, on me demande d’apporter deux améliorations à ce formulaire :

    1) A chaque nouvelle donnée enregistrée dans la liste_box, les anciennes données ne doivent pas disparaitre de la liste_box.
    Les nouvelles données devront s’incrémenter avec les anciennes données
    2) Dans la liste_box, les anciennes données et les nouvelles données devront être classées par ordre chronologique de date de début et par numéro de porte

    Je dois vous vous avouer que je suis bloqué et que je ne sais pas par où commencer..

    Voici la le code vba sans ces deux améliorations :

    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
    Option Compare Database
     
    Dim Vporte As String
    Dim txt_ChaineSQL As String
    Dim strSQLSELECT As String
    Dim strSQLFROM As String
    Dim strSQLWHERE As String
    Dim strSQLGROUPBY As String
    Dim strSQLHAVING As String
    Dim strSQLORDERBY As String
     
    Dim objSpeech As Object
    Dim strPhrase As String
    Dim intPitch As Integer
     
     
    Private Sub Cmd_vrac_Click()
     
    Vdatedebut = DateAuFormatUS(Me.Texte_DateDebut)
    Vdatefin = DateAuFormatUS(Me.Texte_dateFin)
     
    Vdatedebut = CDate(Texte_DateDebut)
    Vdatefin = CDate(Texte_dateFin)
     
    Vporte = Val(Texte_porte)
     
     
     
     
     
    With Me.Liste_Vrac
    .RowSourceType = "Table/Requête"
    .ColumnCount = 6 ' nombre de colonne que dois avoir le formulaire
    .BoundColumn = 1 ' la colonne de reference
     
    strSQLSELECT = "SELECT CVDate(Fix(([EventTime]-5/24))) AS journee, Min(dbo_vwItemEventHistory.EventTime) AS [heure debut], Max(dbo_vwItemEventHistory.EventTime) AS [heure fin], T_vracs.PFC_Destinataire, T_vracs.PORTE, Count(dbo_vwItemEventHistory.ItemID) AS CompteDeItemID"
     
    strSQLFROM = "FROM ((dbo_vwItemEventHistory INNER JOIN dbo_vwParts ON dbo_vwItemEventHistory.PartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]) INNER JOIN T_vracs ON [table_Affich-general].[Nom Porte principale] = T_vracs.PFC_Destinataire"
     
    strSQLWHERE = "WHERE (((dbo_vwItemEventHistory.ItemEventTypeID) = 4) And ((dbo_vwItemEventHistory.ResultTypeID) = 23) And (([table_Affich-general].Allée) = 'vrac') AND (dbo_vwItemEventHistory.EventTime) >=#" & Format(Vdatedebut, "MM/dd/yyyy HH:mm") & "# And (dbo_vwItemEventHistory.EventTime) <=#" & Format(Vdatefin, "MM/dd/yyyy HH:mm") & "#)"
     
     
    strSQLGROUPBY = "GROUP BY CVDate(Fix(([EventTime]-5/24))), T_vracs.PORTE, T_vracs.PFC_Destinataire"
     
    strSQLHAVING = "HAVING ((T_vracs.PORTE) = '" & Vporte & "')"
     
    strSQLORDERBY = "ORDER BY CVDate(Fix(([EventTime]-5/24))) DESC;"
     
    txt_ChaineSQL = strSQLSELECT & vbCrLf & _
                    strSQLFROM & vbCrLf & _
                    strSQLWHERE & vbCrLf & _
                    strSQLGROUPBY & vbCrLf & _
                    strSQLHAVING & vbCrLf & _
                    strSQLORDERBY
     
     
    Debug.Print txt_ChaineSQL
     
    .RowSource = txt_ChaineSQL
    .Requery
     
    End With
     
    End Sub

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    J'ai du mal à comprendre cette phrase :
    Citation Envoyé par facteur Voir le message
    A chaque nouvelle donnée enregistrée dans la liste_box, les anciennes données ne doivent pas disparaitre de la liste_box.
    Les nouvelles données devront s’incrémenter avec les anciennes données
    Personnellement je n'enregistre pas de données dans une listeBox mais dans une table.....Et quel champ veux-tu incrémenter ?? Dommage car tout le reste est bien expliqué :p

    Sinon le deuxième point est facile à résoudre en modifiant ta clause ORDER BY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQLORDERBY = "ORDER BY CVDate(Fix(([EventTime]-5/24))) DESC, T_vracs.PORTE ;"
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #3
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bonjour Paidge,

    Avant tout , merci de porter une attention à mon problème
    Pour répondre à ta question , Je souhaite incrementer tout les champs
    journee ; heure debut; heure fin; PFc destinataire; porte; nombre
    je vais essayer d'etre plus claire en prenant un exemple..

    Dans ce formulaire, le personnel reference une date de debut et une date de fin ainsi qu' un numero de porte (de 63 à 51).
    Il clique sur le bouton de commande et là , dans la liste box, apparait un tableau( 6 colonnes) avec une seule ligne qui contient les champs journee ; heure debut; heure fin; PFC destinataire; porte; nombre

    Lorsque le personnel souhaite avoir de nouvelles données soit en modifiant l'heure de debut, ou l'heure de fin ou le numero de la porte ou les 3 en meme temps, l'ancienne donnée va disparaitre au profit de cette nouvelle donnée.
    Or le personnel a besoin de garder en mémoire les anciennes données classées par ordre chronologique et par numero de porte.

    je ne sais pas si mon explication est parlante ...

    Que penses tu de créer une deuxieme listebox qui incrementerait les données de la première listebox.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Je vais reformuler pour expliquer ce que j'ai compris car ce n'est pas clair.

    1 - L'utilisateur saisit une date de debut et une date de fin ainsi qu' un numero de porte (de 63 à 51) dans un formulaire indépendant (tu ne l'as pas précisé mais ça a l'air d'être le cas).
    2 - Ensuite, il clique sur le bouton ; ce qui déclenche le code ci-dessus. Si je comprends bien, ce code génère une requête SQL et la place dans la propriété Contenu (ou Rowsource) de ta liste.
    3 - Ton problème, si je comprends bien, est que cette requête ne te retourne qu'un seul enregistrement et que tes utilisateurs aimeraient, qu'à chaque clic sur le bouton, l'enregistrement s'ajoute à la suite dans ta listbox ? Ceci uniquement pour la durée de la session ou pour des utilisations futures ? Car, dans le premier cas, on peut le faire grâce à des variables, des tableaux ou des tables temporaires. Mais dans le second cas, il faut créer une table (et je pense même que dans tous les cas, ce serait plus judicieux).

    Sinon, je n'ai toujours pas compris ce que tu veux incrémenter...Pour moi, ça veux dire rajouter 1. Donc, je répète ma question : sur quel(s) champ(s) tu veux faire une incrémentation ?

    Dans l'attente de tes réponses...
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  5. #5
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Bonjour Paidge,
    3 - Ton problème, si je comprends bien, est que cette requête ne te retourne qu'un seul enregistrement et que tes utilisateurs aimeraient, qu'à chaque clic sur le bouton, l'enregistrement s'ajoute à la suite dans ta listbox ? Ceci uniquement pour la durée de la session ou pour des utilisations futures ?
    c 'est exactement cela.

    J'ajouterais pour completement la précision que les rajouts se font sur une journée.
    Et que le lendemain, les données de la listebox devront etre supprimées pour commencer une journée avec de nouveaux enregistrements.
    Mais créer un bouton pour supprimer les données d'une liste_box ..je sais le faire..

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Salut et excuse-moi, j'ai du boulot en ce moment :p

    Bon bah c'est bien ce que je disais, tu crées une table temporaire avec les champs dont tu as besoin dans ta listBox et en prenant soin de rajouter un champ date pour stocker la date de validité des données (vu qu'elles ne sont valides qu'une journée).
    Il faut que ta liste soit basée sur cette table.
    Sur le clic du bouton, il faut insérer les données toujours dans cette même table.
    Il te faut créer une macro AutoExec qui vide la table si la date stockée est différente de la date du jour.
    Sur l'évènement "Réception Focus" de ta listBox, il faut qu'elle se "rafraîchisse" (pas avec un verre d'eau hein ).

    Voilà tu as tout ce qu'il te faut
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Donc, en créant une table maTableTemporaire avec les champs journee, heure_debut, heure_fin, PFC_Destinataire, PORTE ,nbItems et creationDate, ton code deviendrait, si tu n'oublies pas de paramétrer ta ListBox correctement (nbre de colonnes, colonne liée, SourceType, etc.) :
    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
    Private Sub Cmd_vrac_Click()
        Dim strInsert As String
     
        Vdatedebut = DateAuFormatUS(Me.Texte_DateDebut)
        Vdatefin = DateAuFormatUS(Me.Texte_dateFin)
     
        Vdatedebut = CDate(Texte_DateDebut)
        Vdatefin = CDate(Texte_dateFin)
     
        Vporte = Val(Texte_porte)
     
        strSQLSELECT = "SELECT CVDate(Fix(([EventTime]-5/24))) AS journee, Min(dbo_vwItemEventHistory.EventTime) AS [heure debut], Max(dbo_vwItemEventHistory.EventTime) AS [heure fin], T_vracs.PFC_Destinataire, T_vracs.PORTE, Count(dbo_vwItemEventHistory.ItemID) AS CompteDeItemID, Date() AS creationDate "
        strSQLFROM = "FROM ((dbo_vwItemEventHistory INNER JOIN dbo_vwParts ON dbo_vwItemEventHistory.PartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]) INNER JOIN T_vracs ON [table_Affich-general].[Nom Porte principale] = T_vracs.PFC_Destinataire "
        strSQLWHERE = "WHERE (((dbo_vwItemEventHistory.ItemEventTypeID) = 4) And ((dbo_vwItemEventHistory.ResultTypeID) = 23) And (([table_Affich-general].Allée) = 'vrac') AND (dbo_vwItemEventHistory.EventTime) >=#" & Format(Vdatedebut, "MM/dd/yyyy HH:mm") & "# And (dbo_vwItemEventHistory.EventTime) <=#" & Format(Vdatefin, "MM/dd/yyyy HH:mm") & "#) "
        strSQLGROUPBY = "GROUP BY CVDate(Fix(([EventTime]-5/24))), T_vracs.PORTE, T_vracs.PFC_Destinataire "
        strSQLHAVING = "HAVING ((T_vracs.PORTE) = '" & Vporte & "');"
     
        txt_ChaineSQL = strSQLSELECT & vbCrLf & _
                        strSQLFROM & vbCrLf & _
                        strSQLWHERE & vbCrLf & _
                        strSQLGROUPBY & vbCrLf & _
                        strSQLHAVING & vbCrLf & _
                        strSQLORDERBY
        strInsert = "INSERT INTO maTableTemporaire (journee, heure_debut, heure_fin, PFC_Destinataire,PORTE, nbItems) " & txt_ChaineSQL
        CurrentDb.Execute strInsert
        Me.Liste_Vrac.Requery
     
    End Sub
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  8. #8
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Salut paidge,

    J'ai copié betement ton code ()et lorsque je le lance, j 'ai un message d'erreur qui apparait :
    erreur 3346 le nombre de valeur de la requete doit coincider avec le nombre de champ destination
    Aprés analyse , j'ai le même nombre de chaque coté :6

    Comprend pas ????

  9. #9
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Oups j' avais oublié le champ creationDate dans le insert into...

  10. #10
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    paidge ,
    je suis perdu..il me faudrait un coup de main pour continuer dans cette quete..

    J'ai donc crée matableTemporaire ou j'ai insere les 7 champs journee, heure_debut, heure_fin, PFC_Destinataire, PORTE, creationDate
    le code SQL Insert Into ne bug plus.

    Et lorsque je reviens vers mon formulaire et que je rentre une heure_debut et une heure_fin et la porte...Rien ne se passe..ma liste_box reste vide

    Comme tu l'as souligné, je dois reparametrer ma liste_box pour inserer matableTemporaire.. mais comment faire....

  11. #11
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    Paidge,

    Voici le code final..mais j 'ai aucune donnée qui s'affiche dans ma liste_box

    Pourrais tu me dire comment fonctionne matable_temporaire ?,,

    Option Compare Database

    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
    Dim Vporte As String
    Dim txt_ChaineSQL As String
    Dim strSQLSELECT As String
    Dim strSQLFROM As String
    Dim strSQLWHERE As String
    Dim strSQLGROUPBY As String
    Dim strSQLHAVING As String
    Dim strSQLORDERBY As String
     
    Dim objSpeech As Object
    Dim strPhrase As String
    Dim intPitch As Integer
     
     
     
    Private Sub Cmd_vrac_Click()
        Dim strInsert As String
     
        Vdatedebut = DateAuFormatUS(Me.Texte_DateDebut)
        Vdatefin = DateAuFormatUS(Me.Texte_dateFin)
     
        Vdatedebut = CDate(Texte_DateDebut)
        Vdatefin = CDate(Texte_dateFin)
     
        Vporte = Val(Texte_porte)
     
        With Me.Liste_Vrac
    .RowSourceType = "Table/Requête"
    .ColumnCount = 7 ' nombre de colonne que dois avoir le formulaire
    .BoundColumn = 1 ' la colonne de reference
     
     
     
     
        strSQLSELECT = "SELECT CVDate(Fix(([EventTime]-5/24))) AS journee, Min(dbo_vwItemEventHistory.EventTime) AS [heure debut], Max(dbo_vwItemEventHistory.EventTime) AS [heure fin], T_vracs.PFC_Destinataire, T_vracs.PORTE, Count(dbo_vwItemEventHistory.ItemID) AS CompteDeItemID, Date() AS creationDate "
        strSQLFROM = "FROM ((dbo_vwItemEventHistory INNER JOIN dbo_vwParts ON dbo_vwItemEventHistory.PartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]) INNER JOIN T_vracs ON [table_Affich-general].[Nom Porte principale] = T_vracs.PFC_Destinataire "
        strSQLWHERE = "WHERE (((dbo_vwItemEventHistory.ItemEventTypeID) = 4) And ((dbo_vwItemEventHistory.ResultTypeID) = 23) And (([table_Affich-general].Allée) = 'vrac') AND (dbo_vwItemEventHistory.EventTime) >=#" & Format(Vdatedebut, "MM/dd/yyyy HH:mm") & "# And (dbo_vwItemEventHistory.EventTime) <=#" & Format(Vdatefin, "MM/dd/yyyy HH:mm") & "#) "
        strSQLGROUPBY = "GROUP BY CVDate(Fix(([EventTime]-5/24))), T_vracs.PORTE, T_vracs.PFC_Destinataire "
        strSQLHAVING = "HAVING ((T_vracs.PORTE) = '" & Vporte & "');"
     
        txt_ChaineSQL = strSQLSELECT & vbCrLf & _
                        strSQLFROM & vbCrLf & _
                        strSQLWHERE & vbCrLf & _
                        strSQLGROUPBY & vbCrLf & _
                        strSQLHAVING & vbCrLf & _
                        strSQLORDERBY
        strInsert = "INSERT INTO maTableTemporaire (journee, heure_debut, heure_fin, PFC_Destinataire,PORTE, nbItems,creationDate) " & txt_ChaineSQL
     
     
        Debug.Print strInsert
     
        .RowSource = strInsert
        .Requery
     
     
     
     End With
     
    End Sub

  12. #12
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Citation Envoyé par facteur Voir le message
    J'ai donc crée matableTemporaire ou j'ai insere les 7 champs journee, heure_debut, heure_fin, PFC_Destinataire, PORTE, creationDate
    le code SQL Insert Into ne bug plus.
    Je suppose donc que les données s'insèrent bien dans la table.

    Et bien il ne te reste plus qu'à paramétrer ta listBox (qui s'appelle Liste_Vrac si j'ai bien compris) pour qu'elle se base sur ta table temporaire. Dans les propriétés de ta listBox, sous l'onglet Données, tu mets la propriété Origine source sur "Table/Requête" et dans Contenu, tu choisis ta table temporaire.
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Euh, dans ton code final, tu as oublié d'exécuter la requête INSERT
    Pourtant j'avais bien mis la ligne qui exécute la requête dans mon exemple

    Voilà le code qui devrait marcher. A adapter éventuellement :
    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
    Dim Vporte As String
    Dim txt_ChaineSQL As String
    Dim strSQLSELECT As String
    Dim strSQLFROM As String
    Dim strSQLWHERE As String
    Dim strSQLGROUPBY As String
    Dim strSQLHAVING As String
    Dim strSQLORDERBY As String
     
    Dim objSpeech As Object
    Dim strPhrase As String
    Dim intPitch As Integer
     
     
     
    Private Sub Cmd_vrac_Click()
    	Dim strInsert As String
     
    	Vdatedebut = DateAuFormatUS(Me.Texte_DateDebut)
    	Vdatefin = DateAuFormatUS(Me.Texte_dateFin)
     
    	Vdatedebut = CDate(Texte_DateDebut)
    	Vdatefin = CDate(Texte_dateFin)
     
    	Vporte = Val(Texte_porte)
     
    	With Me.Liste_Vrac
    		.RowSourceType = "Table/Requête"
    		.RowSource = "matableTemporaire "
    		.ColumnCount = 7 ' nombre de colonne que dois avoir le formulaire
    		.BoundColumn = 1 ' la colonne de reference
     
    		strSQLSELECT = "SELECT CVDate(Fix(([EventTime]-5/24))) AS journee, Min(dbo_vwItemEventHistory.EventTime) AS [heure debut], Max(dbo_vwItemEventHistory.EventTime) AS [heure fin], T_vracs.PFC_Destinataire, T_vracs.PORTE, Count(dbo_vwItemEventHistory.ItemID) AS CompteDeItemID, Date() AS creationDate "
    		strSQLFROM = "FROM ((dbo_vwItemEventHistory INNER JOIN dbo_vwParts ON dbo_vwItemEventHistory.PartID = dbo_vwParts.ID) INNER JOIN [table_Affich-general] ON dbo_vwParts.DisplayName = [table_Affich-general].[Chute (format access)]) INNER JOIN T_vracs ON [table_Affich-general].[Nom Porte principale] = T_vracs.PFC_Destinataire "
    		strSQLWHERE = "WHERE (((dbo_vwItemEventHistory.ItemEventTypeID) = 4) And ((dbo_vwItemEventHistory.ResultTypeID) = 23) And (([table_Affich-general].Allée) = 'vrac') AND (dbo_vwItemEventHistory.EventTime) >=#" & Format(Vdatedebut, "MM/dd/yyyy HH:mm") & "# And (dbo_vwItemEventHistory.EventTime) <=#" & Format(Vdatefin, "MM/dd/yyyy HH:mm") & "#) "
    		strSQLGROUPBY = "GROUP BY CVDate(Fix(([EventTime]-5/24))), T_vracs.PORTE, T_vracs.PFC_Destinataire "
    		strSQLHAVING = "HAVING ((T_vracs.PORTE) = '" & Vporte & "');"
     
    		txt_ChaineSQL = strSQLSELECT & vbCrLf & _
    						strSQLFROM & vbCrLf & _
    						strSQLWHERE & vbCrLf & _
    						strSQLGROUPBY & vbCrLf & _
    						strSQLHAVING & vbCrLf & _
    						strSQLORDERBY
    		strInsert = "INSERT INTO maTableTemporaire (journee, heure_debut, heure_fin, PFC_Destinataire,PORTE, nbItems,creationDate) " & txt_ChaineSQL
     
    		CurrentDb.Execute strInsert
    		.Requery
    	End With
    End Sub
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  14. #14
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    que je suis bete, j'ai donc selection matabletemporaire dans les propriétes de ma liste_box.
    Mias dés que je lance le code, seul apparait le champ journée dans ma liste_box....va savoir pourquoi ?..

  15. #15
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    paidge, ca fonctionne.. , j'ai fait une erreur de frappe en recopiant le code sql.
    merci enormement

  16. #16
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    paidge,
    Pour bien appréhender ce code sql avec insert into..
    Comment fonctionne matabletemporaire car lorsque, dans mon formulaire, de nouvelles données, celles-ci s'enregistrent bien dans ma listebox. mais pas dans matableTemporaire...
    est ce normale ?

  17. #17
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Citation Envoyé par facteur Voir le message
    Mias dés que je lance le code, seul apparait le champ journée dans ma liste_box....va savoir pourquoi ?..
    Il faut sûrement que tu paramètres (encore) ta listbox pour afficher le(s) champ(s) qui t'intéresse(nt)
    Pour cela, il faut renseigner la propriété Largeurs colonnes dans l'onglet Format. Il faut mettre quelque chose du genre
    0cm;5cm;0cm
    Suivant le nombre de colonnes dont ta liste dispose (ici il y en a 7).


    Citation Envoyé par facteur Voir le message
    Comment fonctionne matabletemporaire car lorsque, dans mon formulaire, de nouvelles données, celles-ci s'enregistrent bien dans ma listebox. mais pas dans matableTemporaire...
    est ce normale ?
    La requête INSERT INTO, insère (comme son nom l'indique) des données dans la table. COmme la liste est basée sur la table, la liste reflète le contenu de la table. Maintenant, si tu ne vois rien apparaître dans la table, c'est qu'il y a un problème lol ! Essayes d'appuyer sur F5 (rafraîchir) qd t'es sur la table ou fermes-la et réouvres-la
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  18. #18
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    paidge, ma table s'incremente bien d 'enregistrement...
    maintenant , comment, par le biais d'un bouton de commande sur le formulaire, supprimer les données de ma liste box afin qu'elle soit de nouveau vierge...

  19. #19
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    oulah tu pars de loin toi lol ! Tu me diras : "Faut bien apprendre un jour"
    Pour supprimer des enregistrements dans une table (c'est l'inverse de INSERT en fait ^^), il faut faire un DELETE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDb.Execute "DELETE FROM matableTemporaire"
    Tu peux mettre ça sur l'évènement Clic d'un bouton, mais si tu veux que ça se fasse automatiquement, je te conseille de créer une fonction publique dans un module (pas un module de classe, juste un module). Comme tu veux n'avoir que ceux de la journée en cours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function ViderTableTemporaire()
    CurrentDb.Execute "DELETE FROM matableTemporaire WHERE creationDate<>Date()"
    End Function
    Tu crées ensuite une macro que tu appelles AutoExec (la macro portant ce nom est exécutée au démarrage de ton appli) et tu choisis l'action ExécuterCode. En paramètre de cette action, tu mets le nom de ta fonction (ViderTableTemporaire())

    Comme ça, à chaque démarrage, ton appli supprimera automatiquement les lignes qui n'ont pas été créées dans la journée
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  20. #20
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 239
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 239
    Points : 213
    Points
    213
    Par défaut
    je pars de loin effectivement...
    Pour ce qui est de la suppression, j'opte pour la solution
    CurrentDb.Execute "DELETE FROM matableTemporaire"
    .
    ce code sera affecté à un bouton de commande

    Car le personnel va travailler sur une journée allant de j 05h00 à j+1 05:00 le lendemain.
    Donc sur une même journée, le personnel peut selectionner une même porte mais à des heures differentes .
    Exemple :
    date debut : 11/07/2014 23:00
    date fin : 12/07/2014 01:00
    porte : 60


    date debut : 12/07/2014 21:00
    date fin : 12/07/2014 23:30
    porte :60

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

Discussions similaires

  1. [AC-2003] regrouper des données dans une listebox
    Par facteur dans le forum Access
    Réponses: 6
    Dernier message: 15/05/2015, 09h53
  2. Classer des enregistrements dans une table Access
    Par midasios dans le forum VBA Access
    Réponses: 7
    Dernier message: 20/05/2008, 20h57
  3. Réponses: 3
    Dernier message: 03/10/2007, 12h24
  4. extraction des données dans une table Access
    Par moabomotal dans le forum Access
    Réponses: 2
    Dernier message: 26/05/2006, 11h17
  5. Inserer des données dans une table access SQL
    Par ouellet5 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 23/11/2005, 21h11

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