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 :

Ecrire et Modifier dans un classeur .xlsm fermé [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club Avatar de Naru31
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Ecrire et Modifier dans un classeur .xlsm fermé
    Bonjour,

    J'ai lu le tuto de SilkyRoad sur "Lire et écrire dans les classeurs Excel fermés".

    Pour vous donner ma situation :
    -J'ai un 1er classeur en .xlsm me servant de base de données, que j'ai nommé "BDD TMT.xlsm" et dont mes données se trouvent sur la première feuille nommé "Topics".
    -J'ai un 2ème classeur en .xlsm me servant de visionneuse, que j'ai nommé "Topic Management Tool.xlsm" et dont les données de la feuille "Topics" du classeur fermé "BDD TMT.xlsm" sont récupérés dans la 1ère feuille nommé aussi "Topics" via la macro suivante :

    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
    Sub Import_Data()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\BDD TMT.xlsm"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Topics"
     
        Set Cn = New ADODB.Connection
     
        '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
        '-----------------
     
        'Définit la requête.
        texte_SQL = "SELECT * FROM [Topics$]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
        'Ecrit le résultat de la requête dans la cellule A2
        Range("A2").CopyFromRecordset Rst
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
    End Sub
    Donc j'arrive bien à récupérer les données de mon classeur fermé "BDD TMT.xlsm" mais je n'arrive pas à comprendre comment je peux modifier les données et écrire des nouvelles données (nouvelles lignes) dans mon classeur fermé "BDD TMT.xlsm" à partir de mon classeur ouvert "Topic Management Tool.xlsm".
    Bref je souhaiterai renvoyez toute mes modifications et mes nouvelles données de mon classeur ouvert "Topic Management Tool.xlsm" dans mon classeur fermé "BDD TMT.xlsm" et je n'arrive pas à comprendre et appliquer la partie IV-B. Ajouter un enregistrement et IV-C. Modifier les enregistrements du tuto de SilkyRoad.


    Est-ce que quelqu'un peut m'aider, svp ?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Code requête ajouter : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SQL = "insert into [Topics$] [champ1],[camp2] value ('toto',1.1234);"
    Cn.execute sql
    Code mise a jour : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SQL = "update [Topics$] set [champ1]='titi',[champ2]=6632 where identifiant=123;"
    Ne.execute sql

  3. #3
    Futur Membre du Club Avatar de Naru31
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci rdurupt pour ta réponse mais :

    >Pour la requête d'ajout, cela me met une erreur :

    Erreur d'exécution '-2147217900 (80040e14)':
    Erreur de syntaxe dans l'instruction INSERT INTO
    Voici le code et là ou ça bloque :

    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
    Sub add_Data()
         Dim Cn As ADODB.Connection
         Dim Fichier As String
         Dim texte_SQL As String
         Dim Rst As ADODB.Recordset
        
         'Définit le classeur fermé servant de base de données
         Fichier = "C:\BDD TMT.xlsm"
        
         Set Cn = New ADODB.Connection
        
         '--- Connection ---
         With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
         End With
         '-----------------
        
        texte_SQL = "insert into [Topics$] [champ1],[camp2] value ('toto',1.1234);"
        
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
        
         '--- Fermeture connexion ---
         Cn.Close
         Set Cn = Nothing
    
     End Sub

    >Et pour la requête de mise à jour, cela me met une erreur :

    Erreur d'exécution '-2147217904 (80040e10)':
    Aucune valeur donnée pour un ou plusieurs des paramètres requis.
    Voici le code et là ou ça bloque (encore...) :

    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
    Sub update_Data()
         Dim Cn As ADODB.Connection
         Dim Fichier As String
         Dim texte_SQL As String
         Dim Rst As ADODB.Recordset
        
         'Définit le classeur fermé servant de base de données
         Fichier = "C:\BDD TMT.xlsm"
         'Nom de la feuille dans le classeur fermé
         NomFeuille = "Topics"
        
         Set Cn = New ADODB.Connection
        
         '--- Connection ---
         With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
         End With
         '-----------------
        
        texte_SQL = "update [Topics$] set [champ1]='titi',[champ2]=6632 where identifiant=123;"
        
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
        
         '--- Fermeture connexion ---
         Cn.Close
         Set Cn = Nothing
    
     End Sub
    Qu'est qui ne convient pas dans ce code ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    J'ai lus plusieurs postes qui font allusion au tutoriel de SilkyRoad!

    Je n'ai jamais pris le temps d'y getter un oeil, mais j'imagine qu'il doit être complet!

    Mais malheureusement pour lui les gens ne s'arrête qua ce qui les intéressent et ne prennent pas la peine de le lire jusqu'au bout!

    On va tenter de combler ces lacunes!

    L'instruction HDR=YES dans la chêne de connexion veux dire que la première ligne de ton tableau Excel est le nom de colonnes.

    Dans mon exemple champ1,champ2,identifiant, mais ça pourrait être date facture,numéro facture, libellé facture.

    HDR=no veut dire que la première ligne n'est pas le titre des colonnes,'donc les champs par défaut sont respectivement pour les colonnes A,B,C F1,F2,F3.

    Maintenant si tu reprends les deux requêtes et que tu les adapte a ce que je viens de dire tous prend son sans!

  5. #5
    Futur Membre du Club Avatar de Naru31
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci encore de ta réponse.

    Je vais tester cela et réfléchir à mon code en prenant un peu de recul, mais je pense que mon problème vient d'un blocage perso et un amalgame sur les commandes "SQL"...

    Par contre, ce n'est pas le premier tuto de SilkyRoad que j'utilise et je les trouve bien fait et génial. Je pense juste que pour celui là, cela ne vient pas du tuto mais plutôt du lecteur... (comme dit le proverbe : 99% des problèmes informatique se trouvent entre la chaise et le clavier...)

    Si je trouve ma solution dans le weekend, je la posterais avec ma compréhension et mes explications au cas où d'autres sont dans le même cas. Dans le cas contraire je poserais d'autres questions...

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

    Si tu peux fournir un fichier Excel nettoyé de toute données confidentiel je te fournirai un exemple qui colle à ton fichier!

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

Discussions similaires

  1. Ecrire dans un classeur excel fermé
    Par schmitx dans le forum Excel
    Réponses: 0
    Dernier message: 02/02/2014, 18h28
  2. Lire dans un classeur Excel fermé
    Par forestlaw2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/07/2012, 12h15
  3. [Débutant] Lire les commentaires dans un classeur xls fermé!
    Par CoolDevelop dans le forum VB.NET
    Réponses: 1
    Dernier message: 17/07/2012, 08h11
  4. [XL-2007] Lire dans les classeurs Excel fermés (ADODB)
    Par Korleone dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 05/04/2011, 08h52
  5. [XL-2003] Lire et écrire dans les classeurs Excel fermés
    Par skan_one dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/07/2009, 14h34

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