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 :

Modification d'une table à partir d'un formulaire.


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut Modification d'une table à partir d'un formulaire.
    Bonjour, je suis actuellement en stage et ma principale mission et de reprendre un projet Plant 4D, access. Je souhaiterai à partir d'un formulaire simple ( 2 listes déroulantes et un bouton) modifier les champs d'une colonne de ma table ayant pour valeur "300@277@40".
    Voici mon code non fonctionnel rien ne se passe à l'exécution, la table n'est pas modifiée.

    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
     
     
    Private Sub Commande295_Click()
     
    Dim modif As DAO.Recordset
     
    'Modifiable306 est ma liste déroulante
    If Modifiable306.Value = "300@277@40" Then
     
        'Ouverture de la table nomTable
        DoCmd.OpenTable "nomTable", acViewNormal, acEdit
     
        'Création d'un recordset, de type dbOpenTable : Modification en direct
        Set modif = CurrentDb.OpenRecordset("SELECT colonne1 FROM nomTable where colonne1='300@277@40'", [dbOpenDynaset])
     
        'On se place sur le premier enregistrement
        modif.MoveFirst
     
        'Tant que l'on atteint pas la fin du recordset
        While Not modif.EOF
            'Mode édition
            modif.Edit
            'Condition de changement de donnée
            Dim lField As DAO.Field
            For Each lField In modif.Fields
                If lField.Value = "300@277@40" Then lField.Value = 10
            Next
            'Mise à jour de la table
            modif.Edit
            'Passage au champ suivant
            modif.MoveNext
        Wend
     
        'Fermeture du recordset
        modif.Close
        Set modif = Nothing
     
    End If
     
    End Sub
    Merci d'avance pour votre aide, cordialement.

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonsoir,

    En plus simple (Code non testé)
    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
     
    Private Sub Commande295_Click()
     
    Dim modif As DAO.Recordset
     
    'Modifiable306 est ma liste déroulante
    If Modifiable306.Value = "300@277@40" Then
        Set modif = CurrentDb.OpenRecordset("nomTable", dbOpenDynaset) ' Instancier le recordset
        with modif   'Faire des actions sur le recordset
            .FindFirst "[Colonne1]=" & "300@277@40"         ' Trouver première occurrence
            Do While Not .NoMatch                                  'Exécuter changement si trouver
                .edit
                ![Colonne1]= 10                                       'Modifier valeur
                .update         
                .FindNext "[Colonne1]=" & "300@277@40"     'Trouver les autres occurrences
            Loop
        end with
    end if
     
        'Fermeture du recordset
        modif.Close
        Set modif = Nothing
     
    End Sub
    Bonne continuation

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bonjour madefemere je tiens à te remercier tout d'abord pour l'attention que tu m'as accordé mais également pour m'avoir apporté la solution. En effet je viens de tester ton code il fonctionne parfaitement, j'ai juste apporté une modification aux FindFirst et FindNext car Access détecté une erreur de syntaxe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .FindFirst "[colonne1] = ' " & "300@277@40" & " ' "
    .FindNext "[colonne1] = ' " & "300@277@40" & " ' "
    Merci encore pour la rapidité de ta réponse, cordialement.


  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Je n'ai effectivement pas fait attention au fait que c'est du texte.
    C'est bien si ça marche !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Je reviens vers toi, j'ai un soucis pour rechercher une expression dans un champs.

    En effet le contenue de la "colonne4" de ma table est de type: Colonne1-Colonne2-Colonne3. Elle reprend les 3 précédentes colonnes séparé par un tiret.

    Dans mon find je cherche à trouver le premier champs de la colonne4 commençant par "300@277@40" ( le contenue de la première colonne) pour pouvoir tous les modifier par la suite comme j'ai modifié ma première colonne auparavant.

    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
     
    Set modif = CurrentDb.OpenRecordset("nomTable", dbOpenDynaset) ' Instancier le recordset
        With modif   'Faire des actions sur le recordset
            .FindFirst "[colonne4] = '" & "300@277@40" & "'"
            Do While Not .NoMatch                                  'Exécuter changement si trouver
                .Edit
                ![colonne4] = [colonne1].Value + "-" + [colonne2].Value + "-" + [Tcolonne3].Value
                .Update
                '.FindNext "[TAG1] = '" & valeur1 & "'"     'Trouver les autres occurrences
                .FindNext "[colonne4] = '" & "300@277@40" & "'"
            Loop
        End With
     
        'Fermeture du recordset
        modif.Close
        Set modif = Nothing
    J'ai essayer l'opérateur * et la commande, comme "valeur", dans mon find mais toujours aucun résultat.

    merci d'avance, cordialement

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 841
    Points : 7 975
    Points
    7 975
    Par défaut
    Bonsoir,

    Pour trouver une partie de texte comme critère, utiliser le syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .FindFirst "[colonne4] = '*" & "300@277@40" & "*'"
    Si ce sont les premiers caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .FindFirst "[colonne4] = '" & "300@277@40" & "*'"
    La même expression pour le Findnext

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 12
    Points
    12
    Par défaut
    Bonjour, je viens d'essayer ta proposition mais après vérification rien n'a changé. L'opérateur * n'est peut pas reconnue.

    Par contre ce morceau de code fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .FindFirst "[Colonne1] = '" & "valeur" & "'"
    Je dois également modifier tout les champs de la table une requête MAJ fonctionnerai t'elle ou dois je passer par "*"?

    merci d'avance.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/11/2011, 18h07
  2. [MySQL] Modification des enregistrements d'une table à partir d'un formulaire
    Par Maria1505 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 18/12/2006, 17h32
  3. Réponses: 39
    Dernier message: 28/07/2006, 14h22
  4. Réponses: 2
    Dernier message: 11/05/2006, 12h05
  5. Réponses: 2
    Dernier message: 15/06/2005, 17h32

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