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 :

Lire plusieurs plages de cellules avec la méthode ADO


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
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut Lire plusieurs plages de cellules avec la méthode ADO
    Bonjour, j'utilise la méthode ADO pour lire des plages de cellules.
    Voici un bout de 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
        Dim oCon As ADODB.Connection, oRst As ADODB.Recordset, oCmd As ADODB.Command, Recup As String
     
     
        Recup = "B77:B96"
        Set oCon = New ADODB.Connection
        With oCon
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0 ;Data Source=" & FichierChoisiPanier & _
                 ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
        FeuilPanier = FeuilPanier & "$"
        Set oCmd = New ADODB.Command
        With oCmd
            .ActiveConnection = oCon
            .CommandText = "SELECT * FROM [" & FeuilPanier & Recup & "]"
        End With
     
        Set oRst = New ADODB.Recordset
        oRst.Open oCmd, , adOpenKeyset, adLockOptimistic
        Set oRst = oCon.Execute("[" & FeuilPanier & Recup & "]")
     
           Workbooks("TP8.xlsm").Sheets(NomFeuil).Range("C10").CopyFromRecordset oRst
    le soucis c'est que je voudrais également lire les plages
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Range("D6").Value
    Range("B5").Value
    Range("B6:B9").Value:
    sans à chaque fois redéfinir la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set oCmd = New ADODB.Command
        Set oRst = New ADODB.Recordset
    En gros je voudrais savoir s'il est possible de raccourcir le code.

    Une Idée?
    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    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
        Dim oCon As ADODB.Connection, oRst As ADODB.Recordset, oCmd As ADODB.Command, Recup As String
        Dim Plages, C
        Plages = Array("B77:B96", "D6", "B5", "B6:B9")
     
        Set oCon = New ADODB.Connection
        With oCon
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0 ;Data Source=" & FichierChoisiPanier & _
                 ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
        FeuilPanier = FeuilPanier & "$"
        Set oCmd = New ADODB.Command
        For Each C In Plages
           Recup = C
           With oCmd
               .ActiveConnection = oCon
               .CommandText = "SELECT * FROM [" & FeuilPanier & Recup & "]"
           End With
     
           Set oRst = New ADODB.Recordset
           oRst.Open oCmd, , adOpenKeyset, adLockOptimistic
           Set oRst = oCon.Execute("[" & FeuilPanier & Recup & "]")
     
              Workbooks("TP8.xlsm").Sheets(NomFeuil).Range("C10").CopyFromRecordset oRst
        Next C
    Non testé, mais ça devrait presque le faire; il reste à modifier la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("TP8.xlsm").Sheets(NomFeuil).Range("C10").CopyFromRecordset oRst
    Ca dépend comment tu veux copier les plages de données, si tu as quelque chose dans la cellule C9...

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Effectivement c'est cette ligne qui cause problème, parce que je voudrais coller ces données dans différentes plages. Je peux par exemple mettre un compteur et poser une condition.
    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
     
     
    Plages = Array("B77:B96", "D6", "B5", "B6:B9")
    Dim n As Integer
    n=0
    For Each C In Plages
           Recup = C : n = n + 1
           With oCmd
               .ActiveConnection = oCon
               .CommandText = "SELECT * FROM [" & FeuilPanier & Recup & "]"
           End With
     
           Set oRst = New ADODB.Recordset
           oRst.Open oCmd, , adOpenKeyset, adLockOptimistic
           Set oRst = oCon.Execute("[" & FeuilPanier & Recup & "]")
     If n = 1 Then    Workbooks("TP8.xlsm").Sheets(NomFeuil).Range("C10").CopyFromRecordset    oRst
    If n = 2 Then Workbooks("TP8.xlsm").Sheets(NomFeuil).Range("F10").CopyFromRecordset    oRst
    .
    .
    .
        Next C
    Ou tu trouves qu'il y'a une autre solution?

    Avec la condition et le compteur j'ai ce que je veux. C'est déjà moins long que ce que j'ai préalablement écris.
    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Tu peux aussi tester la valeur de "C" (qui contient l'adresse de la plage cherchée).

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    ca marche! ca me permet d'avoir moins de variables, et c'est aussi plus sur.
    Merci

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

Discussions similaires

  1. [XL-2000] Selection d'une plage de cellule avec InputBox
    Par ferdi67 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/09/2009, 10h17
  2. Selection plusieurs plage de cellule
    Par Léponge85 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/06/2008, 17h04
  3. Pb de lecture données dans une plage de cellule avec itération
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/07/2006, 13h33
  4. [VBA-E] Copier une plage de cellules avec critère
    Par jfamiens dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 13/06/2006, 16h34

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