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 :

Recuperation de valeurs dans un classeur fermé


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut Recuperation de valeurs dans un classeur fermé
    Bonjour, je vais tenter d'expliquer clairement... voila, je lance deux requêtes SQL dont j'exporte les résultats dans deux classeurs Excel différents. Dans un troisième classeur, dans lequel j'ai mon script qui est placé, j'aimerais importer des resultats des deux classeurs d'origine. Ce que j'aimerais, c'est qu'on ait juste à lancer le troisième classeur qui irait dés l'ouverture chercher toutes les infos dans les deux autres classeurs.

    J'ai essayé de jouer avec les Workbooks Activate, mais ça necessite qu'ils soient déja ouverts, j'ai cherché un moment, j'ai pas trouvé une explication claire de comment ouvrir un classeur, copier les données dans un autre classeur, puis fermer le premier classeur...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    SilkyRoad nous a fait une superbe Tuto dessus, tu le trouveras ici.

    Starec

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    T'as pas cherché dans la FAQ, c'est pas bien !
    Regarde ici, SilkyRoad explique ça très bien
    A+

    Grillé par startreck mais pas de beaucoup

  4. #4
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Merci bien de ces infos...alors j'ai appliqué ce sript :

    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
    Sub TestConnection_V2()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
     
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\NicolasHanot\TOT.xls"
     
        Set Cn = New ADODB.Connection
     
        With Cn
            .Provider = "MSDASQL"
            .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
                "DBQ=" & Fichier & "; ReadOnly=False;"
            .Open
        End With
     
        '
        '... la requête ...
        '
     
        '--- Fermeture connection ---
        Cn.Close
        Set Cn = Nothing
    End Sub
    Mais il me renvoie une erreur qui me dit "la table externe n'est pas dans le format attendu" :s... J'ai essayé avec OLE DB Microsoft Jet et OLE DB pour pilotes ODBC, il me renvoie la même erreur...je comprend pas

  5. #5
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Toujours bloqué sur le même problème, j'ai regardé en faisant le debug, il bloque sur le .open, je rappelle le message d'erreur : "La table externe n'est pas dans le format attendu", j'ai tout vérifié, le chemin d'accès tout ça...c'est bien le bon...

    Help Please !!!

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    Est ce que tu as essayé avec d'autres classeurs?


    michel

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Oui, et ça dépend des fichiers, il y en a certains ou il me met le message et d'autres, ou il me met rien, de toute façon, je pense que je pourrais me rendre compte réellement de si ça marche ou non uniquement quand j'aurais mis des requêtes...

    Mais le souci, c'est que c'est sur les fichiers que je dois exploiter qu'il me met ce message d'erreur, et pourtant ils sont bien au format .xls, est ce que le fait que ce soient des requêtes SQL que j'enregistre au format xls change quelquechose, parceque j'ai l'impression que les fichiers que je crée manuellement ne posent pas de problèmes...et quand j'enregistre les requêtes, il me le fait comme ça : PALL.XLS, je pense pas que ça change grand chose...

    Ce que je vais faire, je vais déja essayer de faire des requêtes sur les fichiers qui ne semblent pas poser de problèmes et je reviendrai après, on y verra sans doûte déja plus clair.

  8. #8
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Bon, après des tests sur des classeurs Excel créés directement, il se revele que ça marche très bien...donc le souci, c'est qu'il n'aime pas les fichiers Excel dans lesquels j'ai sauvegardé les résultats de mes requêtes SQL.

    Quand je sauvegarde mes requêtes, j'utilise ObQuery, je fais "save" puis je choisis l'emplacement et le format, je tape par exemple "tot.xls". Le fichier lui s'enregistre sous cette forme : "TOT.XLS"... donc déja, est ce que ce serait pas ça qui pose problème ?

  9. #9
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Oups, je rajoute le script dans l'etat ou il est actuellement :

    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
    Sub TestConnection_V2()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim texte_SQL As String
        Dim Rst As ADODB.Recordset
        Dim NomFeuille As String
     
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\NicolasHanot\TOT.XLS"
        NomFeuille = "TOT"
        Set Cn = New ADODB.Connection
     
        With Cn
            .Provider = "MSDASQL"
            .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
                "DBQ=" & Fichier & "; ReadOnly=False;"
            .Open
        End With
     
        'Définit la requête.
        '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
        texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
        'Ecrit le résultat de la requête dans la cellule A2
        Sheets("copie").Range("A1").CopyFromRecordset Rst
     
     
        '--- Fermeture connection ---
        Cn.Close
        Set Cn = Nothing
    End Sub
    J'ai essayé en mettant tot.xls, TOT.xls, TOT.XLS, et j'ai même changé Driver={Microsoft Excel Driver (*.XLS) mais y a rien à faire, il veut pas...

    Une idée lumineuse ?

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    rebonjour

    ça va être dificile sans voir ton classeur

    michel

  11. #11
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Voila à quoi ressemble le résultat de ma requête

    TOT.XLS

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    rebonjour

    Il ne s'agit pas d'un classeur Excel mais d'un fichier texte renommé ...

    tu peux essayer ce type de procédure pour faire une requête dans le fichier:

    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
    Sub Test()
    ImportText "C:\Documents and Settings\dossier\TOT.xls", Range("A1")
    End Sub
     
    Sub ImportText(NomFichier As Variant, Cible As Range)
        Dim QT As QueryTable
     
        Set QT = ActiveSheet.QueryTables.Add(Connection:="TEXT;" & _
            NomFichier, Destination:=Cible)
     
        With QT
            'Définit les séparateur de colonnes dans le fichier txt
            .TextFileOtherDelimiter = vbTab
            .TextFileSemicolonDelimiter = True
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .Refresh
        End With
    End Sub


    une autre méthode:

    http://excel.developpez.com/sources/...mportRecordset



    michel

  13. #13
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup de ces infos, ça marche enfin, ce que je fais, j'importe le texte et ensuite je manipule les chaines de caracteres et change le format des cellules pour que les valeurs soient exploitables...c'est un peu de la bidouille mais au moins ça marche !

    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
    Sub GetCol()
    Dim strPath As String
    Dim strTable As String
    Dim strFolder As String
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim i As Integer
    i = 2
    strPath = "c:\NicolasHanot\tot.txt"
    strTable = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
    strFolder = Left(strPath, InStrRev(strPath, "\") - 1)
     
    Set db = DAO.OpenDatabase(strFolder, False, False, _
        "Text;Database=" & strFolder & ";HDR=NO;Table=" & strTable)
    ' F1 = Field numéro 1
    Set rs = db.OpenRecordset("SELECT F1 FROM [" & strTable & "]", DAO.dbOpenSnapshot, _
        DAO.dbReadOnly, DAO.dbReadOnly)
     
    ActiveSheet.Range("A2").CopyFromRecordset rs
     
    Set rs = Nothing
    Set db = Nothing
     
        Range("B2").Select
    Application.WindowState = xlMinimized
    Do While Cells(i, 1).Value > 0
     
    Cells(i, 2).Value = Left(Cells(i, 1), 10)
    Cells(i, 2).NumberFormat = "m/d/yyyy"
    Cells(i, 3).Value = Mid(Cells(i, 1), 11, 9)
    Cells(i, 3).NumberFormat = "h:mm;@"
    Cells(i, 4).Value = Mid(Cells(i, 1), 20, 4)
    Cells(i, 4).NumberFormat = "0"
     
     
    i = i + 1
     
    Loop
     
    End Sub

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

Discussions similaires

  1. [XL-2010] Recherche de valeur dans un classeur fermé
    Par Kutoh dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/08/2013, 07h13
  2. [XL-2007] Recherche valeur cellule dans plusieurs classeurs fermés
    Par Millenniums dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/04/2011, 20h32
  3. [XL-2003] recuperation de donnee dans un classeur fermé
    Par revemane dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/10/2009, 20h43
  4. [ Struts ] recuperer une valeur dans une url?
    Par njac dans le forum Struts 1
    Réponses: 2
    Dernier message: 02/06/2004, 14h24
  5. [C#] Recuperation de valeur dans une autre page
    Par kenzo080 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 02/06/2004, 10h32

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