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 d'un fichier avec un nom variable


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Ouverture d'un fichier avec un nom variable
    Bonjour,

    Je voudrais importer des données d'une feuille d'un classeur "a" vers un feuille d'un classeur "b", bien sûr par une macro et automatisé.
    La où ça se complique, c'est que le classeur "a" a un nom différent tous les mois.
    ex: etat_a_mai09 le mois d'après etat_a_juin09.
    Donc ce que je veux c'est qu'il prenne en référence dans la macro juste les premiers caractères :
    "etat_a" avec * par exemple
    du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Workbooks.Open Filename:= _
            "C:\etat_a*.xls"
    Workbooks("essai").Sheets
    Merci d'avance de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Je ne crois pas que ce que vous vouliez faire soit possible. Il faut faire une fonction qui recherche les fichiers :

    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
    Function SearchFile(strDir As String, Optional strExt = "*.*") As String
    'Retourne le nom des fichiers presents dans un dossier passe en parametre(strDir),
    'en fonction de l'extension recherchée (strExt)
    'La recherche ne se fait pas dans les sous répertoires
    'Ex : filesToSearch = SearchFile("C:\","*.xls") -> on recherche toous les fichiers excel presents dans c:
    'retourne un resultat de la forme fichier1;fichier2;....
     
    On Error GoTo ErrSearchFile
     
    Dim i As Integer
    Dim file As String
     
        With Application.FileSearch
            .NewSearch
            .LookIn = strDir
            .FileName = strExt
     
                If .Execute > 0 Then
                    For i = 1 To .FoundFiles.Count
                        file = FileName(.FoundFiles(i))
                        SearchFile = SearchFile & file & ";"
                    Next i
                    SearchFile = Left(SearchFile, Len(SearchFile) - 1)
                End If
     
        End With
     
    Function FileName(strFullPath As String) As String
    'créé pour faire les tests (fonction existante dans la fonc2002)
     
    Dim result As Variant
    Dim i As Integer
     
    result = Split(strFullPath, "\")
    FileName = result(UBound(result))
     
    End Function
     
        Exit Function
     
    ErrSearchFile:
        SearchFile = ""
        MsgBox err.Number & vbCrLf & vbCrLf & err.Description, vbCritical
     
    End Function

  3. #3
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    C'est possible avec la commande DIR.

    Edit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Fichier As String, Repertoire As String
    Repertoire = "C:\"
    Fichier = Dir(Repertoire & "etat_a*.xls")
    If len(Fichier) > 0 then
     Workbooks.Open Filename:=Repertoire & Fichier
    End If

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    un exemple avec l'objet FileSystemObject

    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
    Dim fso As Object
    Dim fichier As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
     
        ' boucle sur les fichiers Excel répondant à un filtre sFilter 
        ' exemple : "etat_a*.xls"
        ' dans un répertoire sPath
        ' exemple : "c:"
        With fso.getfolder(sPath & "\")
            For Each fichier In .Files
                If fichier.Name Like sFilter Then
                    ' met ton code par ici
                    ' exemple
                    Workbooks.Open fichier.Name
                End If
            Next fichier
        End With
     
    Set fichier = Nothing
    Set fso = Nothing

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour tous,
    Beh moi j'ai pas compris ça comme ça, je pense plutôt qu'il veux ouvrir un classeur avec un mois bien déterminer,...
    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
    Sub OuvrirFich()
    Dim N As String
    Dim M As Integer
    Dim Mois, A As Integer
    'Si ont veux ouvrir le classeur du mois en cour...
        Mois = Array("", "Janv", "Fév", "Mars", "Avril", "Mai", "Juin", "Juil", "Aoùt", "Sept", "Octob", "Nov", "Déc")
        A = Year(Now): M = Month(Now)
        N = "C:\etat_a" & Mois(M) & Right(CStr(A), 2) & ".xls"
    'Si mois précédant mettre M-1 et vérifier qu'il n'est pas à zéro, sinon changer d'année.
        If Dir(N) = "" Then
            MsgBox "Le classeur du mois de " & Mois(M) & " n'existe pas"
            Exit Sub
        End If
        Workbooks.Open Filename:=N
    End Sub
    A+

  6. #6
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim fichier As String 
    fichier = "C:\etat_a" & Format$(Now, "mmmyy")
     If Dir(fichier) <> "" Then
      workbooks.Open fichier
     Else
      MsgBox ("fichier " & fichier & " inexistant")
      Exit Sub
     End If
    si Format$(Now, "mmmyy") s'y prete
    sinon Format$(Now, "mmmmyy") pour des noms de mois entiers

Discussions similaires

  1. [XL-2010] importer un fichier avec un nom variable en fonction de la date
    Par pepsister dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/06/2014, 12h10
  2. Réponses: 2
    Dernier message: 08/08/2013, 11h07
  3. AWK : créer fichier avec un nom de variable
    Par DIE dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 27/08/2009, 08h18
  4. Charger un fichier avec un nom variable
    Par GuilloOm dans le forum Octave
    Réponses: 2
    Dernier message: 21/07/2008, 17h19
  5. Ouverture d'un fichier avec son nom
    Par bonjour69 dans le forum C
    Réponses: 23
    Dernier message: 15/10/2005, 19h36

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