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 :

VBA/SQL - Manipulation d'un recordset


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Par défaut VBA/SQL - Manipulation d'un recordset
    Bonjour,
    mon problème est plutôt simple et ma question est plus d'un ordre logique. Elle concerne vba excel et sql.

    J'ai besoin d'importer des données sql dans une feuille. J'ai bien ma requête sql, qui me retourne tout ce dont j'ai besoin MAIS j'ai besoin d'inserer entre certaine des colonnes de mon recordset, d'autre colonnes : en d'autre termes, j'ai besoin de selectionner une colonne de mon recordset, de l'inserer à tel ou tel endroit de ma feuille.

    Ma question est donc, comment selectionner une colonne d'un recordset et la coller où je le désire? Est-ce que j'envisage le problème de la bonne manière ou il faut procéder différement?

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Sub sql_import_ORA()
     
        'Requis:
        'Menu: Tools/References (Microsoft ActiveX Data Objects 2.8 Library)
     
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
     
        On Error Resume Next
        Worksheets("Imports").Delete
        Worksheets.Add().Name = "Imports"
        ActiveSheet.Select = "Imports"
     
    '
        '*----------------------------*
        '*   Requête SQL              *
        '*----------------------------*
     
        'Declare variables
        Set objMyConn = New ADODB.Connection
        Set objMyCmd = New ADODB.Command
        Set rs = New ADODB.Recordset
     
        'Open Connection
        objMyConn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=kofvmmssql021\sql071;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=KOL60404;Use Encryption for Data=False;Tag with Column collation when possible=False"
        objMyConn.Open
     
        Set objMyCmd.ActiveConnection = objMyConn
        objMyCmd.CommandType = adCmdText
        Dim sql As String
        sql = "select TRAN_NUMERO_SERIE,TRAN_INDICE_CANAL, MODELE,TRAN_TELEPHONE,ESI_ADRESSE"
        sql = sql & ",ESI_CODEPOSTAL,ESI_VILLE"
        sql = sql & " from METIERS.dbo.AMI_TS_PARC"
        sql = sql & " where MODELE like '%amph%' and modele not like '%amphresi%'"
     
        objMyCmd.CommandText = sql
        objMyCmd.Execute
     
        'Open Recordset
        Set rs.ActiveConnection = objMyConn
        rs.Open objMyCmd
     
     
        'Copy Data to Excel
     
        'pour l'instant je fais comme ça, ce qui me copie tout le recordset
        'ActiveSheet.Range("A2").CopyFromRecordset (rs)
     
        'je voudrais être capable de selectionner une colonne un peu comme ça
        ActiveSheet.Range("A2").Value = rs!TRAN_NUMERO_SERIE.Value
        'sauf que ça ne me retourne qu'une ligne
     
     
        'Close Connection
        objMyConn.Close
     
        Set objMyConn = Nothing
        Set rs = Nothing
    End Sub
    D'avance merci.

  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,

    dans le cas ou les colonnes à inserer sont vide, tu peux ajouter un champ vide dans ta requete.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        sql = "select TRAN_NUMERO_SERIE,TRAN_INDICE_CANAL, '' as vide, MODELE,TRAN_TELEPHONE,ESI_ADRESSE"
        sql = sql & ",ESI_CODEPOSTAL,ESI_VILLE"
        sql = sql & " from METIERS.dbo.AMI_TS_PARC"
        sql = sql & " where MODELE like '%amph%' and modele not like '%amphresi%'"

    Si la colonne contient déja des données, il te faudra faire une insertion de données en boucle et choisir la colonne pour chaque champ (voir changer l'ordre des colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Do While Not rs.EOF
            ActiveSheet.Range("A" & i).Value = rs!TRAN_NUMERO_SERIE
            ActiveSheet.Range("C" & i).Value = rs!TRAN_INDICE_CANAL
            ...
            rs.MoveNext
            i = i + 1
        Loop
    EDIT : Correction MoveFirst en MoveNext

  3. #3
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim L As Long
    L = 1
    While rs.EOF = False
        Cells(L, 1) = rs!champ1 'A1,A2.. en fonction de L
        Cells(L, 2) = "tu rigole?" 'j'ai besoin d'inserer entre certaine des colonnes de mon recordset
        Cells(L, 3) = rs!champ2 'c1,c2...en fonction de L
    rs.movenext
    Wend

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 69
    Par défaut
    Ca marche parfaitement, merci infiniment!

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

Discussions similaires

  1. [AC-97] VBA et manipulation de BDD avec requêtes SQL
    Par tuvia dans le forum VBA Access
    Réponses: 4
    Dernier message: 17/07/2012, 21h03
  2. [VBA/SQL] optimisation avec un recordset?
    Par herendel dans le forum Access
    Réponses: 1
    Dernier message: 28/04/2006, 19h20
  3. [VBA-A2003] Export d'un Recordset vers Excel, avec SQL statement
    Par Wanoo14 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/04/2006, 22h06
  4. [VBA]SQL dans Excel manipulation de données
    Par Deejoh dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/02/2006, 16h56
  5. Réponses: 7
    Dernier message: 26/07/2005, 16h41

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