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

Macros et VBA Excel Discussion :

Boucle sur recodset UPDATE table


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Chef de Projet télécom
    Inscrit en
    Août 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de Projet télécom
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2011
    Messages : 8
    Par défaut Boucle sur recodset UPDATE table
    Bonjour a tous,

    Je bosse sur un classeur, qui est la partie graphique d'une base ACCESS.

    1. on importe la table ACCESS dans une feuille.
    2. on modifie, on repère les changements des valeurs
    3. on stocke les les entêtes, les id, et la valeur des champs modifiés
    4. Juste avant d'enregistrer on bouclee sur les valeur stockées et lance un UPDATE pour chacune des lignes.




    Nom : 2016-04-13 16_25_34-Microsoft Excel - TEST BDD __ pour SFR.xlsm.png
Affichages : 177
Taille : 28,0 Ko


    De temps à autre j'ai des loupés, certaine valeurs ne sont pas transmisent à access.....
    J'imagine que c'est un problème sur les close ou peut-être que le UPDATE n'a pas le temps de se faire ?

    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
     
    Sub update_tot()
        Dim rs As Object
        Dim strSQL As String
        Dim strConnection As String
     
     
        Set cn = CreateObject("ADODB.Connection")
     
        strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & "\\chemin\madb.acdb"
     
        der_li = der_ligne_feuille("a updater", "A")
     
        Dim Range_Update As Range
        Set Range_Update = Sheets("a updater").Range("A2:A" & (der_li - 1))
     
        cn.Open strConnection
     
        For Each cellule In Range_Update
     
            Id_val = Sheets("a updater").Cells(cellule.Row, 1).Value
            Entete = Sheets("a updater").Cells(cellule.Row, 2).Value
            Val_champs = Sheets("a updater").Cells(cellule.Row, 3).Value
     
            strSQL = "UPDATE Table SET [" & Entete & "] = '" & Val_champs & "' WHERE ID = " & Id_val
            Sheets("a updater").Cells(cellule.Row, 8).Value = "UPDATE Table SET [" & Entete & "] = '" & Val_champs & "' WHERE ID = " & Id_val
            Set rs = cn.Execute(strSQL)
     
            rs.Close
            Set rs = Nothing
     
        Next cellule
     
            cn.Close
            Set cn = Nothing
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je ne sais pas si ça interfère, mais je ne vois pas l'intérêt de ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set rs = cn.Execute(strSQL)
     
            rs.Close
            Set rs = Nothing

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 97
    Par défaut
    je pencherai plus pour une mauvaise valeur : connait-on les valeurs qui ne passent pas à la mise à jour ?

    une chaine comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "UPDATE Table SET [" & Entete & "] = '" & Val_champs & "' WHERE ID = " & Id_val
    est forcément sensible à ce qui va être écrit à la place de Entete et Val_champs

  4. #4
    Membre très actif Avatar de XLRATOR
    Homme Profil pro
    Comptable Analyste
    Inscrit en
    Août 2012
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Comptable Analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 226
    Par défaut
    Bonjour à tous,

    connait-on les valeurs qui ne passent pas à la mise à jour ?
    Des valeurs qui ne passent pas, il y en a, et les plus connues en SQL sont celles qui portent des apostrophes qui déterminent en effet le début et la fin de chaines de caractères.

    Alors s'il arrive que vous ayez des valeurs qui portent des apostrophes, vous aurez à doubler l'apostrophe dans vos instruction de MAJ SQL en faisant appel à la fonction REPLACE de la cellule contenant votre valeur
    Dans votre cas ce serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "UPDATE Table SET [" & Entete & "] = '" & Val_champs.Replace "'","''" & "' WHERE ID = " & Id_val
    NB: Je suppose dans le code que Val_champs est une Cellule c.à.d un objet Range.

    Bon courage.
    Entre la canne à pèche et le poisson c'est certainement la canne que je choisirais, puis apprendrais à m'en servir.
    Si on vous souffle une solution au complet c'est que vous n'auriez rien compris du problème.
    Consultez la , de forte chances que votre problème y figure et c'est plus vite que de poser une question et en attendre la réponse.
    FAQ Excel: http://excel.developpez.com/faq/

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Sauf si notre amis à placé un on error en amont de sa sub une erreur d'apostrophes générerait une erreur et dans ce cas il faudrait effectivement doublé les apostrophe.

    La construction de sont code en récupérant un recordeset bien quand principe correct est source de désagrément! Mais le problème ne provient pas forcément de là.

    Si nous analysons la requête en fonction du tableau forcément ça marche pas car Id_1 n'est pas un numérique, mais ce tableau n'est là que pour notre compréhension!

    Donc soit les messages d'erreur sont inhibé soit le Where Id renseigne un enregistrement qui ne figure pas dans la table!

  6. #6
    Membre très actif Avatar de XLRATOR
    Homme Profil pro
    Comptable Analyste
    Inscrit en
    Août 2012
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Comptable Analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2012
    Messages : 226
    Par défaut
    Sauf si notre amis à placé un on error en amont de sa sub une erreur d'apostrophes générerait une erreur et dans ce cas il faudrait effectivement doublé les apostrophe.
    En effet Oui, ça m'est venu à l'esprit à l'envoi de ma réponse, et me suis dis peut être que notre gars à fait appel à un bloc On Error Resume Next, celà ignorerait tout simplement l'erreur et passe à l'enregistrement suivant, ce qui ferait que des enregistrements soient loupés en cas d'erreur, quant à l'ID introuvable il est bien vrai que c'est plausible et qu'il fallait bien y penser

    Bien cordialement.
    Entre la canne à pèche et le poisson c'est certainement la canne que je choisirais, puis apprendrais à m'en servir.
    Si on vous souffle une solution au complet c'est que vous n'auriez rien compris du problème.
    Consultez la , de forte chances que votre problème y figure et c'est plus vite que de poser une question et en attendre la réponse.
    FAQ Excel: http://excel.developpez.com/faq/

Discussions similaires

  1. [AC-2007] Boucle sur une nouvelle Table
    Par toinehxc dans le forum VBA Access
    Réponses: 4
    Dernier message: 04/04/2013, 11h16
  2. UPDATE sur la même table
    Par Papino dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 02/09/2005, 10h38
  3. [Debutant] faire un update sur tout une table
    Par Karibou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 14h44
  4. UPDATE avec condition sur d'autres tables
    Par guda dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/03/2005, 11h20
  5. Réponses: 2
    Dernier message: 29/09/2004, 09h07

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