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 :

Liaison de cellule avec comme nom du fichier une date


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Exploitation
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Exploitation

    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Points : 14
    Points
    14
    Par défaut Liaison de cellule avec comme nom du fichier une date
    Bonjour a tous,

    Je souhaite faire une liaison d'une cellule sur une cellule d'un fichier dont le nom est une date.
    Mais liaison doit aller prendre la date dans la ligne 1 de la base.

    difficile à expliquer
    Ci-joint le fichier de la base et les fichiers date
    Merci à tous de votre aide

    base.xls
    01-janv-15.xls
    02-janv-15.xls
    03-janv-15.xls
    04-janv-15.xls

  2. #2
    Membre habitué Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Points : 152
    Points
    152
    Par défaut
    Bonjour,

    Effectivement c'est pas limpide au premier abord, mais avec tes fichiers je pense avoir saisi ce que tu souhaitais.
    J'ai fait quelques suppositions pour mon code :
    • tes fichiers externes de dates avec les valeurs sont tous au format XLS (et pas XLSX ou XLSM par exemple)
    • ton fichier base et tes fichiers dates ne comportent qu'une seule feuille
    • les dates de la première ligne du fichier base commencent bien à la première colonne
    • les dates de la première ligne du fichier base sont bien formattées (le texte qui apparait dans chaque cellule correspond exactement au nom des fichiers de dates)
    • la valeur trouvée doit toujours être écrite dans la case juste en dessous de la date dans le fichier base
    • le fichier base et les fichiers dates sont tous dans le même dossier

    Mon code ouvre les fichiers de dates en mode invisible (et les referme). Si jamais un fichier n'est pas trouvé, on passe à la date suivante. Si jamais on tombe sur une case vide dans la première ligne de ton fichier base, on arrête la recherche.

    Voilà le code, désolé il est pas commenté, n'hésite pas à demander si tu as des questions. Sinon, n'oublie pas de marquer le sujet comme Résolu.
    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
    Sub liaison()
        Dim classeurDate As Workbook, classeurCourant As Workbook, cellule As Range, nomFichier As String, applicationInvisible As New Excel.Application
     
        Application.ScreenUpdating = False
     
        applicationInvisible.Visible = False
     
        Set classeurCourant = ActiveWorkbook
     
        For Each cellule In classeurCourant.Worksheets(1).Rows(1).Cells()
     
            If cellule.Value = vbNullString Then Exit For
     
            nomFichier = classeurCourant.Path & "\" & cellule.Text & ".xls"
     
            If Dir(nomFichier) <> vbNullString Then
                Set classeurDate = applicationInvisible.Workbooks.Add(nomFichier)
                cellule.Offset(1, 0).Value = classeurDate.Worksheets(1).Range("A1").Value
                classeurDate.Close SaveChanges:=False
            End If
     
        Next cellule
     
        applicationInvisible.Quit
        Set applicationInvisible = Nothing
     
        Application.ScreenUpdating = True
    End Sub
    Le code est à placer dans le fichier base et à appeler depuis ce même fichier comme tu le souhaites.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Exploitation
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Exploitation

    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Points : 14
    Points
    14
    Par défaut
    Bonjour et merci de ta réponse

    Le problème est que j'ai un fichier(date) d'importation par jour avec 200 lignes de données sur trois colonnes qui sont importées dans le fichier base par des liaisons avec une feuille par mois. Je dois créer les liaisons tous les mois, je te laisses calculer combien ça en fait sur l'année.
    Je souhaite que les liaisons de la base prennent la date en tête de colonne de chaque jour afin d'aller chercher les données correspondantes

    Je sais c'est très ardu

    Merci de ton aide

  4. #4
    Membre habitué Avatar de Orhleil
    Homme Profil pro
    Intégrateur fonctionnel
    Inscrit en
    Mai 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Intégrateur fonctionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 81
    Points : 152
    Points
    152
    Par défaut
    Ça se complexifie là ton truc. J'ai un peu de mal à imaginer le rendu attendu. Est-ce que tu aurais d'une part un fichier date typique à donner en exemple pour me faire une meilleure idée ? Et d'autre part as-tu un bout de code que tu aurais essayé de faire fonctionner en vain ? Ça m'aiderait et me donnerait un point de départ pour t'aider.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Exploitation
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Exploitation

    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Points : 14
    Points
    14
    Par défaut
    Ci-joint un bout du fichier base et date, tu comprendras en les ouvrant. Dans le fichier original de base il y a 12 mois de données et donc 365 fichiers date.
    Je sais c'est très compliqué c'est pour ça que je demande de l'aide et 2015 arrive bientôt et je ne veux plus créer mes liaisons mois après mois mais utiliser la date en tête de colonne dans la liaison de chaque cellule de cette manière je n'aurai plus besoin de créer mes liaisons, juste changer les dates

    Merci encore de ton aide

    base2.xls
    01-09-14.xls
    02-09-14.xls

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne télécharge pas les classeurs lors de début d'une discussion.
    Sans explications complémentaires comme par exemple comment sont construits les noms des classeurs avec lesquels il doit avoir une liaison.
    Cette liaison sert-elle à ouvrir le fichier (alors je te conseille la fonction LIEN_HYPERTEXTE ou bien à lire des valeurs dans des cellules ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre à l'essai
    Homme Profil pro
    Exploitation
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Exploitation

    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Points : 14
    Points
    14
    Par défaut
    Merci de ta réponse .

    Dans mon fichier base chaque colonne est un jour et en tête de colonne une date
    Chaque cellule de la colonne a une liaison faisant reference a un fichier date de type : '='G:\ESSAI\[02-janv-15.xls]Feuil1'!$A$1'
    Ce que je souhaite c'est que à la place du 02-janv-15 mettre une formule pour prendre la date en tête de colonne
    de façon à ne pas être obliger de refaire mes liaisons mais juste changer la date en tête de colonne
    Aujourd'hui j'ai plus 200 liaisons par jour x 365jours

    Merci de vos aides !!


    Les fichiers d'exemples

    http://cjoint.com/?0KrrGzN19io
    http://cjoint.com/?0KrrHzzj6mK
    http://cjoint.com/?0KrrIprhHvS

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 764
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 764
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour construire une chaîne de caractères telle que décrite (ex =c:\[date.xls]Feuil1!A1) la concaténation avec par exemple son opérateur (&) ainsi que la fonction TEXTE est une solution.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre à l'essai
    Homme Profil pro
    Exploitation
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Exploitation

    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Points : 14
    Points
    14
    Par défaut
    Bonjour

    ça ne fonctionne pas les fichiers fermés
    J'ai essayé aussi avec la fonction INDIRECT et INDIRECT.EXT c'est pareil
    pas de solutions !

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/09/2011, 10h37
  2. Réponses: 1
    Dernier message: 04/12/2010, 17h08
  3. fichier texte avec comme nom une variable
    Par olobo dans le forum Débuter
    Réponses: 4
    Dernier message: 04/01/2010, 15h55
  4. créer un fichier avec comme nom la date du jour
    Par cedric00 dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 23/03/2009, 22h07
  5. Réponses: 3
    Dernier message: 17/05/2007, 10h24

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