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 :

[VB5] Excel + Access


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut [VB5] Excel + Access
    je m'explique je cherche a inserer dans une fichier Excel des informations issues d'une base de donnés par l'intermédiaire de Visual basic 5. Dans mon programme vb je crée une boucle me permettant de lire ma ou mes tables dans ma bdd , et me permettant d'insérer dans mon fichier excel les données dont j'ai besoin. Mais je ne sait pas comment ouvrir le fichier excel pour y inséré les donnée. Quelqu'un connaitrait-il un tutoriel sur sa ou un site m'expliquant comment créer ce code? merci d'avance

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut
    Merci pour le lien je ne l'avais pas vu sur le site. Sa ma bien aidé mais je narrive pas a trouver le code me permettant d'enregistrer le fichier excel sous un nom différent sans avoir a le taper moi-même.
    Voila le code que je tape:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monexcel.SaveAs "C:\PTI\" & Text4 & ".xls"
    Text4 et ma variable qui recevra le nom de fichier.

    Il me renvoie le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur d'execution '438':
    Cet objet ne gére pas cette propriété ou méthode.

    Comment dois-je utiliser SaveAs dans mon code pour qu'il marche. Si je ne met que Save sa mache en partie puisqu'il me demande un nom de fichier. Mais je veux pas le rentrer manuellement.

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    le saveAs est à appliquer à l'objet workbook.. pas à l'application excel ..
    montre nous plus de ton code

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut
    Voici mon code complet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set monexcel = CreateObject("Excel.Application")
    monexcel.Workbooks.Open "C:\PTI\absences.xls"
    Set sheet = monexcel.ActiveWorkbook.Sheets(1)
     sheet.Cells(7, 1) = Text1
     sheet.Cells(7, 2) = Text2
     sheet.Cells(7, 3) = Text3
     sheet.Cells(7, 4) = Text4
     chemin = "C:\PTI\" & Text4 & ".xls"
    monexcel.Application.Visible = True
    monexcel.SaveAs chemin
    monexcel.Workbooks.Close
    Set monexcel = Nothing

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim Wk As workbook
    ..
    ..
    set WK = monexcel.Workbooks.Open "C:\PTI\absences.xls"
    ..
    ...
    wk.SaveAs chemin

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut
    Sa y est je pense que le code que j'ai fais fonction correctement. Du moins la il fonctionne. Voici ce que j'ai fais:

    l'ancien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set monexcel = CreateObject("Excel.Application")
    monexcel.Workbooks.Open "C:\PTI\absences.xls"
    Set sheet = monexcel.ActiveWorkbook.Sheets(1)
    sheet.Cells(7, 1) = Text1
    sheet.Cells(7, 2) = Text2
    sheet.Cells(7, 3) = Text3
    sheet.Cells(7, 4) = Text4
    chemin = "C:\PTI\" & Text4 & ".xls"
    monexcel.Application.Visible = True
    monexcel.SaveAs chemin
    monexcel.Workbooks.Close
    Set monexcel = Nothing[/LEFT]
    Je n'ai modifié que le nom qui est en rouge et quand je l'exécute sa marche.

    le nouveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set monexcel = CreateObject("Excel.Application")
    monexcel.Workbooks.Open "C:\PTI\absences.xls"
    Set sheet = monexcel.ActiveWorkbook.Sheets(1)
     sheet.Cells(7, 1) = Text1
     sheet.Cells(7, 2) = Text2
     sheet.Cells(7, 3) = Text3
     sheet.Cells(7, 4) = Text4
     chemin = "C:\PTI\" & Text4 & ".xls"
    monexcel.Application.Visible = True
    sheet.SaveAs chemin
    monexcel.Workbooks.Close
    Set monexcel = Nothing
    Sa marche trés bien. Merci pour ton explication sur SaveAs.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut
    le code précédemment que j'ai pu faire marcher, était dans le but de me permettre de créer un fichier Excel donc recevant des info d'une base de données. J'ai donc adapté le code avec les different champs de ma base de données. J'utilise pour le fichier Excel differentes tables pour selectionner des info spécifique dans celles-ci. Je crée mes requettes sql qui fonctionnent bien et grace a des boucle Do While ... Loop je remplis mon tableau Excel. Mais je rencontre un problème, dès que j'exécute le code et qu'il passe a une donnée suivante il me fais une erreur. 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
     
    Set excelsect = CreateObject("Excel.Application")
        excelsect.Workbooks.open ("C:\PTI\Excel\sections.xls")
    Set sheet = excelsect.ActiveWorkbook.Sheets(1)
     
    Dim Rsect, Nsect, Rstag, Nstag, Rabs, Nabs, Rabs2
     
    'connexion a la base de données
    Set connex = CreateObject("ADODB.Connection")
        connex.open "Provider=Microsoft.Jet.OLEDB.4.0;DataSource='C:\PTI\Absence.mdb';"
     
    Set Rsect = CreateObject("ADODB.Recordset")
    Set Rsect.ActiveConnection = connex
        Rsect.open "SELECT * FROM Sections"
     
    Do While Not Rsect.EOF
    i = 4
        Set Rstag = CreateObject("ADODB.Recordset")
        Set Rstag.ActiveConnection = connex
            Rstag.open "SELECT * FROM Stagiaires WHERE Num_sect1 = " & Rsect("Num_section")
     
        Do While Not Rstag.EOF
            Set Rabs = CreateObject("ADODB.Recordset")
            Set Rabs.ActiveConnection = connex
                Rabs.open "SELECT * FROM Absence WHERE Num_sect = " & Rsect("Num_section") & " AND Num_stag = " & Rstag("Num_stag")
     
            Do While Not Rabs.EOF
                Set Rabs2 = CreateObject("ADODB.Recordset")
                Set Rabs2.ActiveConnection = connex
                    Rabs2.open "SELECT Count(Num_abs) as Nbr_abs FROM Absence WHERE Num_stag = " & Rabs("Num_stag")
     
                sheet.Cells(i, 1) = Rsect("Nom_section")
                sheet.Cells(i, 2) = Rstag("Nom_stag")
                sheet.Cells(i, 3) = Rstag("Prenom_stag")
                sheet.Cells(i, 4) = Rabs2("Nbr_abs")
            chemin = "C:\PTI\" & Rsect("Nom_section") & ".xls"
            i = i + 1
            Rabs.MoveNext
            Loop
          Rstag.MoveNext
        Loop
            sheet.SaveAs chemin
            excelsect.Workbooks.Close
        Rsect.MoveNext
    Loop
    Set excelsect = Nothing
    Il me fait une erreur quand il revien dans la boucle Rabs.eof sur la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheet.Cells(i,1) = Rsect("Nom_section")
    Il me dit qu'un objet est obligatoire. Pourtant avec la première section il marche bien ,c'est dès qu'il arrive sur la deuxième section. je ne vois pas ce qui peut bloquer. Merci de votre aide.

  9. #9
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    sort ces 2lignes de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sheet.SaveAs chemin
            excelsect.Workbooks.Close

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut
    Merci sa marche. Par contre ce que je comprend pas c'est que lorsque je lance mon programme, il me remplit bien la feuille et me l'enregistre bien avec le nom de la section qu'il faut. Mais il me crée d'autre fichier avec les nom des autres sections mais le contenu est identique dans les différents fichiers. Je n'arrive pas a trouver l'erreur dans mon programme.

  11. #11
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    ben faudrai voir ou en est ton code...? tu as "sorti" les 2 lignes..?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut
    voila mon 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
     
    Private Sub Psections_Click()
    Set excelsect = CreateObject("Excel.Application")
        excelsect.Workbooks.open ("C:\PTI\Excel\sections.xls")
    Set sheet = excelsect.ActiveWorkbook.Sheets(1)
    Dim Rsect, Nsect, Rstag, Nstag, Rabs, Nabs, Rabs2
    'connexion a la base de données
    Set connex = CreateObject("ADODB.Connection")
        connex.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\PTI\Absence.mdb';"
    Set Rsect = CreateObject("ADODB.Recordset")
    Set Rsect.ActiveConnection = connex
        Rsect.open "SELECT * FROM Sections"
        Nsect = Rsect("Num_section")
    Do While Not Rsect.EOF
    i = 4
        Set Rstag = CreateObject("ADODB.Recordset")
        Set Rstag.ActiveConnection = connex
            Rstag.open "SELECT * FROM Stagiaires WHERE Num_sect1 = " & Rsect("Num_section")
        Do While Not Rstag.EOF
            Set Rabs = CreateObject("ADODB.Recordset")
            Set Rabs.ActiveConnection = connex
                Rabs.open "SELECT * FROM Absence WHERE Num_sect = " & Rsect("Num_section") & " AND Num_stag = " & Rstag("Num_stag")
            Do While Not Rabs.EOF
                Set Rabs2 = CreateObject("ADODB.Recordset")
                Set Rabs2.ActiveConnection = connex
                    Rabs2.open "SELECT Count(Num_abs) as Nbr_abs FROM Absence WHERE Num_stag = " & Rabs("Num_stag")
                excelsect.Application.Visible = True
                sheet.Cells(i, 1) = Rsect("Nom_section")
                sheet.Cells(i, 2) = Rstag("Nom_stag")
                sheet.Cells(i, 3) = Rstag("Prenom_stag")
                sheet.Cells(i, 4) = Rabs2("Nbr_abs")
            i = i + 1
            Rabs.MoveNext
            Loop
            Rstag.MoveNext
        Loop
            chemin = "C:\PTI\Excel2\" & Rsect("Nom_section") & ".xls"
            sheet.SaveAs chemin
     
        Rsect.MoveNext
    Loop
    excelsect.Workbooks.Close
    Set excelsect = Nothing
    End Sub
    Par contre si je modifi le code pour enregistrer les données sur chaque feuille du classeur, est sa marche. Mais pas si je les enregistre indépendement.

  13. #13
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par shaka84
    Par contre si je modifi le code pour enregistrer les données sur chaque feuille du classeur, est sa marche. Mais pas si je les enregistre indépendement.
    ? lol ou désolé je comprends pas ... qu'obtient tu et que que voudrai tu avoir, (en terme de classeurs excel , nombre ? un classeur par section ?...)

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut
    quand j'exécute mon programme, les info que je récupére se trouve dans ma base de données, je prend le nom de chaque section que je mémorise dans une cellule d'un classeur excel. Mais pour chaque section j'aurais un classeur portant le nom de la section en question. Cela fonctionne bien avec les 2 première section, les information concorde bien avec ceux figurant dans la base. Mais a partir de la troisième, le classeur porte bien le même nom qu'il faut mais le contenu n'est pas correct.

    Nom du classeur : BTS IG.xls
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Nom Section | Nom stagiaires | Prénom stagiaires | Nombre d'absence
    BTS IG 
    BTS IG
    voila mon classeur type que jutilise. Mon programme en fais une copi avec le nom de la section.
    Mais comme je l'ai dis plus haut, a la troisième section il me fait sa dans le classeur:

    Nom du classeur : BTS AC.xls
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Nom Section | Nom stagiaires | Prénom stagiaires | Nombre d'absence
    BAC MRIM
    BAC MRIM
    par contre si j'enregistre tous dans le même classeur sur différentes feuille sa me pose pas de problème. Mais c'est pas ce que je veux. Je veux pourvoir enregistrer ces informations dans différents classeurs avec des noms différents. Voila j'espére que j'ai pu expliqué assez clairement ce que je voulais faire. C'est pas facile de d'ecrire ce que je veux faire, en plus je débute en programmation.(depuis 3 mois). Merci pour ton aide

  15. #15
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Vu que tu utilise toujours la même feuille et que tu ne l'efface pas .. ton probléme ce n'est pas plutôt qu'il te reste les données précédentes..?

    essau d'effacer la feuille ...
    à chaque changement de sections..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    Do While Not Rsect.EOF
    i = 4
    sheet.cells.ClearContents
    Set Rstag = CreateObject("ADODB.Recordset")
    ...

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Par défaut
    bon sa y est tous marche correctement. J'ai les bon fichier qui se crée. Je n'en ai pas en plus dont le contenu est incorrecte. En faite , j'ai rajouté une boucle Do While ... Loop afin qu'il vérifie dans la table absence les numéro des sections et s'il arrive en fin de fichier sans rien trouver sur une des sections il passe a la suivante. Et sa marche. Pour le code que tu ma donnée , j'y ai rajouté la ligne a partir de laquel il devait effacer. Encore merci pour ton aide

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

Discussions similaires

  1. Retour chariot et communication Excel - Access
    Par jarodc dans le forum Access
    Réponses: 6
    Dernier message: 24/03/2006, 14h48
  2. Réponses: 2
    Dernier message: 18/11/2005, 16h29
  3. 'lier les tables' relation excel/access
    Par rahan_dave dans le forum Access
    Réponses: 7
    Dernier message: 08/11/2005, 17h08
  4. [Vba] BDD : Excel + Access + Vba
    Par Emcy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/11/2005, 10h23
  5. Réponses: 5
    Dernier message: 26/05/2004, 10h42

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