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 :

Modifer tous les enregistrements d'un champ [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut Modifer tous les enregistrements d'un champ
    Bonsoir

    Je cherche à modifier tous les enregistrements d'un champ de ma table

    J'ai écrit le code ci dessous qui est activé à partir d'un bouton situé sur un formulaire

    Le champ Num de la table tmateriels est la clef primaire

    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
    Private Sub BoutonMAJPrix_Click()
     Dim strNMin As String
     Dim strNmax As String
       strNMin = DMin("num", "tmateriels")
       strNmax = DMax("num", "tmateriels")
     
    Dim intI As Integer
     intI = strNMin
     For intI = strNMin To strNmax
     ' MsgBox (intI)
      Dim strPrixProv As String
       strPrixProv = MaterPrixUnitHT
       'MsgBox ("Le prix unitaire est " & strPrixProv)
       MaterPrixUValide = strPrixProv
      Next intI
     
    End Sub
    Les variables correspondent bien au 1er et au dernier champ de ma table

    Mon souci est que la mise à jour du champ MaterPrixUvalide ne se fait que pour le premier enregistrement et pas pour les autres .....

    Je me demande aussi si je n'aurai pas des soucis pour les enregistrements supprimés entre strNmin et strNmax

    MErci pour votre aide

    Daniel

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Par défaut
    bonsoir,
    on ne modifie pas tous les champs d'une table avec cette méthode cela serait trop simple.
    il faut passer par ADO ou DAO.
    sur 2007 le complément DAO est natif - par contre il faut l'ajouter pour ADO
    un peu plus de précision si tu n'y arrives pas ou maitrises mal VBA.
    - Détail des champs de ta table tmateriels
    - champ que tu veux modifier
    - avec quoi ? la valeur d'une autre champ de la table ?
    à +

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Bonjour

    Aie aie, encore une nouvelle technique !

    Bon alors quelques éléments de réponse :

    - Détail des champs de la table tmatériels
    Tu veux tous les champs de ma table ou seulement ceux concernés par la manip ?
    Ceux qui sont concernés par la manip sont : Num, MAterPrixUnitHT, MaterPrixUValide, MaterOption

    - Champ que tu veux modifier ? avec quoi ?
    Je veux modifier MaterPRixUValide
    (Pour chacun de mes enregistrements Num)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Si materOption = "" Then MaterPrixUvalid = MaterPrixUnitHT
    Si materOption = "R" Then MaterPrixUvalid = 100
    Si materOption = "D" Then MaterPrixUvalid = 0
    J'espère avoir été clair

    Merci pour votre aide

    Daniel

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Par défaut
    bonjour,
    bien vu, cela me parait clair est conforte mon impression de régler cela par le parcours de ta table avec pour ma part ADO, pour la portabilité avec VB.NET par ailleurs, mais tu peux utiliser DAO.
    - je dois partir mais si tu as problème, cet après midi je te donne un exemple, a moins qu'un autre développeur passe par là et te donne la solution.
    Sinon à cet aprem,
    Un autre Daniel dit LE VIEUX.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Par défaut
    Re, bonjour
    Rien ne s’étant passé je me repenche sur ta demande :
    Je pars donc du postulat qu’il s’agit d’une table qui existe déjà et qui est bien remplie, provenant peut-être d’un téléchargement ou d’un import.
    Si ce n’était pas le cas et en cas de création, je devrais préciser comme à de multiples reprises ce qui se fait sur le forum, qu’il faut éviter d’avoir des champs calcules dans une table, les requêtes sont faites pour cela – exemple dans la petite base jointe, voir la requête « Req_Normalisée_Pour_Infor » qui fait très bien le travail sans une ligne de code.
    Mais soit s’il faut conserver la table, avec son champ et qu’il y en a beaucoup a changer access sait le faire, et c’est l’occasion si nécessaire de faire connaissance avec VBA, Les fonctions et les sub :
    Donc voir la base jointe à adapter bien sur, et si j’ai mal compris le problème, me relancer….
    ne pas oublier !!!!!j'avais oublié de le mentionner!!!! ajouter la référence :
    Microsoft ActiveX Data Objects 2.8 Library

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 186
    Par défaut
    Bonsoir Daniel et merci pour ces éléments de réponse

    J'ai inséré le code que tu m'as donné dans ma base
    J'ai créé un module appelé Affect
    Voici le code que j'y ai copié

    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
    Option Compare Database
    Function Affectation()
    Dim cnc As New ADODB.Connection
    Dim rst As New ADODB.Recordset
     
    Set cnc = CurrentProject.Connection
    rst.Open "tMateriels", cnc, adOpenDynamic, adLockBatchOptimistic
     
        Do Until rst.EOF
        ValTest = rst("materOption")
        Select Case ValTest
            Case ""
            rst("MaterPrixUValide") = rst("MaterPrixUnitHT")
            Case "R"
            rst("MaterPrixUValide") = "100"
            Case "D"
            rst("MaterPrixUValide") = "0"
     
        End Select
      rst.UpdateBatch
      rst.MoveNext
    Loop
     
    rst.Close
    cnc.Close
    End Function

    Mon souci est qu'il ne se passe rien ; j'ai pourtant vérifié le nom de la table et des champs

    J'avais auparavant fait un essai avec cette ligne
    rst.Open "tMateriels_R", cnc, adOpenDynamic, adLockBatchOptimistic
    J'ai un message d'erreur
    Erreur 2147217900.... instruction SQL non valide, DELETE, INSERT, PROCEDURE, SELECT or UPDATE Attendus

    MErci de ton aide

    Daniel

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

Discussions similaires

  1. [AC-2003] Remplissage d'un champ pour tous les enregistrements
    Par oliv45 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 16/04/2009, 16h31
  2. suppression de tous les enregistrements ayant deux champs vides
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/04/2009, 17h30
  3. Réponses: 4
    Dernier message: 18/08/2008, 15h11
  4. Réponses: 9
    Dernier message: 01/02/2007, 11h36
  5. Réponses: 4
    Dernier message: 23/08/2006, 15h36

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