[VBA] data from closed file

Bonjour,

Je cherche à acceder à un classeur et récupérer des données sans l'ouvrir.

Cependant une partie de ces données sont des résultats suite à des formules.

J'ai récupere ce bout de code présent sur un site :

Sub RequeteClasseurFerme()

Dim Cn As ADODB.Connection

Dim Fichier As String

Dim NomFeuille As String, texte_SQL As String

Dim Rst As ADODB.Recordset

'Définit le classeur fermé servant de base de données

Fichier = "C:\monClasseurBase.xls"

'Nom de la feuille dans le classeur fermé

NomFeuille = "Feuil1"

Set Cn = New ADODB.Connection

'--- Connection ---

With Cn

.Provider = "Microsoft.Jet.OLEDB.4.0"

.ConnectionString = "Data Source=" & Fichier & _

";Extended Properties=Excel 8.0;"

.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

Range("A2").CopyFromRecordset Rst

'--- Fermeture connexion ---

Cn.Close

Set Cn = Nothing

End Sub

Cela fonctionne, cependant je n'arrive pas à récuperer les valeurs des formules, cela me remonte du vide.

Merci de votre aide.

Bonjour,

As-tu des fichiers représentatifs pour fin de tests ?

Il doit y avoir quelque chose qui coince.

ric

J'ai test avec un des fichiers sources en xlsm, cependant ce format n'est pas pris en compte...

capture

Bonjour,

'--- Connection ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
'-----------------

ric

Bonjour,

J'ai réussi à faire fonctionner la macro, cepedant il me reste un soucis.

Les données sont au format texte et non au format nombre, ce qui entraine un pb d'affichage. Est-ce qu'il y a un paramètre à modifier pour récupérer les data au format nombre ?

Merci

Bonjour,

Avec les importations de toutes sortes, l'on se retrouve souvent avec des données en format texte.

On peut les convertir manuellement en appliquant un format sur la plage et à convertissant les données ( menu Données > Outils de données > Convertir ).

L'on peut aussi le faire via macro. Il y a des tonnes d'exemples sur ce forum.

Si tu fournis un fichier exemple et mentionnes quel format est souhaité pour les colonnes à convertir, je peux aider à composer une macro qu'il restera à appeler à la fin du code d'importation.

ric

Bojour,

J'ai réussi finalement, en ajoutant dans la macro l'application d'un "format" sur ma feuille.

Pour eviter l'ouverture d'un autre sujet, je continu sur celui là.

Ma question est la suivante : est-il possible d'utiliser la fontion qui "Défini une zone d'impression" sur une même page A4.

Je m'explique, j'ai une feuille Excel avec plusieus zone que je dois imprimer, est-ce possible des les concactener sur une seule feuille A4 ? Car à ce jour chaque zone d'impression que l'on défini l'ajoute sur une nouvelle feuille A4...

En pratique j'ai sur ma feuilel Excel j'ai des données de la colonne A à la colonne X

Je dois imprimer de A:C à Q:X

Un avis, VBA ?

Bonjour,

Un essai ... en 2 versions : Portrait ou Paysage ...

Il y aura la longueur de la plage à adapter ...

Sub impressionPortrait()

    Columns("D:P").Select
    Selection.EntireColumn.Hidden = True
    Range("A1:X23").Select          ' <<< ajuster la plage
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    Application.PrintCommunication = True
    ActiveWindow.SelectedSheets.PrintOut Copies:=1

    Columns("D:P").Select
    Selection.EntireColumn.Hidden = False
    Range("A1").Select
End Sub

Sub impressionPaysage()

    Columns("D:P").Select
    Selection.EntireColumn.Hidden = True
    Range("A1:X23").Select          ' <<< ajuster la plage
    Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA4
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    Application.PrintCommunication = True
    ActiveWindow.SelectedSheets.PrintOut Copies:=1

    Columns("D:P").Select
    Selection.EntireColumn.Hidden = False
    Range("A1").Select
End Sub

ric

Rechercher des sujets similaires à "vba data closed file"