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 :

Commande VBa pour importer des données de nouveaux classeurs d'un dossier


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut Commande VBa pour importer des données de nouveaux classeurs d'un dossier
    Bonjour,

    Je suis nouveau sur ce forum mais cela fait déjà un moment que je viens lire certaines discussions qui me sont toujours très utiles. C'est donc pour cela que j'implore votre savoir faire pour mon problème qui est le suivant:

    Le but de la macro est d'importer une plage de données provenant de chaque classeur d'un dossier dans un nouveau classeur.

    Dans ce nouveau classeur, le souhait est d'avoir une feuille par plage de données prélevées dans chaque classeur du dossier. Ces feuilles doivent porter le nom du classeur d'où proviennent les données.

    Il faudrait également qu'à chaque lancement de ce nouveau classeur il vérifie si de nouveaux classeurs ont été importés dans le dossier. Si c'est le cas, il faut qu'il importe une plage de données de ce classeur dans une nouvelle feuille portant son nom.

    Je ne sais pas si j'ai été clair mais en tout cas j'ai fait tout mon possible pour l'être.
    J'ai vraiment besoin d'aide car mon niveau de connaissances en VBa est trop faible pour réussir à réaliser une telle macro.

    Merci d'avance pour votre aide.
    Cordialement

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    La plage de données est-elle la même pour chaque classeur ? Les feuilles contenant le s données à importer ont-elles le même nom ? lequel ? A titre d'exemple :

    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
    Sub Import()
        Dim Chemin As String, Fich As String, Plage As String, NomFeuille As String
        Dim Teste As Boolean, Sh As Worksheet
        Chemin = "c:\temp"     '*** à modifier
        Plage = "A1:L100"     '*** à modifier
        NomFeuille = "Feuil1"     '*** à modifier
        Fich = Dir(Chemin & "\*.xls*")
        Do While Fich <> ""
            Teste = False
            For Each Sh In ThisWorkbook.Worksheets
                If Sh.Name = Fich Then
                    Teste = True
                    Exit For
                End If
            Next Sh
            If Teste = False Then
                Sheets.Add.Name = Fich
                Workbooks.Open Chemin & "\" & Fich
                Sheets(NomFeuille).Range(Plage).Copy
                ThisWorkbook.Sheets(Fich).[A1].PasteSpecial xlPasteValues
                ActiveWorkbook.Close False
            End If
        Fich = Dir
        Loop
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bonjour et tout dabord merci pour la rapidité de votre réponse!

    La plage de données est effectivement la meme pour chaque classeur (A3:G57) et les feuilles comportant les données ont le meme nom : Emissions (g)

    Merci pour l'attention que vous portez à ma requète.
    Cordialement

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Dans un module standard :

    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
    Sub Import()
        Dim Chemin As String, Fich As String, Plage As String, NomFeuille As String
        Dim Teste As Boolean, Sh As Worksheet
        Chemin = "c:\temp"     '*** à modifier
        Plage = "A3:G57"     '*** à modifier
        NomFeuille = "Emissions (g)"     '*** à modifier
        Fich = Dir(Chemin & "\*.xls*")
        Do While Fich <> ""
            Teste = False
            For Each Sh In ThisWorkbook.Worksheets
                If Sh.Name = Fich Then
                    Teste = True
                    Exit For
                End If
            Next Sh
            If Teste = False Then
                Sheets.Add.Name = Fich
                Workbooks.Open Chemin & "\" & Fich
                Sheets(NomFeuille).Range(Plage).Copy
                ThisWorkbook.Sheets(Fich).[A1].PasteSpecial xlPasteValues
                ActiveWorkbook.Close False
            End If
        Fich = Dir
        Loop
    End Sub
    Tu dois modifier la ligne 4 pour indiquer le chemin de ton dossier.

    Dans le module "ThisWorkbook", colle la macro :

    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
    Private Sub Workbook_Open()
        Dim Chemin As String, Fich As String, Plage As String, NomFeuille As String
        Dim Teste As Boolean, Sh As Worksheet
        Chemin = "c:\temp"     '*** à modifier
        Plage = "A3:G57"     '*** à modifier
        NomFeuille = "Emissions (g)"     '*** à modifier
        Fich = Dir(Chemin & "\*.xls*")
        Do While Fich <> ""
            Teste = False
            For Each Sh In ThisWorkbook.Worksheets
                If Sh.Name = Fich Then
                    Teste = True
                    Exit For
                End If
            Next Sh
            If Teste = False Then
                Sheets.Add.Name = Fich
                Workbooks.Open Chemin & "\" & Fich
                Sheets(NomFeuille).Range(Plage).Copy
                ThisWorkbook.Sheets(Fich).[A1].PasteSpecial xlPasteValues
                ActiveWorkbook.Close False
            End If
        Fich = Dir
        Loop
    End Sub
    Tu dois modifier la même ligne. Grâce à cette seconde macro, à l'ouverture du classeur le code ira vérifier la présence de nouveaux classeurs.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Ok super merci!

    Mais le problème c'est que j'ai un message d'erreur lorsque je lance la macro...

    Je vous joins une capture d'écran de l'erreur.

    Merci

    Cordialement
    Images attachées Images attachées  

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Ce qui pose un problème si tu as des noms de fichiers de plus de 31 caractères, même si l'on ne tient pas compte de l'extension (.xls). Si l'on tronque les noms à 31 caractères, ne risque-t-il pas d'y avoir des doublons ? dans ce cas, comment les traiter ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Effectivement le problème venait bien de la taille du nom de mon fichier (52 caractères sans l'extension).

    Si l'on tronque les noms à 31 caractères il n'y aura aucun problème de doublons.

    Merci pour votre aide !

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    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
    Sub Import()
        Dim Chemin As String, Fich As String, Plage As String, NomFeuille As String
        Dim Teste As Boolean, Sh As Worksheet
        Chemin = "c:\temp"     '*** à modifier
        Plage = "A3:G57"     '*** à modifier
        NomFeuille = "Emissions (g)"     '*** à modifier
        Fich = Dir(Chemin & "\*.xls*")
        Do While Fich <> ""
            Teste = False
            For Each Sh In ThisWorkbook.Worksheets
                If Sh.Name = Left(Fich, 31) Then
                    Teste = True
                    Exit For
                End If
            Next Sh
            If Teste = False Then
                Sheets.Add.Name = Left(Fich, 31)
                Workbooks.Open Chemin & "\" & Fich
                Sheets(NomFeuille).Range(Plage).Copy
                ThisWorkbook.Sheets(Fich).[A1].PasteSpecial xlPasteValues
                ActiveWorkbook.Close False
            End If
        Fich = Dir
        Loop
    End Sub

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Super ca marche !!!

    Merci beaucoup Daniel !!!

    Bonjour,

    Je me suis rendu compte qu'il fallait aussi que je fasse la meme chose avec les fichiers contenu dans les sous dossiers.

    Pourriez vous m'aider à trouver la solution ?


    Merci.

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Essaie comme ceci (non testé) :

    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 Import()
        Dim Chemin As String, Fich As String, Plage As String, NomFeuille As String
        Dim Teste As Boolean, Sh As Worksheet
        Chemin = "c:\temp"     '*** à modifier
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set dossier_racine = fso.getfolder(Chemin)
        SousDossiers dossier_racine
    End Sub
     
    Sub SousDossiers(dossier)
        Plage = "A3:G57"     '*** à modifier
        NomFeuille = "Emissions (g)"     '*** à modifier
        For Each d In dossier.SubFolders
          SousDossiers d
        Next
        For Each f In dossier.Files
            If IsNumeric(InStr(1, f.Name, "xls")) Then
                Teste = False
                For Each Sh In ThisWorkbook.Worksheets
                    If Sh.Name = Left(f.Name, 31) Then
                        Teste = True
                        Exit For
                    End If
                Next Sh
                If Teste = False Then
                    Sheets.Add.Name = Left(f.Name, 31)
                    Workbooks.Open f
                    Sheets(NomFeuille).Range(Plage).Copy
                    ThisWorkbook.Sheets(Left(f.Name, 31)).[A1].PasteSpecial xlPasteValues
                    ActiveWorkbook.Close False
                End If
            End If
        Next
    End Sub

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Ca marche ! Une fois de plus merci !

    J'avais juste oublié de préciser que la macro ne doit ouvrir que les fichiers excel qui ont un nom où l'on peut trouver le texte "StandardReport".

    Par exemple les fichiers de types: "*StandardReport*.xls*"

    Pourriez-vous m'aider à réaliser cela ?

    Merci

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Hmm... C'était presque bon.Remplace la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNumeric(InStr(1, f.Name, "xls")) Then
    par la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(1, f.Name, "StandardReport") > 0 And InStr(1, f.Name, "xls") > 0 Then

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Super !!!

    Je ne sais comment vous remercier !!!


    Sans vous je n'y serai jamais arrivé...

    En tout cas je suis fier de l'entraide présente sur le net et j'éspère que le partage des savoirs y perdurera !


    Merci encore

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Merci du retour. Marque la discussion comme résolue, ça aidera ceux qui cherchent dans les archives du forum.

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

Discussions similaires

  1. Code VBA pour importer des données vers Excel
    Par thanmirt dans le forum SDK
    Réponses: 1
    Dernier message: 09/04/2011, 17h53
  2. Réponses: 4
    Dernier message: 11/03/2011, 14h45
  3. Script pour importer des donnés
    Par chrosnir dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/12/2007, 12h46
  4. [SQLserver2000] Lire un fichier pour importer des données
    Par cladsam dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 01/10/2007, 10h40
  5. [VBA-E]Importer des données de fichiers excel fermés
    Par bart64 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/04/2006, 11h35

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