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 :

Intégrer une boucle dans une macro pour lire des données d'un fichier fermé [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Intégrer une boucle dans une macro pour lire des données d'un fichier fermé
    Bonjour,

    J'ai réalisé une macro qui récupère des données selon des conditions particulière dans un fichier en balayant une plage de cellule et qui les importe dans un autre fichier excel.(cette macro ne fonctionne que si le fichier source est ouvert).

    le fichier source étant fermé je me suis renseigné sur comment importer des données d'un fichier fermé notamment grâce au tuto de silkyroad

    j'ai essayé d'intégrer ma macro de récup de données à la macro pour lire les données d'un fichier fermé mais je n'y arrive pas.

    Quelqu'un a t'il une idée sur comment faire pour intégrer ma première macro à la macro de lecture d'un fichier fermé ?

    Merci pour les réponses

    Voici la macro de récupération de données
    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
     
     
    '----------------------------macro récup des données-----------------'
    Dim i As Integer    'variable de balayage Colonnes Dans le fichier source
    Dim j As Integer    'variable de balayage lignes Dans le fichier source
    Dim CAE As String   'contient la CAE du fichier source
    Dim n As Integer    'position de l'underscore dans la CAE
    Dim k As Integer    'variable d'incrémentation pour écrire les CAEs dans le fichier de destination
     
     
    Sub recuperation_données()
    '
    '-----------------------feuille 1------------------------------------'
    '
     
     
        k = 3                       'démarrage de l'inscription des données dans source.xlsx à la ligne 3 *
     
        For i = 14 To 21            'balayage colonnes *
            For j = 38 To 190       'balayage lignes *
                CAE = Workbooks("source.xlsx").Sheets("ND").Cells(j, i)         '
                n = InStr(CAE, Chr(95))             'recherche de "_ (underscore)"
                If (n <> 0) Then            's'il y a un underscore alors la donnée du classeur FTA est copié dans le classeur "destination" 
                    Workbooks("destination.xlsm").Sheets("Feuil1").Cells(k, 2) = CAE
                    k = k + 1
                End If
            Next j
        Next i
     
    End Sub
    Voici la macro pour récupérer des données dans un fichier fermé

    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
     
    Sub extractionValeurCelluleClasseurFerme()
        Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Cellule As String, Feuille As String
     
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "B20:B20"
     
        Feuille = "ND$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = "C:\Users\duheml\Documents\Test_destination_source\source.xlsx"
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=No;"";"
     
        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
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Range("A2").CopyFromRecordset Rst
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
    End Sub

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 055
    Points : 2 518
    Points
    2 518
    Par défaut
    Bonjour

    Plutôt que de passer par une macro, avez-vous essayé de récupérer vos données via le menu Données/Obtenir des données/A partir d'un fichier/A partir d'un classeur Excel ?
    L'outil s'appelle "Power Query", c'est très puissant/dynamique/rapide/ et à mon sens beaucoup plus pertinent que des macros pour votre besoin.
    Vous trouverez des tutos facilement sur ce site ou ailleurs sur le web.
    A titre personnel, mon usage des macros a très fortement diminué ces dernières années en utilisant les nombreuses possibilités de Power Query.

    Stéphane

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je ne peux qu'appuyer Stéphane (Hello ) sur l'utilisation de Power Query. L'outil est pile poil taillé pour réaliser ce que tu souhaites mettre en place, sans aucune ligne de code.

    De plus, il faut casser le mythe de la lecture dans un classeur fermé, car c'est tout simplement impossible de lire dans un classeur fermé. Lire dans un classeur "qui n'a pas été ouvert par Excel" est possible, mais le classeur dans lequel tu récupères les données est ouvert par la connexion ADODB. Ca veut dire que les mécanismes de verrou sur les fichiers ouverts sont opérationnels, surtout pour des fichiers Excel.

    Lire dans un classeur fermé t'oblige à manipuler des "vrais" concepts informatiques liés à la gestion des données, et notamment un minimum de langage SQL. Dès lors, je comprends mal pourquoi se compliquer la vie par rapport au fait d'ouvrir le classeur, d'y puiser des données puis de le fermer. Ca permet d'aller à l'essentiel sans se taper l'apprentissage du sql et de ADODB.

    C'est juste mon point de vue, et tu en fais ce que tu veux, mais tu as en gros trois chemins (PQ, VBA classeur ouvert et VBA/ADODB classeur "fermé") et tu as choisi le plus compliqué.

    Chacun sa route, chacun son chemin
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Bonjour stephane et merci pour la réponse

    Citation Envoyé par Raccourcix Voir le message
    Bonjour

    Plutôt que de passer par une macro, avez-vous essayé de récupérer vos données via le menu Données/Obtenir des données/A partir d'un fichier/A partir d'un classeur Excel ?

    Stéphane
    Je pense être obligé de passer par une macro car le fichier source utilisé pour remplir mon fichier ne sera jamais le même selon les personnes qui l'utilise dans l'entreprise ou je fais mon stage. le lien entre mon fichier de récupération et le fichier change donc souvent. mais je vais tout de même regardé s'il est possible de faire ca avec power query je vais me renseigner je ne connaissais pas cet outil

    merci beaucoup

    louis

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    salut

    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Je ne peux qu'appuyer Stéphane (Hello ) sur l'utilisation de Power Query. L'outil est pile poil taillé pour réaliser ce que tu souhaites mettre en place, sans aucune ligne de code.
    ...
    C'est juste mon point de vue, et tu en fais ce que tu veux, mais tu as en gros trois chemins (PQ, VBA classeur ouvert et VBA/ADODB classeur "fermé") et tu as choisi le plus compliqué.

    Chacun sa route, chacun son chemin

    oui en effet je sais que cela est compliqué et j'avais réussi a lire les données avec le fichier ouvert(visible par l'utilisateur) et pour que ce soit plus propre je voulais qu'on ne voit pas le fichier source à l'écran

    merci pour la réponse.

    Louis

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par louisapt Voir le message
    Bonjour stephane et merci pour la réponse



    Je pense être obligé de passer par une macro car le fichier source utilisé pour remplir mon fichier ne sera jamais le même selon les personnes qui l'utilise dans l'entreprise ou je fais mon stage.[...]
    Dans ce billet, j'explique comment tu peux modifier le chemin du fichier source via une cellule Excel dans Power Query

    Mes billets sur Power Query
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2021
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Solution partielle
    Bonjour,

    Pour tous ceux qui pourrais tomber sur cette discussion en voici le dénouement.
    Je n'ai pas réussi à sortir les données d'un fichier fermé mais je vous propose les lignes de codes suivante qui permettent d'ouvrir un fichier pour récupérer ses données sans que cela ne soit trop génant pour l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub récupération_données()
     
    Application.DisplayAlerts = False                         'permet de désactiver les alertes si nécessaire
     
    Workbooks.Open (Chemin_fichier_source)           'ouvre le fichier source
    ActiveWindow.WindowState = xlMinimized           'réduit la fenêtre pour laisser le fichier source en "arrière plan" 
     
    '--------- le code -----------'
     
    Application.DisplayAlerts = True    'réactive les alertes si désactivées précédemment
     
    End Sub
    J'espère que cette solution (même si elle ne répond pas exactement à ma question de départ) pourra en satisfaire certain

    louis

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/07/2018, 14h01
  2. Réponses: 1
    Dernier message: 15/06/2017, 16h14
  3. Une macro pour supprimer des lignes dans un message
    Par blade2a dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 26/06/2012, 01h26
  4. [XL-2007] Créer une macro pour supprimer des onglets dans un autre classeur
    Par nicosd54 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/03/2011, 10h01
  5. éélaboration d'une macro pour importation de donnée dans excel 2003
    Par wuging dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/09/2010, 08h33

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