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

Access Discussion :

ouvrir un classeur excel via un code sql


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut ouvrir un classeur excel via un code sql
    Bonjour a tous

    voila je voudrais savoir s il etait possible d ecrire un code sql me permettant
    - d ouvrir un classeur excel
    - de modifier le contenu de la cellule A65000 de la feuille(4) (genre mettre "a")
    - de refermer ce meme classeur

    Au fait g ecrit une macro sur ce classeur qui se declenche des qu une cellule de la feuille(4) est modifiée.
    j exporte a partir de ma base de donnée une requete vers ce classeur, mais cette exportation ne declenche pas ma macro (le classeur excel etant fermé pour permettre l exportation). j essaie de trouver un moyen de la declencher sans ouvrir ce classeur...

    merci beaucoup

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut

    Va voir le Tuto de SylkiRoad sur les classeurs fermés, il parle de connection avec un classeur par ADO, si cela peut t'aider

    Starec

  3. #3
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    DAO sait très bien le faire aussi :
    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
    Sub DAOUpdateExcelFile(ByVal strFullPath As String, _
                           ByVal strTab As String, _
                           ByVal RowIndex As Long, _
                           ByVal ColumnIndex As Long, _
                           ByVal setValue As Variant)
     
        ' Ajoutez la référence DAO
        Dim db As DAO.Database
        Dim rec As DAO.Recordset
     
        ' on ouvre le fichier excel en tant que base de données DAO
        Set db = OpenDatabase(strFullPath, False, False, "Excel 8.0;")
        DoEvents
        ' on ouvre un recordset sur un onglet comme on le ferait
        '   sur une table Access
        ' En DAO, les tables sont les onglets avec un $ final
        Set rec = db.OpenRecordset(strTab & "$", DAO.dbOpenDynaset)
     
        ' on se déplace sur l'enregistrement souhaité
        rec.Move RowIndex - 1
        ' on édite l'enregistrement
        rec.Edit
            rec.Fields(ColumnIndex - 1).Value = setValue
        rec.Update
        ' on sauvegarde
     
        ' fermez les objets
        rec.Close
        db.Close
     
        ' libérez les objets !
        Set db = Nothing
        Set rec = Nothing
     
    End Sub
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    daoupdateexcelfile "c:\temp\db.xls","Feuil1",12,5,999
    Permet de passer la valeur de la cellule E12 de l'onglet "Feuil1" à 999

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Tiens j'ai remarqué que ça ne marchait pas s'il y a une formule dans la cellule ...

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Tu dois utiliser les object WorkBooks (classeur) WorkSheets (Feuille) et Cells(Cellule).

    Ca resemble à ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim MonApp As Object
    Dim MonClasseur As WorlBook
    Dim MaFeuille As WorkSheets
     
        Set MonApp = CreateObject("Excel.Application")
        oApp.Visible = True
     
        Set MonClasseur=MonApp.WorkBooks("Ton Fichier").OpenDocument
        Set MaFeuille=MonClasseur.WorkSheets("Ta Feuille").Selected
    Utilise F1 pour corriger et compléter le code

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Salut DMBoup

    Je me permets quelques corrections de ton code, car approximatif (sûrement donné à la hâte...). Ne le prends pas mal, c'est pour la bonne cause...

    Tu donnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim MonApp As Object
    Dim MonClasseur As WorlBook
    Dim MaFeuille As WorkSheets
    Cela devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim MonApp As Object
    Dim MonClasseur As WorkBook
    Dim MaFeuille As WorkSheet
    Avec WorkBook et sans s à Worksheet

    Puis tu donnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set MonClasseur=MonApp.WorkBooks("Ton Fichier").OpenDocument
    Set MaFeuille=MonClasseur.WorkSheets("Ta Feuille").Selected
    Cela devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set MonClasseur = Workbooks.Open("MonFichier")
    Set MaFeuille = MonClasseur.Worksheets("MaFeuille")

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    C'est certainement mieux. J'ai saisi à la volet comme ca.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re

    Excuse-moi DMboup, mais là c'est de l'automation, hors chamus demande du SQL, et ce n'est qu'avec DAO comme l'écrit Caféine ou ADO que l'on peut faire du SQL

    Starec

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Starec
    Re

    Excuse-moi DMboup, mais là c'est de l'automation, hors chamus demande du SQL, et ce n'est qu'avec DAO comme l'écrit Caféine ou ADO que l'on peut faire du SQL

    Starec
    Comme quoi il faut bien lire les questions. Merci

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    Je vous remercie, mais je suis encore au stade ou dans access,
    je crée mes macro en passant par l assistant. la je choisit betement entre les differentes actions qui me sont proposées.

    Je vous ai demandé un codage en SQL, car je pensait m en sortir en rentrant betement ce code dans la ligne "Instruction code" de l action "Executer SQL"
    Evidemment je ne peut pas rentrer les codes comme celui de cafeine ou de DMboup.

    j ai honte mais :
    ou dans ma base de donnée, dois je rentrer ton code cafeine, si je veux pouvoir l appliquer.
    en accedant a l environnement VBA j ai bien inseré un nouveau module et copié ton code dedans.
    mais impossible de le retrouver pour pouvoir le lancer : il n apparait pas dans ma liste de Macro comme c est le cas avec excel.

  11. #11
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    il faut transformer le code pour que ce soit une fonction et non plus une procédure (Sub)

    Changer Sub () ... End Sub
    en Function() ... End Function

    Et ensuite, dans les macros mettre ExécuterCode puis pointer sur la fonction en question ...
    Citation Envoyé par chamus
    Je vous remercie, mais je suis encore au stade ou dans access,
    je crée mes macro en passant par l assistant. la je choisit betement entre les differentes actions qui me sont proposées.

    Je vous ai demandé un codage en SQL, car je pensait m en sortir en rentrant betement ce code dans la ligne "Instruction code" de l action "Executer SQL"
    Evidemment je ne peut pas rentrer les codes comme celui de cafeine ou de DMboup.

    j ai honte mais :
    ou dans ma base de donnée, dois je rentrer ton code cafeine, si je veux pouvoir l appliquer.
    en accedant a l environnement VBA j ai bien inseré un nouveau module et copié ton code dedans.
    mais impossible de le retrouver pour pouvoir le lancer : il n apparait pas dans ma liste de Macro comme c est le cas avec excel.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    J ai rentré mes parametres dans ta fonction :

    DAOUpdateExcelFile ("C:\Documents and Settings\Administrateur\Bureau\TEST", "client_du_jour", 1, 7, 999)

    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
    Function DAOUpdateExcelFile(ByVal strFullPath As String, _
                           ByVal strTab As String, _
                           ByVal RowIndex As Long, _
                           ByVal ColumnIndex As Long, _
                           ByVal setValue As Variant)
     
        ' Ajoutez la référence DAO
        Dim db As DAO.Database
        Dim rec As DAO.Recordset
     
        ' on ouvre le fichier excel en tant que base de données DAO
        Set db = OpenDatabase(strFullPath, False, False, "Excel 8.0;")
        DoEvents
        ' on ouvre un recordset sur un onglet comme on le ferait
        '   sur une table Access
        ' En DAO, les tables sont les onglets avec un $ final
        Set rec = db.OpenRecordset(strTab & "$", DAO.dbOpenDynaset)
     
        ' on se déplace sur l'enregistrement souhaité
        rec.Move RowIndex - 1
        ' on édite l'enregistrement
        rec.Edit
            rec.Fields(ColumnIndex - 1).Value = setValue
        rec.Update
        ' on sauvegarde
     
        ' fermez les objets
        rec.Close
        db.Close
     
        ' libérez les objets !
        Set db = Nothing
        Set rec = Nothing
     
    End Function
    Tout est ok jusqu au debogage qui me dit :

    rec.Fields(ColumnIndex - 1).Value = <élément non trouvé dans cette collection>
    euh ?

  13. #13
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    tu es sûr que ton fichier s'appelle TEST et pas TEST.xls ?

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    je viens d essayer avec les 2 et toujours cette meme ereur 3265.
    il bug toujours sur ta ligne :

    rec.Fields(ColumnIndex - 1).Value

    En revanche si je specifie le nom d un fichier qui n existe pas, le code bug a un autre endroit au niveau de ta ligne :
    Set rec = db.OpenRecordset(strTab & "$", DAO.dbOpenDynaset)
    (erreur 3011, la evidemment il ne trouve pas le chemin d acces)

    je pense que ce n est pas un pb d acces au fichier

  15. #15
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Surement parce que cette colonne n'est pas utilisé. De même dans un fichier vide, le recordset est vide.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Points : 18
    Points
    18
    Par défaut
    excuse mon ignorance mais du coup je fais koi

  17. #17
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Je sais pas

  18. #18
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par chamus
    excuse mon ignorance mais du coup je fais koi
    Tu devrais tester deux choses en mettant un point d'arrêt sur la ligne qui pose problème.

    Lorsque le code s'arrête en jaune sur la ligne, dans la fenêtre d'exécution, vérifie la valeur de columnindex, et vérifie que ton recordset REC n'est ni BOF ni EOF.

    Combien vaut ColumnIndex?

  19. #19
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    je déconseille formellement d'écrire dans une cellule située en 65536
    sinon bonjour les tailles de fichier

  20. #20
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par random
    je déconseille formellement d'écrire dans une cellule située en 65536
    sinon bonjour les tailles de fichier
    J'ai peut-être loupé quelque chose, mais où vois-tu dans le code que l'on écrit en ligne 65536?

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/10/2012, 15h02
  2. Réponses: 2
    Dernier message: 11/06/2008, 14h38
  3. ouvrir un classeur excel à partir d'un nom variable
    Par abu143 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/10/2006, 21h53
  4. [vba-excel] ouvrir des classeurs excel
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/10/2006, 15h28
  5. [vb6]ouvrir un classeur excel
    Par mcay dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/09/2006, 10h33

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