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 :

[AC-2010] Mettre à jour des enregistrements avec des listbox


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 44
    Points : 19
    Points
    19
    Par défaut [AC-2010] Mettre à jour des enregistrements avec des listbox
    Bonjour à tous,

    Encore une fois je viens vous demander de l'aide !

    Cette fois-ci je bloque sur le formulaire de mise à jour de mes données. je joins le formulaire (je n'ai laissé que quelques données, confidentialité oblige)

    Nom : modification données.jpg
Affichages : 220
Taille : 102,2 Ko

    Quand je clique sur le numéro dans la liste de gauche, ça me sélectionne automatiquement les données correspondantes à ce numéro dans les différentes listes de droite. J'ai choisi des listes car cela évite à l'utilisateur de tout retaper et ça évite en même temps les erreurs de frappe.

    Ce que je voudrais c'est qu'une fois le numéro sélectionné je puisse changer les données en cliquant sur une autre ligne dans les différentes listes (pour info ce sont les listes multiples étendues). Actuellement, j'arrive à ajouter de nouvelles lignes, A CONDITION de ne pas resélectionner les lignes déjà attribuées au numéro, sinon j'ai une erreur de doublon. J'ai tout essayé, supprimer les lignes attribuées au numéro si elles ne sont pas sélectionnées, vérifier avant de mettre à jour si la ligne sélectionnée n'est pas déjà dans le recordset, etc.

    Je vous mets le code actuel qui me permet juste d'ajouter des lignes:
    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
     
    Set oRst1 = oDb.OpenRecordset("LSNPartsLink", [dbOpenDynaset], [dbSeeChanges], [dbOptimistic])
    Set oRst1Old = oDb.OpenRecordset("Select * from LSNPartsLink where LSN_PartID = '" & Me.txtSAPNumber & "'", [dbOpenDynaset], [dbSeeChanges], [dbOptimistic])
     
    With Me.ListPartsData
            For i = 0 To ListPartsData.ListCount - 1
                If Me.ListPartsData.Column(0, [i]) = oRst1Old![LSN_ID] Then
                    If ListPartsData.Selected(i) = False Then
                        oRst1Old.Delete
                    Else
                    End If
                ElseIf ListPartsData.Selected(i) = True And Not Me.ListPartsData.Column(0, [i]) = oRst1Old![LSN_ID] Then
                        oRst1Old.AddNew   'j'ai aussi essayé avec .Edit ça ne change rien
                        oRst1Old("LSN_PartID") = Me.txtSAPNumber
                        oRst1Old("LSN_ID") = Me.ListPartsData.Column(0, [i])
                        oRst1Old.Update      ' c'est ici que j'ai l'erreur de doublon
                End If
            Next i
        End With
    Je n'utilise ici que le oRst1Old mais peut-être que le oRst1 peut être utile c'est pourquoi je l'ai mis ici. La table LSNPartsLink contient deux clés primaires, une identifie la ligne de la liste et l'autre (SAPNumber) correspond au numéro de la liste de gauche.

    Voilà j'espère que vous pourrez m'aider ! Merci d'avance !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Décidément je ne comprends pas ce qui ne va pas dans le code. J'ai réessayé en remplaçant dans la deuxième partie les oRst1Old par oRst1 car pour un ajout il me semble qu'il faut plutot faire un recordset sur la table mais je ne comprends pas maintenant ça va directement à la fin du with sans trouver aucune correspondance.

    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
    Set oRst1 = oDb.OpenRecordset("LSNPartsLink", [dbOpenDynaset], [dbSeeChanges], [dbOptimistic])
    Set oRst1Old = oDb.OpenRecordset("Select LSN_ID from LSNPartsLink where LSN_PartID = '" & Me.txtSAPNumber & "'", [dbOpenDynaset], [dbSeeChanges], [dbReadOnly])
    With Me.ListPartsData
            For i = 0 To ListPartsData.ListCount - 1
                If Me.ListPartsData.Column(0, [i]) = oRst1Old("LSN_ID") Then
                    If ListPartsData.Selected(i) = False Then
                        MsgBox "ajout"
                        oRst1Old.Delete
                    End If
                ElseIf ListPartsData.Selected(i) = True And oRst1Old.EOF Then
                        oRst1.AddNew
                        oRst1("LSN_PartID") = Me.txtSAPNumber
                        oRst1("LSN_ID") = Me.ListPartsData.Column(0, [i])
                        oRst1.Update
                End If
            Next i
        End With
    MsgBox "La pièce de numéro SAP " & Me.txtSAPNumber & " a été mise à jour avec succès"
    J'ai aussi changé le oRst1Old ...

    Je suis désespéré je dois finir dans deux semaines je suis sûr que c'est pas grand chose mais c'est toujours ces choses là où je coince !

    Merci pour votre aide !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2014
    Messages : 44
    Points : 19
    Points
    19
    Par défaut
    Rebonjour,

    Bon j'ai finalement trouvé une solution alternative en supprimant à chaque mise à jour les anciens éléments choisis dans la liste. En gros quand l'utilisateur souhaite mettre à jour les valeurs sélectionnées dans la liste, il décoche les éléments à enlever, sélectionne les nouveaux éléments AINSI que ceux qui sont toujours valables.

    Voilà le code:
    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
     
    Set oRst1 = oDb.OpenRecordset("LSNPartsLink", [dbOpenDynaset], [dbSeeChanges], [dbOptimistic])
    Set oRst1Old = oDb.OpenRecordset("Select * from LSNPartsLink where LSN_PartID = '" & Me.txtSAPNumber & "'", [dbOpenDynaset], [dbSeeChanges], [dbOptimistic])
     
    ' Supprimme tous les anciens enregistrements de la liste
    Do While Not oRst1Old.EOF
        oRst1Old.Delete
        oRst1Old.MoveNext
    Loop
    ' Ajoute tous les enregistrements sélectionnés
    With Me.ListPartsData
       For i = 0 To ListPartsData.ListCount - 1
            If ListPartsData.Selected(i) = True Then
                oRst1.AddNew
                oRst1("LSN_PartID") = Me.txtSAPNumber
                oRst1("LSN_ID") = Me.ListPartsData.Column(0, [i])
                oRst1.Update
            Else
            End If
            Next i
    End With
    Voilà si jamais ça aide quelqu'un tant mieux

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/04/2013, 17h34
  2. Réponses: 2
    Dernier message: 03/04/2013, 12h04
  3. Réponses: 6
    Dernier message: 25/11/2011, 19h03
  4. Réponses: 5
    Dernier message: 08/08/2009, 05h20
  5. Réponses: 13
    Dernier message: 05/09/2006, 16h25

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