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 :

Erreur d'execution '-2147217900 (80040e14)'


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 109
    Points : 60
    Points
    60
    Par défaut Erreur d'execution '-2147217900 (80040e14)'
    Bonjour,

    Voici mon souci j'ai 2 fichiers un fichier sources et fichier base.
    Le fichier base est mis a jour en fonction du fichier source.

    lorsque le le fichier base est mis a jour qu'en fonction du numero ID ca marche. Voici 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
    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
    Sub modifier()
     
    Dim Cn As ADODB.Connection
     
    Dim fichier As String
    Dim feuille As String
    Dim strSQL As String
     
    Dim data_id 'As String
    Dim data_nom As String
    Dim data_statut As String
    Dim data_cr As String
     
    Dim nbre_ligne As Integer
    Dim cpt As Integer
     
    fichier = ThisWorkbook.Path & "\base3.xls"
    feuille = "Feuil1"
     
    nbre_ligne = ThisWorkbook.Sheets(feuille).Range("a" & Rows.Count).End(xlUp).Row
     
    Set Cn = New ADODB.Connection
     
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & fichier & ";" & "Extended Properties=""Excel 12.0;HDR=Yes;"";"
     
    For cpt = 2 To nbre_ligne
     
        data_id = ThisWorkbook.Sheets(feuille).Range("a" & cpt)
        data_cr = ThisWorkbook.Sheets(feuille).Range("b" & cpt)
       ' data_nom = ThisWorkbook.Sheets(feuille).Range("b" & cpt)
        data_statut = ThisWorkbook.Sheets(feuille).Range("d" & cpt)
        data_date = ThisWorkbook.Sheets(feuille).Range("e" & cpt)
     
        strSQL = "UPDATE [" & feuille & "$] SET " & "Statut = " & "'" & data_statut & "' WHERE ID = " & data_id
     
        Cn.Execute strSQL
     
        strSQL = "UPDATE [" & feuille & "$] SET " & "Dates = " & "'" & data_date & "' WHERE ID = " & data_id
     
        Cn.Execute strSQL
     
    Next
     
    Cn.Close
     
     
    End Sub
    J'ai voulu apporter une variente c'est à dire que le fichier source est mis a jour en fonction du numero ID et du numero CR. J'ai une erreur qui apparait "Erreur d'execution '-2147217900 (80040e14)' Erreur de synthaxe dans la chaine dans l'expression "12, WHRE CR=RAI"


    voici le code modifier.
    Les modifcations par rapport au code précédant sont sur la ligne 34 et 38 j'ai rajouter la synthaxe suivante & "' WHERE CR = " & data_cr

    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
    Sub modifier()
     
    Dim Cn As ADODB.Connection
     
    Dim fichier As String
    Dim feuille As String
    Dim strSQL As String
     
    Dim data_id 'As String
    Dim data_nom As String
    Dim data_statut As String
    Dim data_cr As String
     
    Dim nbre_ligne As Integer
    Dim cpt As Integer
     
    fichier = ThisWorkbook.Path & "\base3.xls"
    feuille = "Feuil1"
     
    nbre_ligne = ThisWorkbook.Sheets(feuille).Range("a" & Rows.Count).End(xlUp).Row
     
    Set Cn = New ADODB.Connection
     
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & fichier & ";" & "Extended Properties=""Excel 12.0;HDR=Yes;"";"
     
    For cpt = 2 To nbre_ligne
     
        data_id = ThisWorkbook.Sheets(feuille).Range("a" & cpt)
        data_cr = ThisWorkbook.Sheets(feuille).Range("b" & cpt)
       ' data_nom = ThisWorkbook.Sheets(feuille).Range("b" & cpt)
        data_statut = ThisWorkbook.Sheets(feuille).Range("d" & cpt)
        data_date = ThisWorkbook.Sheets(feuille).Range("e" & cpt)
     
        strSQL = "UPDATE [" & feuille & "$] SET " & "Statut = " & "'" & data_statut & "' WHERE ID = " & data_id & "' WHERE CR = " & data_cr
     
        Cn.Execute strSQL
     
        strSQL = "UPDATE [" & feuille & "$] SET " & "Dates = " & "'" & data_date & "' WHERE ID = " & data_id & "' WHERE CR = " & data_cr
     
        Cn.Execute strSQL
     
    Next
     
    Cn.Close
     
     
    End Sub
    Pouvez vous me dire d'ou viens le problème. Je sais que j'ai mal écrit le code mais je n'arrive pas a corriger le problème.

    Merci pour votre aide

    cdt

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Je peux me tromper mais je crois qu'il y a une apostrophe en trop ou manquante au niveau de la dernière instruction "WHERE" !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    data_statut c'est un text? Dates c'est une date? Id un integer?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "UPDATE [" & feuille & "$] SET [Statut]= '" & data_statut & "' ,[Dates] = #" & format(data_date,"yyyy-mm-dd") & "# WHERE ID = " & data_id

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Bonjour Dysothographie,

    Statut ce n'est que du texte, date de la date et id une chaîne de caractère.

    Mon soucis c'est que mon code ne fonctionne pas lorsque je lui de mande de ettre a jour les données en fonction de de l'ID et du code CR. Il ne fonctionne qu'avec le code ID seul. Un code ID est associé qu'a un seul code CR

    Citation Envoyé par dysorthographie Voir le message
    Bonsoir,
    data_statut c'est un text? Dates c'est une date? Id un integer?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strSQL = "UPDATE [" & feuille & "$] SET [Statut]= '" & data_statut & "' ,[Dates] = #" & format(data_date,"yyyy-mm-dd") & "# WHERE ID = " & data_id

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Theze Voir le message
    Bonsoir,

    Je peux me tromper mais je crois qu'il y a une apostrophe en trop ou manquante au niveau de la dernière instruction "WHERE" !
    Merci Theze , j'ai tout essayé mais je ne vois pas d'ou ca peut venir. Je dois avouer que je ne maîtrise pas trop ce type de synthaxe

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par janakka-horus Voir le message
    Je dois avouer que je ne maîtrise pas trop ce type de synthaxe

    Bonjour,

    dans ce cadre, ne serait-il pas raisonnable d'ouvrir le fichier Excel (en figeant l'écran par exemple) et de travailler avec les outils Excel en VBA, ou des fonctionnalités VBA ?

    quelle nécessité de passer par ADODB, il s'agit de trouver des cellules contenant ID et CR pour modifier une date située sur la même ligne
    un FIND (et FINDNEXT) serait déjà plus simple à manipuler

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En d'autre terme ta requête fonctionnait avec id mais pas avec le couple id cr?

    Dans une requête Sql les valeurs texte sont encadrées par de simple cote [']; date[#]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = "UPDATE [" & feuille & "$] SET [Statut]= '" & data_statut & "' ,[Dates] = '" & data_date & "' WHERE ID = " & data_id & " And [cr]='RAI'"

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Merci Dysotographie,

    C'est impeccable ça marche et merci pour ce cour de syntaxe ça me servira

    Citation Envoyé par dysorthographie Voir le message
    Bonjour,

    En d'autre terme ta requête fonctionnait avec id mais pas avec le couple id cr?

    Dans une requête Sql les valeurs texte sont encadrées par de simple cote [']; date[#]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strSQL = "UPDATE [" & feuille & "$] SET [Statut]= '" & data_statut & "' ,[Dates] = '" & data_date & "' WHERE ID = " & data_id & " And [cr]='RAI'"

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    En passant par ADODB ça met a jour le fichier base sans l'ouvrir.

    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    dans ce cadre, ne serait-il pas raisonnable d'ouvrir le fichier Excel (en figeant l'écran par exemple) et de travailler avec les outils Excel en VBA, ou des fonctionnalités VBA ?

    quelle nécessité de passer par ADODB, il s'agit de trouver des cellules contenant ID et CR pour modifier une date située sur la même ligne
    un FIND (et FINDNEXT) serait déjà plus simple à manipuler

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    C'est faux, le fichier est quand même ouvert, mais pas sous les mêmes aspect qu'un Workbooks.Open

    Si c'est la solution que tu souhaites, c'est le principal, et problème résolu

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour Joe,

    oui c'est vrai mais pour ce genre de traitement il n'y a pas photo!

    en plus sur un fichier partagé tu peux mettre à jour ton classeur et les modifs ce font en directe sur tous les écrans!

  12. #12
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Je suis entièrement d'accord, dans certains contextes c'est vraiment top et non concurrençable !
    Tu nous le montres presque chaque jour sur ces sujets du forum

    Mais quand j'ai le choix, je privilégie la facilité plutôt que du SQL dans Excel

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Re Dysto,

    Encore une fois merci pour ton aide.

    J'ai voulu adapter le code sur un autre fichier mais cette fois ci sur un fichier qui se trouve dans un dossier en reseau

    J'ai l'erreur "erreur d'execution '-2147467259 (80004005)' Mise a jour impossible. La base de données ou l'objet est en lecture seule"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & fichier & ";" & "Extended Properties=""Excel 12.0;HDR=Yes;"";"
    Est ce q'il y a une procédure spécifique sur les fichiers en reseau ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    il y a plusieurs raisons à cela!

    1. le fichier est ouvert par un tiers! Passer le fichier Excel en mode partagé!
    2. tu n'as pas les droits en écriture!
      1. droits dans l'active directory sur le répertoire réseau
      2. le fichier garde les droits en lecture seule en fonction du créateur du ficiher! ça arrive sur certaines restriction des droits!

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Le fichier n'est ouvert par personne. Je viens de le mettre en partagé par mesure de sécurité.

    Effectivement dans les proprietes du dossier ou se trouve le fichier lecture seule est bleuté

    Nom : Capture.PNG
Affichages : 1558
Taille : 4,8 Ko

    Apres je vois pas trop

  16. #16
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function IsReadOnly(Fichier As String, Lectureseul As Boolean) As Boolean
        Dim Fs As Object: Set Fs = CreateObject("Scripting.FileSystemObject")
        Dim F As Object
        Set F = Fs.GetFile(Fichier)
       If Lectureseul Then   F.Attributes = F.Attributes Or 1 Else F.Attributes = F.Attributes And 254
       IsReadOnly = F.Attributes And 1
    End Function
    Sub test()
    Debug.Print IsReadOnly("C:\MyRepertoire\new 2.txt", True)
    Debug.Print IsReadOnly("C:\MyRepertoire\new 2.txt", False)
    End Sub

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Merci Dysotographie

    Tu pourrais m'expliquer ce que ce code fait. ?

    Je voudrais comprendre, desolé mais comme tu l'a certainement deviné je debute en VBA

  18. #18
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Debug.Print IsReadOnly("C:\MyRepertoire\new 2.txt", True)
    Debug.Print IsReadOnly("C:\MyRepertoire\new 2.txt", False)
    Debug.print permet d'envoyer le résultat dans la fenêtre d'exécution! raccourci clavier [CTRL] + [G]

    IsReadOnly permet de place le fichier "C:\MyRepertoire\new 2.txt" en lecture seule ou en lecture/écriture True/False!

    l'objet Scripting.FileSystemObject permet de manipuler des fichier et notamment les attributs qui sont au nombre de 255!
    l’attribut 1 définie lecture seule.

    permet activer la lecteur seule 0 or 1 =1 mais comme mon intention n'est pas de modifier les 254 autre attributs j’écris F.Attributes Or1

    maintenant pour désactiver la lecteur seule il faut passer l’attribut 1 à zéro? 1 and 0= 0 255 and 254=254
    attributs =32 (Lecture/Ecriture) -> attributs or 1 =33 -> lecture seule | attributs =33 (Lecture seule) -> attributs and 254 -> attributs =32(Lecture/Ecriture)

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 109
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup je comprend mieux ainsi.

    Je voudrai savoir une derniere chose.
    Est ce que mon fichier source et mon vichier base doivent t'ils commencer sur la premiere ligne ou est ce que je peut les faire commencer sur à partir de la 10 ligne car je voudrai réserver les 10 premières lignes a des commentaires

    en modifiant les codes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbre_ligne = ThisWorkbook.Sheets(feuille).Range("a" & Rows.Count).End(xlUp).Row
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For cpt = 2 To nbre_ligne

Discussions similaires

  1. [AC-2007] Ajout d'Enrg par VBA/SQL = > Erreur d'exécution '-2147217900 (80040e14)'
    Par joan-74 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/02/2015, 05h47
  2. erreur -2147217900 (80040e14) syntaxe
    Par leDelb dans le forum VBA Access
    Réponses: 5
    Dernier message: 06/07/2010, 10h25
  3. [AC-2007] Erreur d'éxécution -2147217900 (80040e14)
    Par malkie dans le forum Access
    Réponses: 12
    Dernier message: 09/04/2010, 15h50
  4. Erreur d'exécution -2147217900 (80040e14)
    Par reussite dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 07/02/2007, 09h10
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

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