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 :

Stocker et manipuler le Recordset en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut Stocker et manipuler le Recordset en VBA
    Bonjour, Bonsoir,

    Je viens de faire des recherches sur le Recordset sur votre forum mais je suis un peu perdu du faite que sa dépend des situations.

    J'aimerais si possible que vous regarder mon code, j'aimerais stocker les tables en mémoire pour par la suite les afficher sous excel et pouvoir les manipuler en mémoire.

    Voici mon Module de connexion :
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    Public Sub Connect()
        'Déclaration des variables
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim SQL, sBase As String
        Dim Ligne As Long
        'Instanciation des variables
        Set cn = New ADODB.Connection
        Set rs = New ADODB.Recordset
     
        'Module de classe
        Dim tkEMP As New tkEMP
     
        'On Error Resume Next
     
        'Nom de ma Base de donnée
        sBase = "BaseDeTest"
     
        'Connection à la Base de Donnée
        With cn
            .ConnectionString = "Provider=SQLOLEDB; driver={SQL Server};Server=localhost" & _
                ";UID=sa;Password=password;Database=" & sBase
            .Open
        End With
     
     
        SQL = "Select * From tkEMP Order by Secteur"
     
        'Set rs = cn.Execute(SQL) [Ancienne configuration de lecteur de la requete]
        'Connexion à la Base de Donnée et ouverture du RecordSet
        rs.Open SQL, cn
     
     
        'Remplissage du tableau RecordSet
        With tkEMP
                While Not rs.EOF
                    .Nom = rs.Fields("Nom").Value
                    .Prenom = rs.Fields("Prenom").Value
                    .Embauche = rs.Fields("Embauche").Value
                    .Titre = rs.Fields("Titre").Value
                    .Departement = rs.Fields("Departement").Value
                    .Salaire = rs.Fields("Salaire").Value
                    .Tx_Comm = rs.Fields("Tx_Comm").Value
                    .Secteur = rs.Fields("Secteur").Value
                    rs.MoveNext
                Wend
        End With
     
        Ligne = 2
     
        'Remplissage du Tableau Excel à partir des données récupéré précédemment
        With tkEMP
                While Not rs.EOF
                    Cells(Ligne, 1).Value = "X"
                    Cells(Ligne, 2).Value = .Nom
                    Cells(Ligne, 3).Value = .Prenom
                    Cells(Ligne, 4).Value = .Embauche
                    Cells(Ligne, 5).Value = .Titre
                    Cells(Ligne, 6).Value = .Departement
                    Cells(Ligne, 7).Value = .Salaire
                    Cells(Ligne, 8).Value = .Tx_Comm
                    Cells(Ligne, 9).Value = .Secteur
                    rs.MoveNext
                    Ligne = Ligne + 1
                Wend
        End With
     
        'Fermeture de la connection
        cn.Close
    End Sub
    Mon Module de Classe :
    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
     
    Option Explicit
     
    Public Nom As String
    Public Prenom As String
    Public Embauche As Date
    Public Titre As String
    Public Departement As Integer
    Public Salaire As Long
    Public Tx_Comm As Long
    Public Secteur As String
     
    Public Sub Flush()
    'Pas encore renseigné
     
    End Sub
    Merci beaucoup.

  2. #2
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    Bonjour

    regarde Ce Fil, j'ai fourni une macro complémentaire qui gere les fichiers Mdb (access)
    le code n'etant pas protégé, cela peut te donner un aperçu
    j'ai fait cette macro à l'aide du tutoriel ADO de ce forum

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Kikou,

    Merci beaucoup je vais regarder sa, j'ai également regarder le tuto mais j'ai un peu de mal a tout comprendre ^^

    Merci

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    le code suivant (à adapter à test besoins) te permet de lire ton recordset et de placer l'ensemble des données à l'endroit de ton choix dans to classeur.

    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
     
    Public Sub ReadFile(ByVal File As String)
        On Error GoTo ErrorHandler
     
        Dim cn          As New ADODB.Connection
        Dim rs          As New ADODB.Recordset
        Dim sConn       As String
        Dim SqlString   As String
        Dim FileName    As String
        Dim DSN_Name As String
        Dim Ws          As String 'Results Storing Worksheet name
        Dim Rg          As String 'results Cells top left
        Dim cellule     As Range
        Dim CompA       As Integer
     
     
        sConn = "provider=...."
        FileName = TonFichier
        Ws = TaFeuilleRésultat
        Rg = LeRangeDestinationDansWs
     
        'Open Connection
        cn.ConnectionString = sConn
        cn.Open
        SqlString = "SELECT * FROM " & FileName & ""
     
        'open record Set
        rs.Open SqlString, cn
     
        'Paste Fields names in line 1
        Set cellule = Worksheets(Ws).Range(Rg)
        For CompA = 0 To rs.Fields.Count - 1
            cellule.Offset(0, CompA).Value = rs.Fields(CompA).Name
        Next CompA
        'Paste results line above names
        Worksheets(Ws).Range(Rg).Offset(1, 0).CopyFromRecordset rs
        Set GetConnexion = cn
        rs.Close
        cn.Close
        Set cn = Nothing
        Set rs = Nothing
     
        Exit Sub
    ErrorHandler:
        ' clean up
        If Not cn Is Nothing Then
            If cn.State = adstateopen Then cn.Close
        End If
        Set cn = Nothing
        If Not rs Is Nothing Then
            If rs.State = adstateopen Then rs.Close
        End If
        If Err <> 0 Then
          MsgBox Err.Source & "-->" & Err.Description, , "Error"
        End If
     
    End Sub
    Bonne journée.

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut Wilfried,
    excellent ton code.

    Sais-tu s'il supporte Office 2003 ou uniquement 2007 ?

  6. #6
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    Bonjour Godzetla

    j'ai ecrit ce code sur excel xppro (2002) donc devrait logiquement fonctionner sur 2003, je ne l'ai pas testé sur 2007. Bien que j'ai cette version (à titre personnel), je continue à travailler sur la version 2002 pour des raisons de compatibilités.

  7. #7
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Voilà qui me convient parfaitement.

    Merci pour ta réponse.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Kikou tlm,

    Donc dans se que j'ai pu voir et tester, il remplit donc les colonnes automatique avec les données sur Excel.

    En faite se que je recherche c'est de tous enregistrer en mémoire, et de pouvoir les manipuler, par exemple en supprimer de la mémoire, ou autre chose le tous dans le recordset.

    Je sais pas trop si vous voyez un peu se que je veux dire ?

    Cordialement

  9. #9
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    re:

    d'apres je que j'en ai compris, le recordset est lié directement à la base de données, si tu supprimes dans le recordset, tu supprimes dans la table.

    solution possible mais je n'ai pas essayé creer une table virtuelle et transferer le recordset dans ta table, travailler dans cette table.

    maintenant une feuille excel en tant que table virtuelle à plusieurs avantages :
    1 les données deviennent visuelles
    2 l'utilisation possible des filtres automatiques
    3 L'utilisation de toutes les formules excel
    4 L'application de graphiques divers

  10. #10
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Re aussi,
    maintenant une feuille excel en tant que table virtuelle à plusieurs avantages
    Et rien ne t'empêche de cacher cette feuille si c'est cela qui te préoccupe.
    Et au niveau rapidité d'intégration, cela vaut la peine de le tenter

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    A d'accord,

    Dans se cas a quoi servent les modules de class :-s ?

    Car en faite je croyais que sa permettais de stocker les informations, mais en faite j'ai vue que le Recordset garde toutes les lignes en mémoire et qu'on peut donc travailler avec Recordset.

  12. #12
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    re:

    c'est ce que fait ma macro, si je te l'ai proposé ce n'est pas pour l'utiliser mais pour t'en inspirer.
    avancer dans un recordset avec ou sans filtre, reculer dans ce meme recordset, recuperer des infos d'un enreg du recordset. dans cette macro tu devrais pouvoir tout trouver pour creer tes propres tables virtuelles. tu as toutes les manip necessaires, la table complete et l'utilisation du SQL et meme si besoin la mise à jour de la table

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    re ^^

    D'accord merci beaucoup je vais travailler dessus

    Merci encore

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

Discussions similaires

  1. lire et manipuler un recordset en vba excel
    Par DIDIDIDA dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 24/01/2008, 16h26
  2. Manipulation d'entiers avec VBA
    Par C.R.E.A.M dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/07/2007, 09h28
  3. Réponses: 1
    Dernier message: 23/03/2007, 09h56
  4. Manipulation sur recordset
    Par dl_jarod dans le forum ASP
    Réponses: 12
    Dernier message: 25/10/2005, 10h32
  5. Manipulation de Recordset avec DAO
    Par Sinclar dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/09/2005, 20h19

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