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 :

Nouveau xls / SQL [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2010
    Messages : 142
    Par défaut Nouveau xls / SQL
    Bonjour,
    (Je suis encore debutant sur VBA Excell, je m'en sors pas mal sur VB-Access)
    Je voudrais vous demander une aide svp par rapport à ce 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
     
    Private Sub valider_Click()
    Dim k As Integer
     
    With Sheets("Feuil2")
    Columns("A:F").ClearContents
    End With
     
    Set rst = db.OpenRecordset("SELECT [table].[id], [table].[Name], [table].[PrName], [table].[Start Date], [table].[End Date] FROM [table];")
     
    k = 0
    Do
        k = k + 1
        If k > 100 Then Exit Do
            With Sheets("Feuil2")
                .Cells(k, 1) = rst.Fields("id").Value
                .Cells(k, 2) = rst.Fields("Name").Value
                .Cells(k, 3) = rst.Fields("PrName").Value
                .Cells(k, 4) = rst.Fields("Start Date").Value
                .Cells(k, 5) = rst.Fields("End Date").Value
            End With
       rst.MoveNext
    Loop Until rst.EOF
    rst.Close
    End Sub
    Actuellement, tt est OK, ce code implement la feuil2 du meme fichier par la requete SQL, en connexion avec une BD (code sur module, aucun soucis de ce coté la aussi).
    La requete est apte à recevoir une clause Where.
    Mais je sens que ce code n'est pas ... assez flexible; du coup, je voudrais savoir si possible comment :

    1. Créer un nouveau fichier Excel(une seule feuille) en mode lecture seul (modification impossible, enregistrement possible) implementé par la requete (et qu'il l'ouvre entre temps).
    2. Sur le nouveau fichier Excel, mettre en premiere colonne les noms des colonnes de la requete SQL (coloré et figé).


    Voila ! Merci d'avance!

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Un exemple de code pour insérer des données dans un nouveau classeur et l'enregistrer en proposant l'ouverture en lecteur seule

    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
    Dim Cnn As New ADODB.Connection
    Dim Rec As New ADODB.Recordset
     
    Dim i As Integer
     
    Cnn.Open "DSN=Nom;UID=User;PWD=Password"
     
    Rec.Open "select * from MaTable", Cnn, adOpenKeyset, adLockReadOnly
     
    Dim wrk As Workbook
    Set wrk = Application.Workbooks.Add
     
    'insert les en-tetes
    For i = 1 To Rec.Fields.Count
        wrk.Sheets(1).Cells(1, i).Value = Rec.Fields(i - 1).Name
    Next i
     
    'Ajout des données à partir de A2
    wrk.Sheets(1).Range("A2").CopyFromRecordset Rec
     
    'Enregistrement en lecture seule
    wrk.SaveAs "c:\Test.xlsx", XlFileFormat.xlWorkbookDefault, , , True
     
     
    Rec.Close
    Set Rec = Nothing
    Cnn.Close
    Set Cnn = Nothing

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2010
    Messages : 142
    Par défaut
    Bonjour,
    Tt dabors, je vous remercie pour votre reponse.
    Ce que vous me proposez ici, c'est d'utiliser une connexion ADO à la BD. Or, je n'ai pour l'instant pas de connaissance sur cette technologie.
    Je ne sais pas où specifier le chemin de la BD, ni comment manipuler les données. Je testerais ceci et verrais si je m'en sors avec.

    Cordialement.

  4. #4
    Invité
    Invité(e)
    Par défaut Ta plus besoin de te prendre la tête avec ADODB
    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
    Set con = New ADODBRD   'Class ADODB
    '1  - ODBC
    '2  - ORACLE
    '3  - ACCESS 2010
    '4  - ACCESS 2000
    '5  - ACCESS 97
    '6  - SQL SERVER
    '7  - SQL SERVER 2005 Express
    '9  - SQLite
    '10 - SQLite3
    con.TYPEBASE = 4 '4 - ACCESS 2000
    con.Fichier = "C:\MonRep\MaBase.mdb"
     
     
     
     SQL = "SELECT * FROM table;"
     Set RS = con.OpenRecordSet(SQL)
    Fichiers attachés Fichiers attachés

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2010
    Messages : 142
    Par défaut
    Je sais qu'on s'eloigne un peu de la rubrique Excel, mais je voudrais jsute en savoir plus sur la technologie ADO, car je sais qu'elle s'avere beaucoup plus efficace que DAO.

    Dans un premier temps, la connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    '1  - ODBC
    '2  - ORACLE
    '3  - ACCESS 2010
    '4  - ACCESS 2000
    '5  - ACCESS 97
    '6  - SQL SERVER
    '7  - SQL SERVER 2005 Express
    '9  - SQLite
    '10 - SQLite3
    Pour Access 2003 on choisi laquelle? 2000 meme?

    Dans un second temps, la librairie? J'en ai choisi pas mal, mais "apparement" VBA ne reconnait pas encore quand je declare ADO.recordset (quand je mets . apres ADO, il n'affiche pas la liste des choix...). [Resolu] il fallait juste que je modifie la priorité ...

    Dans un troisieme temps ! pour repondre à rdurupt.
    >rdurupt : je ne souhaite pas recuperer que 100 ligne, je souhaite recuperer le resultat de la requete tt court. Juste pour faire des testes, j'ai recuperé que 100 lignes histoire de ...
    >rdurupt : aussi, le fichier .cls correspond à quoi ... ?


    Donc je reviens à ma question de depart :
    Je voudrais créer un nouveau fichier, nomé, avec une seule feuille ou y'aurait le resultat de la requete, chaque entete de la colonne aura le nom de la colonne de la requete, et que ce fichier soit en mode LECTURE SEULE, modification impossible et enregistrement possible ! (pour l'instant, je suis encore sur du DAO )

    Comme j'ai dis, j'ai un peu bidouillé ceci avec quelques code sur internet, mais c'est "bidouillé", j'ai pas vraiment saisi les fonctionnalité exacte de chaque fragment de code (pas envie de faire du copier coller à l'aveuglette).

    Donc si vous avez des propositions !
    Voila ! Merci et desolé si c'est trop demandé.

  6. #6
    Invité
    Invité(e)
    Par défaut avec la solution de jfontaine
    '4 - ACCESS 2000
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Ajout des données à partir de A2
    wrk.Sheets(1).Range("A2").CopyFromRecordset Rec
     
    'Enregistrement en lecture seule
    wrk.SaveAs "c:\Test.xlsx", XlFileFormat.xlWorkbookDefault, , , True
    le ficher cls c’est une class on l’utilise comme une variable sauf qu’il l’instruction New elle possède des propriétés (Variables) et des méthode (Fonctions, Procédures) c’est une variable intelligente !

    Il faut faire un clic droit sur ton projet vb et importer un fichier puis sélectionner le fichier cls
    Images attachées Images attachées  
    Dernière modification par Invité ; 12/03/2013 à 16h22.

  7. #7
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Peu importe la méthode de recherche des données, ce qui est interressant pour toi, c'est comment on créait un nouveau classeur pour les mettre dedans.
    La méthode d'insertion ici n'utilise pas de boucle mais CopyFormRecordset qui insère les données d'un seul bloc (Beaucoup plus rapide)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Je suis d’accords, sauf qu’il souhaite récupérer que 100 lignes, appart rajouter select top 100 ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If k > 100 Then Exit Do

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

Discussions similaires

  1. Comment créer un nouveau serveur SQL ?
    Par jjcasalo dans le forum Administration
    Réponses: 5
    Dernier message: 26/09/2008, 13h34
  2. Enregistrer un nouveau server sql
    Par GodGives dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 06/06/2008, 09h43
  3. [SQL2K] Pb "Enregistrer un nouveau serveur SQL"
    Par Ludoblanc dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 13/02/2006, 09h31
  4. Enregistrement d'un nouveau serveur Sql Server
    Par viva-emptiness dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/10/2005, 18h00

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