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 :

Extraction donées fichier fermé avec critères


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Extraction donées fichier fermé avec critères
    Bonjour,
    Après avoir fait plusieurs recherches, je n'arrive tjs pas à réssoudre mon problème.
    Je sui débutant en vba pour excel 2000, alors les chhoses sont un peu diffciles.

    Pour faire simple, j'ai un classeurs excel2000 qui fait 10 MO nommé BDD, cette base est composé des dix feuilles.
    L'objectif est de pouvoir exploiter BDD dans un autre classeurs nommé EXPLT sans ouvrir BDD.
    En ft, à partir de 5 critères du classeurs EXPLT, je souhaiterai récuperer automatiquement les données en question à chaque fois que les crtières changeront, sachant que mes 5 critères sont des listes déroulantes, .

    Merci de votre aide
    Cordialement

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Re,

    Un exemple simple a adapter, le resultat sera en A1 de la feuille active:
    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
    Sub TestClasseurFerme()
        Dim Cn As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim Fichier As String, Feuille As String, ReqSQL As String
     
        Fichier = ThisWorkbook.Path & "\NomDuClasseurBDD.xls"
        Feuille = "NomDeLaFeuilleDansBDD"
     
        Set Cn = New ADODB.Connection
        Cn.Open "Provider = Microsoft.Jet.OLEDB.4.0;data source=" & Fichier & ";extended properties=""Excel 8.0;HDR=Yes"""
     
        ReqSQL = "SELECT Champ1, Champ2 FROM [" & Feuille & "$] WHERE Champ3='TonCritere'"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(ReqSQL)
     
        Range("A1").CopyFromRecordset Rst
     
        Set Rst = Nothing
        Cn.Close
        Set Cn = Nothing
    End Sub

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Re
    dsl pour le retard, je viens de testé l'exemple et il me met erreur d'éxécution '2147467259(8000 4005), erreur Automation, errreur non spécifiée

    Code adapter
    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
    Sub TestClasseurFerme2()
        Dim Cn As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim Fichier As String, Feuille As String, ReqSQL As String
     
        Fichier = ThisWorkbook.Path & "E:\BAGNEUXTEST.xls.xls"
        Feuille = "Feuil1$"
     
        Set Cn = New ADODB.Connection
        Cn.Open "Provider = Microsoft.Jet.OLEDB.4.0;data source=" & Fichier & ";extended properties=""Excel 8.0;HDR=Yes"""
     
        ReqSQL = "SELECT Champ1, Champ2 FROM [" & Feuille & "$] WHERE Champ3='BAGNEUX'"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(ReqSQL)
     
        Range("A1").CopyFromRecordset Rst
     
        Set Rst = Nothing
        Cn.Close
        Set Cn = Nothing
    End Sub

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Il y a un $ en trop.

    Soit tu l'enleves icisoit ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReqSQL = "SELECT Champ1, Champ2 FROM [" & Feuille & "$] WHERE Champ3='BAGNEUX'"
    Champ1, Champ2 doivent correspondre aux vrais entetes de colonnes de ta BDD

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    après teste sa ne marche pas tjs et c'est la meme erreur,
    alors j'ai pris mon ancien code qui me permeter de prendre de récuperer les données en brut sans critères et j'ai essaye de l'adapter avec le tiens mais il me "objet requis"

    voici le code, avec la partie adapter en rouge
    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
        'Création de la procédure, ici "Sub" est une routine
        Sub extractionValeurCelluleClasseurFerme()
    
        'Déclaration des variable faisant appellent à la bibliothèque ADOBB
        Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim ADOCommand As ADODB.Command
        'Déclaration des variable "Fichier,Cellule,Feuille comme étant des chaines de charactères
        Dim Fichier As String, Cellule As String, Feuille As String
       
        'instanciation de la variable Feuille; n'oubliez pas d'ajouter $ au nom de la feuille du fichier fermé.
        Feuille = "Feuil1$"
        
        'Chemin complet du classeur fermé
        Fichier = "E:\BAGNEUXTEST.xls"
        'Connection avec le fichier fermé
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"";"
    'adaptation de ton code
    'Set Cn = New ADODB.Connection
    'Cn.Open "Provider = Microsoft.Jet.OLEDB.4.0;data source=" & Fichier & ";extended properties=""Excel 8.0;HDR=Yes"";"
    ReqSQL = "SELECT CENTRE='BAGNEUX', PS='MASS' FROM [" & Feuille & "] WHERE Date='2008-12-10'"
    Set Rst = New ADODB.Recordset
    Set Rst = Cn.Execute(ReqSQL)
            
        'Adresse de la cellule contenant la donnée à récupérer
        'Cellule = "B4:B4"
        'Pour une plage de cellules, utilisez:
        Cellule = "a1000:ae3000"
            
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
        
    
        'La méthode CopyFromRecordset permet d'afficher le résultat
        'du Recordset dans la feuille de calcul, à partir de la cellule spécifiée
        Worksheets("Feuil3").Range("A1").CopyFromRecordset Rst
            
        'Met à jour la valeur du "Champ4" si le "Champ2" correspond à la variable "leNom" ; ça ne marche pas
        'RstSQL = "UPDATE [Worksheets(Feuil3)]SET " & _
            "A7 = " & 2 & " WHERE A7 = '" & A & "'"
      
        'Exécution de la requête
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
                
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    End Sub
    Merci

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Re,

    J'ai fait du menage dans ton code parceque ca par dans tous les sens:
    Ci joint une adaptation a ton cas.

    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
    Option Explicit
     
    'Création de la procédure, ici "Sub" est une routine
    Sub extractionValeurCelluleClasseurFerme()
        'Déclaration des variable faisant appellent à la bibliothèque ADOBB
        Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        'Déclaration des variable "Fichier,Cellule,Feuille comme étant des chaines de charactères
        Dim Fichier As String, Cellule As String, Feuille As String, ReqSql As String
     
        'instanciation de la variable Feuille; n'oubliez pas d'ajouter $ au nom de la feuille du fichier fermé.
        Feuille = "Feuil1$"
     
        'Chemin complet du classeur fermé
        Fichier = "E:\BAGNEUXTEST.xls"
        'Connection avec le fichier fermé
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"";"
     
        ReqSql = "SELECT CENTRE, PS FROM [" & Feuille & "] WHERE CENTRE='BAGNEUX' AND PS='MASSY-B' AND Date='2008-12-10'"
        Set Rst = New ADODB.Recordset
        Set Rst = Source.Execute(ReqSql)
     
        Worksheets("Feuil3").Range("A1").CopyFromRecordset Rst
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
    End Sub
    Attention a ton instruction SQL qui etait fausse.
    Et l'execution du SQL qui ce faisait sur une connexion non declaree (cn)

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    MERCIiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
    Sa marche trop bien
    merci

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Oh mince, ya encore quelques détails
    Tout d'abord merci encore une fois.
    Citation Envoyé par benexcel2000 Voir le message
    MERCIiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
    Sa marche trop bien
    merci
    j'ai recompilé et il me donne que le nom du centre et du PS
    IL ne me donne ni la date ni le reste de données qui répondent aux critères.

    DONC j'aurai voulu qu'à partir de ces trois critères il me récupère tous les données repondant aux 3 critères, c'est à dire tous les autres cellules auxquelles, on a le critère1,2 et 3.

    merci

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Salut,

    Il faut maintenant construire ta requete SQL pour quelle te retourne les champs et valeurs que tu desires.

    Tout ce qu'il y a entre SELECT et FROM sont les champs recuperes et tout ce qu'il y a apres
    le WHERE les criteres.

  10. #10
    Futur Membre du Club
    Inscrit en
    Février 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    OK sa marche bien

    Merci

Discussions similaires

  1. [XL-2007] Extraction données fichiers fermées avec notion de Date (VBA)
    Par romainarequipa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/01/2015, 07h45
  2. [XL-2007] Lecture/écriture sur des fichiers fermés avec critères
    Par webisfun dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/03/2012, 10h41
  3. Extraction lignes fichier texte avec talend
    Par tomasi dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 09/02/2011, 17h22
  4. Réponses: 2
    Dernier message: 13/11/2009, 13h57
  5. Réponses: 8
    Dernier message: 27/04/2008, 15h27

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