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. #21
    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,

    j'ai crée un bouton de commande ou j'ai inseré dans l'evenement clic le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Commande15_Click()
    CurrentDb.Execute "DELETE FROM maTableTemporaire"
    End Sub
    Or lorsque je clique sur ce bouton, rien ne se passe.
    mais si je selectionne la derniere ligne de ma liste_box et qu'ensuite je clic sur le bouton de commande, mes enregistrement sont supprimés de ma liste_box. Mais au lieu d'avoir une liste_box vierge, je me retrouve avec des ligne marquées
    #Supprimé
    . pas beau à voir..

  2. #22
    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
    Faut que tu fasses un Requery sur ta listBox (comme dans le code d'insertion ).

    Sinon pour que tu gardes les enregistrements de J 5h00 à J+1 5h00 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function ViderTableTemporaire()
        If Format(Now, "h") < 5 Then
            CurrentDb.Execute "DELETE FROM test WHERE maDate<DateSerial(Year(Now), Month(Now), Day(Now)) + TimeSerial(5, 0, 0)"
        End If
    End Function
    Et tu fais comme je t'ai dit pour la macro AutoExec
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #23
    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,
    désole du retard, j'étais sur une autre mission..
    Suite à ta réponse, j'ai donc apporté une modification au code de suppession des enregistrements. Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande16_Click()
    With Me.Liste_Vrac
    CurrentDb.Execute "DELETE FROM maTableTemporaire"
    .Requery
    End With
     
    End Sub
    ca fonctionne à merveille...merci..

    Pourrait-on apporter des améliorations a cette liste_box... :
    1) je souhaiterais pourvoir trier les enregistrements par numero de porte et par ordre chronologique de date début
    2 ) en cas de fausse manip, est il possible de selectionner un enregistrement de la liste_box et et de le supprimer

  4. #24
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Il faut relire les posts et arrêter de pleurer.

    Sérieusement, paidge t'a donné la réponse à la première question dès son message #2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQLORDERBY = "ORDER BY CVDate(Fix(([EventTime]-5/24))) DESC, T_vracs.PORTE ;"
    Je ne sais pas ce que vous avez fait, mais ce tri a disparu dans la requête.

    Pour la seconde question, il faudrait construire une instruction SQL avec un filtre sur l'identification unique des valeurs.Tu peux t'inspirer de ça :
    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
    ou de ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function ViderTableTemporaire()
        If Format(Now, "h") < 5 Then
            CurrentDb.Execute "DELETE FROM test WHERE maDate<DateSerial(Year(Now), Month(Now), Day(Now)) + TimeSerial(5, 0, 0)"
        End If
    End Function
    Ne voyant pas d'identification unique de tes données, il faudrait je pense combiner les critères de 2 champs.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #25
    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 Madefemere,

    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQLORDERBY = "ORDER BY CVDate(Fix(([EventTime]-5/24))) DESC, T_vracs.PORTE ;"
    ne fonctionne pas, c'est pour cela que je l'avais rétiré. Et effectivement j 'avais oublié de le préciser sur le message.

    J'ai même essaye ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQLORDERBY = "ORDER BY CVDate Min(dbo_vwItemEventHistory.EventTime) DESC, T_vracs.PFC_Destinataire ;"

    Mais pour une raison qui m'echape , j'ai remarque que lorsque la date de début (format jj/mm/aaaa hh:mm) et la date de fin (format jj/mm/aaaa) sont sur une même journée, le tri fonctionne. mais dés que la page d'horaire bascule au lendemain , le tri ne fonctionne plus avec les enregistrements de date précédente.

    je m'explique:
    les enregistrements d'une journée allant du 25/07/2014 05:00 au 25/07/2014 23:59 vont bien etre tri entr eux en fonction de date_debut et PFC_destinataire

    les enregistrements d'une journée allant du 26/07/2014 00:00 au 26/07/2014 05:00 vont bien etre tries entr eux en fonction de date_debut et PFC_destinataire
    Mais ces enregistrement de la journée du 26/07 ne vont pas etre triés avec ceux de la journée du 25/07 en fonction de la PFC_Destinataire alors que c'est ce que je souhaite


    Comment faire pour que mes enregistrements puissent à la fois etre triés par destination et par heure de debut sur un journée allant de j 05:00 à j+1 05:00

  6. #26
    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 madefemere,

    je penses comprendre pourquoi le tri ne fonctionne pas sur une journée allant de j 05:00 à j+1 05:00 .
    Je crois que le tri doit se faire sur ma table temporaire et non sur ma listebox access..
    Et si c'est le cas, comment trier des enregistrements sur ma table temporaire ?

  7. #27
    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
    J 'ai vu dans certains forum, que l'on pouvait trier des enregistrements d'une liste box access en utilisant la propriété Sorted à True.
    Or je ne trouve pas cette propriété Sorted dans les propriétes de ma liste_box...

  8. #28
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    Il ne faut pas remplacer le

    .RowSource = "matableTemporaire "

    par

    .rowSource = "Select * from maTableTemporaire order by porte, heure_debut desc"

    ou quelque chose du genre ?

  9. #29
    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 MickaelKael
    C 'est tout a fait cela..merci
    c'etait simple en fin de compte...
    Merci MickaelKael

  10. #30
    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 à tous et toutes,

    Ma liste_box commence à prendre forme et ceci grace à votre aide...Merci

    Et maintenant , il ne me reste plus qu'un obstacle : je souhaiterais maintenant pourvoir selectionner un enregistrement de ma liste_box et le supprimer..
    Quelqu'un pourrait il m'aider ?

    Voici le code vba de mon formulaire :
    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
    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_journee_postale
            .RowSource = "Table/Requête"
            .RowSource = "SELECT First(CVDate(Fix(([heure_debut]-5/24)))) AS jour FROM maTabletemporaire"
            .Requery
        End With
     
     
     
     
        With Me.Liste_Vrac
            .RowSourceType = "Table/Requête"
            .RowSource = " Select * from maTableTemporaire order by porte, heure_debut"
            .ColumnCount = 5 ' nombre de colonne que dois avoir le formulaire
            .BoundColumn = 1 ' la colonne de reference
     
     
            strSQLSELECT = "SELECT Min(dbo_vwItemEventHistory.EventTime) AS [heure debut], Max(dbo_vwItemEventHistory.EventTime) AS [heure fin], T_vracs.PORTE, T_vracs.PFC_Destinataire, Count(dbo_vwItemEventHistory.ItemID) AS nombre_colis_tries, 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 & "')"
            strSQLORDERBY = "ORDER BY CVDate(Fix(([EventTime]-5/24))) DESC, T_vracs.PFC_Destinataire;"
     
     
            txt_ChaineSQL = strSQLSELECT & vbCrLf & _
                            strSQLFROM & vbCrLf & _
                            strSQLWHERE & vbCrLf & _
                            strSQLGROUPBY & vbCrLf & _
                            strSQLHAVING & vbCrLf & _
                            strSQLORDERBY
     
            'MsgBox (txt_ChaineSQL)
     
     
            strInsert = "INSERT INTO maTableTemporaire (heure_debut, heure_fin, PORTE, PFC_Destinataire, nombre_colis_tries, creationDate) " & txt_ChaineSQL
     
            CurrentDb.Execute strInsert
            .Requery
        End With
     
     
     
        With Me.Liste_journee_postale
            .RowSource = "Table/Requête"
            .RowSource = "SELECT First(CVDate(Fix(([heure_debut]-5/24)))) AS jour FROM maTabletemporaire"
            .Requery
        End With
     
    Debug.Print txt_ChaineSQL
     
    End Sub
    Plaidge m'a fourni le code qui supprime tous les enregistrements de ma liste_box :
    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
    Private Sub Commande16_Click()
     
     
        Dim rep1 As Long
     
        rep1 = MsgBox("ATTENTION, Vous allez supprimer tous les enregistrements du tableau " & Chr(13) & _
            "  Voulez vous continuer ? " & Chr(13), vbYesNo + vbCritical)
        If rep1 = vbNo Then Exit Sub
     
     
    With Me.Liste_Vrac
     
    CurrentDb.Execute "DELETE maTableTemporaire FROM maTableTemporaire"
     
     
    .Requery
    End With
     
    End Sub
    Et maintenant , il ne me reste plus qu'un obstacle : je souhaiterais maintenant pourvoir selectionner un enregistrement de ma liste_box et le supprimer..

    Quelqu'un pourrait il m'aider ?

  11. #31
    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
    L' obstacle est leve. J'ai trouve dans ce forum, un code qui me permet de selectionner un enregistrement et de le supprimer ensuite.
    Voici le code :
    Private Sub Commande18_Click()

    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
     
    If IsNull(Me!Liste_Vrac) Then
          MsgBox "Aucun élément sélectionné dans la liste.", vbCritical
      Else
          DoCmd.SetWarnings False 'Facultatif
          DoCmd.RunSQL "DELETE maTableTemporaire.* FROM maTableTemporaire WHERE maTableTemporaire.Id= " & Me!Liste_Vrac & ";"
     
     
          DoCmd.SetWarnings False 'Facultatif
          Me!Liste_Vrac.SetFocus
          Me.Liste_Vrac.Requery
     
     
      End If
     
      End Sub
    le champ Id est un champ clef primaire que j'ai rajouté dans ma table temporaire "maTableTemporaire". C'est par ce champ clef primaire que la selection de l'enregistrement se fait.
    Ce champ, placé en colonne 1, est masqué dans ma listebox "Liste_Vrac ".
    je ferme cette discussion

    Merci à tous et toutes

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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