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 :

Ouverture de fichiers dans répertoire variable [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Ouverture de fichiers dans répertoire variable
    Bonjour.
    J'ai un ensemble de fichiers (toujours nommés de la même manière) contenus dans des répertoires différents (1 rep par société). Je compile les données dans une base (1 ligne par société, 40 lignes). Quel est le code pour ouvrir une fenêtre de dialogue demandant de spécifier le chemin contenant les fichiers à importer (donc pour 1 société donnée), puis d'utiliser ce chemin pour l'ouverture des fichiers automatiquement ?

    Merci beaucoup, beaucoup...

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu...!!!
    bonjour dans l'aide tu peux regarder du coté de filedialog

    le premier exemple te donne un exemple assez precis qui pourrais t'intérésser

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonjour

    Quel est le code pour ouvrir une fenêtre de dialogue demandant de spécifier le chemin contenant les fichiers à importer (donc pour 1 société donnée), puis d'utiliser ce chemin pour l'ouverture des fichiers automatiquement ?
    Un code que j'utilise pour pointer sur un répertoire au choix et qui copie ensuite une partie d'une feuille ou ce que tu veux de tous les fichiers contenus dans le répertoire, à toi d'adapter dans la partie que j'ai mis 'adapte ton code.
    Cordialement


    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    Option Explicit
    Sub Module01ConcatenerRépertoire()
     
    '................................................................................................................
    'Declaration des variables
    Dim Classeur_Maitre As Workbook, Classeur_Slave As Workbook
    Dim oShell As Object, oFolder As Object
    Dim oFolderItem As Object
    Dim Tab_Files As Variant
    Dim aFile As Variant
    Dim ValueB7 As String 'si le contenu de la cellule B7 est numerique mettre Long ou integer a la place de string
    Dim Cel As Range
    Application.DisplayAlerts = False
    Set Classeur_Maitre = ActiveWorkbook
    Set oShell = CreateObject("Shell.Application")
    Set oFolder = oShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
    If oFolder Is Nothing Then
        MsgBox "Abandon opérateur", vbCritical
        Exit Sub
    Else
      Set oFolderItem = oFolder.Self
      'MsgBox oFolderItem.Path
    End If
    'Fin du morceau pioché
    'On recupert les fichier contenu dans le repertoire en question
    Tab_Files = ListFilesInFolder(oFolderItem.Path, False) 'mettre true a la place de false pour regarder les sous repertoires et rajouter une liste d'extension pour limiter les fichiers listés (,"txt;ert;doc;xls")
    For Each aFile In Tab_Files
    '................................................................................................................
        Set Classeur_Slave = Workbooks.Open(aFile, ReadOnly:=True)                                         'adapte ton code
            'Ouvre classeur Slave sheet 1 et copie la cellule                                              'adapte ton code
         Classeur_Slave.Sheets("Celle que tu veux").Select                                                 'adapte ton code
     
        Classeur_Slave.Sheets("Celle que tu veux").Range("A1:AA2").Copy                                    'adapte ton code
     
      'Copie du classeur Slave et le colle en collage spécial valeurs dans le Classeur Maitre de la sheets 2 'adapte ton code
        With Classeur_Maitre.Sheets(2).Range("A65536").End(xlUp)                                             'adapte ton code
                '.Offset(1, 0).Value = Classeur_Slave.Name                                                   'adapte ton code
                .Offset(2, 0).PasteSpecial Paste:=xlValues 'colle à la 2è ligne vers le bas                  'adapte ton code
     
        End With
    '...................................................................................................................
        Classeur_Slave.Close False
    Next
     
    End Sub
    Function ListFilesInFolder(strFolderName As String, Optional bIncludeSubfolders As Boolean = False, Optional strTypeFichier As String) As Variant
      '
      ' necessite d'activer la reference Microsoft Scripting RunTime par VBA Outils Références cocher Microsoft Scripting RunTime
      '
      Static FSO As FileSystemObject
      Static bNotFirstTime As Boolean
      Static tabType As Variant, vType As Variant
      Static dicoType As Object
      Static strResult As String
      Dim bTheFirst As Boolean
      Dim oSourceFolder As Scripting.Folder
      Dim oSubFolder As Scripting.Folder
      Dim oFile As Scripting.File
      'Static wksDest As Worksheet
      'Static iRow As Long
      'initialisation
      bTheFirst = False
        If Not bNotFirstTime Then
        'On identifie le tout premiere appel de la fonction recursive
        bTheFirst = True
            Set FSO = CreateObject("Scripting.FileSystemObject")
        Set dicoType = CreateObject("Scripting.Dictionary")
        If strTypeFichier <> "" Then
            'On cré un tableau contenant toutes les extensions / * si rien de precisé
            tabType = Split(strTypeFichier, ";")
            ' a l'aide de ce tableau on renseigne notre dictionnaire
            For Each vType In tabType
                dicoType.Add vType, "Ext"
            Next
        End If
        bNotFirstTime = True
            On Error Resume Next
        Set oSourceFolder = FSO.GetFolder(strFolderName)
        On Error GoTo 0
            'On regarde si le rep existe bien
        If oSourceFolder Is Nothing Then
          MsgBox "Le répertoir '" & strFolderName & "' n'existe pas." & vbCrLf & "L'execution va prendre fin.", vbExclamation, "Répertoir inconnu"
          GoTo finApp
        End If
        End If
        Set oSourceFolder = FSO.GetFolder(strFolderName)
        'On boucle sur tous les fichier present
      For Each oFile In oSourceFolder.Files
        'On verifie que l'extension du fichier correspond a ce qui est demandé
        If dicoType.Exists(ExtractFileExt(oFile.Name)) Or (strTypeFichier = "") Then
            'On le rajoute dans la chaine result
            strResult = strResult & oFile.Path & ";"
        End If
      Next oFile
        'Si on a l'option Sous dossier on boucle sur les sous dossiers
      If bIncludeSubfolders Then
        For Each oSubFolder In oSourceFolder.SubFolders
        'On ajoute les fichiers contenu dans ce rep dans la liste precedente
          strResult = Join(ListFilesInFolder(oSubFolder.Path, True), ";") & ";"
        Next oSubFolder
      End If
       'On supprime le dernier ";" s'il il existe
      If Right(strResult, 1) = ";" Then strResult = Left(strResult, Len(strResult) - 1)
       'On renvoi le resulta sous forme de tabelau
      ListFilesInFolder = Split(strResult, ";")
    finApp:
      'Si on se trouve dans le 1er appel on reinitialise les vaiables Static
      'pour ne pas conserver des valeurs static lors d'une prochaine utilisation de la fonction
      If bTheFirst Then
        Set FSO = Nothing
        Set dicoType = Nothing
        bNotFirstTime = False
        tabType = ""
        vType = ""
        strResult = ""
      End If
    End Function
    Function ExtractFileExt(strName As String) As String
        If InStr(strName, ".") = 0 Then
            ExtractFileExt = ""
        Else
            ExtractFileExt = Mid(strName, InStrRev(strName, ".") + 1)
        End If
    End Function
    '...................................................................................................................................
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Merci pour ces précisions.
    J'ai dejà tenté de passer par le code décrit dans l'help du filedialog.

    le soucis est lorsque j'ultilise la variable contenant le chemin pour ouvir les fichiers, j'ai un retour de fichier inexistant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open Filename:=vrtSelectedItem & "3 - AIPC.XLS", UpdateLinks:=0

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    J'ai trouvé...En fait je faisais un appel à la variable du chemin en dehors du code du filedialog. En intégrant l'ouverture entre for et next cela fonctionne très bien !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If .Show = -1 Then
                 For Each vrtSelectedItem In .SelectedItems
                    'fd.Execute
                    MsgBox "Import dans le répertoire : " & vrtSelectedItem
                    Workbooks.Open Filename:=vrtSelectedItem & "\3 - AIPC.XLS", UpdateLinks:=0

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

Discussions similaires

  1. [Débutant] liste de repertoire, ouverture de fichier dans sous répertoire
    Par snake-dam dans le forum MATLAB
    Réponses: 21
    Dernier message: 16/12/2014, 10h34
  2. [XL-2003] Enregistrer fichier dans répertoires variables
    Par zadio dans le forum Excel
    Réponses: 3
    Dernier message: 12/02/2010, 10h21
  3. lancer wget et récuperer le fichier dans une variable
    Par luc-b dans le forum Général Python
    Réponses: 8
    Dernier message: 10/05/2006, 10h47
  4. Shell: récupérer le bon nom de fichier dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 10/01/2006, 11h45
  5. Récupérer contenu de fichier dans une variable
    Par peppena dans le forum Linux
    Réponses: 4
    Dernier message: 15/06/2005, 12h50

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