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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    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 émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    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 ;"

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    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 émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    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...

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    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 émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    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

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

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