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 :

Excel VBA_Macro Ouverture d'un fichier excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Par défaut Excel VBA_Macro Ouverture d'un fichier excel
    Bonjour,
    J'ai un petit problème que je n'arrive pas à résoudre pour le travail.
    Je souhaiterai créer une marco sur excel capable de copier toutes les infos d'un autre fichier excel mais en fonction de la date.
    Je m'explique.Tous les jours un nouveau fichier excel se crée sur le réseau intitulé de la façon suivante :
    toto20090810.xls

    Vous aurez compris que 20090810 correspond au 10 aout 2009.

    J'aimerai donc créer une macro qui en fonction de la date que je rentre (ex: 7 aout 2009) aille m'ouvrir le fichier toto20090807 et me copie toutes ces données dans ma page excel.

    En vous remerciant.

  2. #2
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Bonjour,

    en fait, ce n'est pas très compliqué.

    Tu peux utiliser pour l'ouverture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open Filename:="C:\Choses.xls"
    Il est possible de donner le nom par variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim toto As String
     
        toto = "Choses.xls"
     
        Workbooks.Open Filename:="C:\" & toto
    Alors tu pourras faire les modification de string avec la date pour obtenir le format aaaammjj et concaténé avec ".xls" et voici pour la variable toto!

    Et à la fin de ton code, pour fermer le fichier ouvert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Choses.xls").Close
    ou dans ton cas
    Et voila, tu pourras avancer beaucoup avec ces quelques lignes.

    P.S. Pout manipuler la date, tu peux regarder Format ou sinon un switch case pour le mois.
    Tu pourrais aussi utiliser un USF avec un txtbox pour le jour et l'année et une liste pour le mois, ensuite tu prends la position sélectionnée pour avoir le numéro de mois directement!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut
    Bonjour,

    voilà déjà pour l'ouverture:

    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
    Sub ToTo()
    'ouvre totoYYYYMMDD.xls situé dans C:\Files
    Dim vM As Integer
    Dim vY As Integer
    Dim sM As String
    Dim vD As Integer
    Dim sD As String
    Dim vXlNm As String
    Dim x As Date
        x = InputBox("Entrez une date", , Date)
        vM = Month(x)
        vD = Day(x)
        vY = Year(x)
    'si le jour ou le mois n'ont qu'un digit
        If vD < 10 Then
            sD = "0" & vD
        Else
            sD = vD
        End If
        If vM < 10 Then
            sM = "0" & vM
        Else
            sM = vM
        End If
        vXlNm = "toto" & vY & sM & sD & ".xls"
        Workbooks.Open ("C:\Files\" & vXlNm)
    End Sub
    Y'a surement plus élégant.. De plus l'utilisation des dates peut-être un peu compliqué avec excel selon la configuration.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Par défaut
    Re,
    Merci pour toutes ces infos.
    J'ai testé les 2 méthodes et j'en ai fait un mix.
    J'aurai aimé savoir avec ta méthode KenDev, une fenêtre pop-up s'affiche.

    Sais-tu comment faire lorsqu'on rentre une date et que le fichier n'existe pas il s'affiche un message pop-up du genre "Veuillez choisir une autre date" et ne pas afficher un message de problème d'exécution du compilateur VBA ?

    Et de meme lorsqu'on souhaite fermer la fenêtre pop-up demandant la date il la quitte "proprement" sans afficher un problème d'exécution ?

    Cdlt.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut
    Bonjour,

    J'ai rajouté des commentaires aux lignes ajoutées ou modifiées. Il y a distinction entre une mauvaise entrée et un fichier absent
    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
    Sub ToTo()
    'ouvre totoYYYYMMDD.xls situé dans C:\Files
    Dim vM As Integer
    Dim vY As Integer
    Dim sM As String
    Dim vD As Integer
    Dim sD As String
    Dim vXlNm As String
    Dim x               'modifié
    Dim Tst As Boolean
        On Error GoTo ErrTrp 'au cas ou il y ai une erreur
    Line1:
        x = InputBox("Entrez une date", , Date)
        If x = "" Then Exit Sub 'si on clique sur annuler sortir
        Tst = IsDate(x) 'la valeur entrée est-elle bien une date?
        If Tst = False Then GoTo Line1 'si non retour au début
        vM = Month(x)
        vD = Day(x)
        vY = Year(x)
    'si le jour ou le mois n'ont qu'un digit
        If vD < 10 Then
            sD = "0" & vD
        Else
            sD = vD
        End If
        If vM < 10 Then
            sM = "0" & vM
        Else
            sM = vM
        End If
        vXlNm = "toto" & vY & sM & sD & ".xls"
        Workbooks.Open ("C:\Files\" & vXlNm)
        Exit Sub 'pour éviter d'aller dans la gestion des erreurs si tout va bien
    ErrTrp:
        Select Case Err.Number
            Case 1004 'fichier non trouvé
                MsgBox ("Fichier non trouvé. Fin de la Macro")
                Exit Sub
            Case Else
                vEm = "erreur n°: = " & Err.Number & vbCr
                vEm = vEm & Err.Description & vbCr & vbCr
                MsgBox (vEm)
        End Select
    End Sub

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, dommage car le DTPicker t'évite tous ces problemes de saisie
    et moyennant l'adaptation du chemin par défaut à celui de ton dossier
    ainsi que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            If .SelectedItems.Count > 0 Then
                Unload Me
                Workbooks.Open Filename:=.SelectedItems(1)
            End If
    Si le fichier exite il apparaitra dans la boite de dialogue sinon rien

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut
    Citation Envoyé par kiki29 Voir le message
    Salut, dommage car le DTPicker t'évite tous ces problemes de saisie
    Bonjour, qu'elle est l'utilité de DTPicker au delà de ce cas précis? Pour Vivi peut-être est ce embêtant d'ajouter un complément au travail. J'aurais peut-être du préciser que je ne suis pas un Kador, j'apprends au fur et à mesure de mes besoins.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Par défaut
    C'est peut être hors sujet, mais avez vous pensez à ouvrir une fenêtre pour choisir le fichier a traiter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim nom As Variant
    nom = Application.GetOpenFilename()

  9. #9
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 126
    Par défaut
    C'est parfait.
    Je suis en train de l'adapter :
    Car par défaut je souhaite que le pop-up affiche la date de la veille.
    D'où
    x = InputBox("Entrez une date", , Date-1)
    Mais j'aimerai que si nous sommes Lundi il m'affiche non pas la date de dimanche mais de vendredi.Soit Date-3.
    Peux-on faire une condition en if qui regarde le jour de la semaine et effectue le bon calcul dans la parenthèse ?

    Cdlt

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Par défaut
    il te faudra faire un boucle pour trouver si le jour précédent est durant le week end.

    Pour savoir si une date est le week end tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If DatePart("w", Dt, vbMonday) > 6 )
    et si c'est le cas alors tu reviens a trois jours de moins...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateSerial(year(dt), month(dt), day(dt) -3)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut
    J'ai rajouté dans les déclarations

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim y As integer
    Dim z As Date
    puis, avant la ligne1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    z = Date
        y = Weekday(Date) 'quel jour de la semaine somme nous?
        If y = 2 Then z = z - 3 'si c'est lundi alors z est la date de vendredi
    enfin j'ai modifié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = InputBox("Entrez une date", , z)
    Je ne m'étais jamais servi de la fonction weekday, merci!

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

Discussions similaires

  1. [XL-2003] Création d'un fichier Excel à chaque rupture d'un fichier Excel de référence.
    Par Richard_35 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 21/06/2025, 10h57
  2. [XL-2010] copier depuis des fichiers excel identiques vers un seul fichier excel sous vba
    Par fleur-d'orient dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2015, 17h29
  3. Ouverture d'un fichier excel predefini
    Par nberthonneau dans le forum Access
    Réponses: 10
    Dernier message: 13/06/2007, 22h14
  4. Réponses: 2
    Dernier message: 06/04/2005, 12h01
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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