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 :

Aller chercher des données automatiquement dans un répertoire


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 30
    Par défaut Aller chercher des données automatiquement dans un répertoire
    Bonjour,

    Je souhaite savoir si il est possible via une macro d'aller chercher un fichier.txt dans un répertoire du disque dur en fonction de la valeur que peut prendre une cellule. Je m'explique :

    Sur la feuille 1 : j'ai en A1 une liste de valeurs (qui correspond à plusieurs villes : bordeaux, tours, brest...)
    Sur la feuille 2 : j'ai une base de données

    Sur mon disque dur, j'ai un répertoire qui comprend les bases de données de chaque ville (un fichier .txt pour chaque ville)

    J'aimerai qu'en feuille 2, s'affiche la base de données propre à celle de la ville écrite en A1 (feuille1).

    Je ne sais pas si cela est réalisable avec une macro.

    Merci pour votre aiguillage. Xavier.

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Oui c'est faisable.

    Mais plusieurs question pour effectuer une macro de ce type :
    1) Sous quelle forme sont placées tes villes dans ta cellule A1 de ta feuille 1 ?
    2) Quelles sont les données que tu veux importer ? Plusieurs colonnes, lignes ? Veux-tu les placer les données les unes à la suite des autres ?
    3) Toutes tes villes sont-elles dans le même répertoire ?
    4) Si oui (le chemin étant identique à chaque fichier), quels noms ont tes fichiers .txt ?
    5) En cas de changement de la cellule A1, veux-tu écraser les données existantes ? Les ajouter ?

    Bref, un fichier exemple serait le bienvenu avec tes feuilles 1 et 2 d'origines, ainsi qu'une de tes bases de données exemple.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 30
    Par défaut
    Voici pour la réponse à tes questions

    1) Sous quelle forme sont placées tes villes dans ta cellule A1 de ta feuille 1 ?
    Elles sont sous la forme d'une liste. Dans la cellule, j'ai fait "Outils > Validation > Liste"

    2) Quelles sont les données que tu veux importer ? Plusieurs colonnes, lignes ?
    Veux-tu les placer les données les unes à la suite des autres ?
    Les données que je veux importer sont sur plusieurs colonnes, les unes à la suite des autres, la mise en page sur excel se fait automatiquement.

    3) Toutes tes villes sont-elles dans le même répertoire ?
    Les bases de données de toutes les villes sont dans le même répertoire mais avec un nom différent.

    4) Si oui (le chemin étant identique à chaque fichier), quels noms ont tes fichiers .txt ?
    Les noms des fichiers sont RU01.txt (pour la ville 01), RU02.txt (pour la ville 02)...

    5) En cas de changement de la cellule A1, veux-tu écraser les données existantes ? Les ajouter ?
    En cas de changement de la cellule A1, je souhaite écraser les données existantes.

    Je t'envoie un fichier exemple en MP pour une meilleure compréhension. Ce n'est pas le fichier réel car les données sont confidentielles.

    Merci pour ton aide.

    Voici ci-joint le fichier exemple ainsi qu'un exemple de la base de données.

    Les bases de données de chaque ville se situe sous le même répertoire de l'ordinateur C:\Mes Documents\Xavier\BDD
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bon...

    Je ne suis pas hyper satisfait car la première colonne ne marche pas bien chez moi. Alors comme je ne sais pas si cela vient de fait que tu m'as envoyé le fichier .txt ou pas, je te propose d'essayer et de revenir vers moi si la macro ne fonctionne pas.

    Voici le code que je te propose :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim Nom_Fichier As String, Texte As Variant, Part As String
    Dim NumFile As Integer, Compteur As Integer
     
    Nom_Fichier = "C:\Mes Documents\Xavier\BDD\RU" & Target.Value & ".txt"
    Compteur = 1
     
    If Dir(Nom_Fichier) = "" Then
       MsgBox "Le fichier est introuvable.", vbCritical + vbOKOnly, "Attention..."
       Exit Sub
    Else
        Worksheets("Feuil2").Select
        Worksheets("Feuil2").Cells.Clear
        NumFile = FreeFile
        Open Nom_Fichier For Input As NumFile ' ouverture du fichier
        Do While Not EOF(NumFile)
            Input #NumFile, Texte
            Worksheets("Feuil2").Cells(Compteur, 1).Select
     
            off1 = 0
            off2 = 0
     
            If InStr(Texte, Chr(9)) Then
                off1 = InStr(Texte, Chr(9))
                Worksheets("Feuil2").Cells(Compteur, 1) = Left(Texte, off1 - 1)
     
                For i = 2 To 100
                    If InStr(off1 + 1, Texte, Chr(9)) Then
                        off2 = InStr(off1 + 1, Texte, Chr(9))
                        Worksheets("Feuil2").Cells(Compteur, i) = Mid(Texte, off1 + 1, off2 - off1 - 1)
                        off1 = off2
                    Else
                        Worksheets("Feuil2").Cells(Compteur, i) = Right(Texte, Len(Texte) - off1)
                        Exit For
                    End If
                Next i
     
            Else
                Worksheets("Feuil2").Cells(Compteur, 1) = Texte
            End If
     
            Compteur = Compteur + 1
     
        Loop
     
    End If
     
    Worksheets("Feuil2").Range("A1").Select
    Close NumFile
    End Sub
    Il y a surement mieux. Bref, dis moi !

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    YEEEEEEEES !!!

    Tout ça pour un seul petit mot !

    Bref, je pense que cela fera ton bonheur :
    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
    Option Explicit
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim Nom_Fichier As String, Texte As Variant, Part As String
    Dim NumFile As Integer, Compteur As Integer
    Dim off1, off2, i As Integer
     
    Nom_Fichier = "C:\Mes Documents\Xavier\BDD\RU" & Target.Value & ".txt"
    Compteur = 1
     
    If Dir(Nom_Fichier) = "" Then
       MsgBox "Le fichier est introuvable.", vbCritical + vbOKOnly, "Attention..."
       Exit Sub
    Else
        Worksheets("Feuil2").Select
        Worksheets("Feuil2").Cells.Clear
        NumFile = FreeFile
        Open Nom_Fichier For Input As NumFile
        Do While Not EOF(NumFile)
            Line Input #NumFile, Texte
     
            off1 = 0
            off2 = 0
     
    '        If InStr(Texte, Chr(9)) Then
                off1 = InStr(Texte, Chr(9))
                Worksheets("Feuil2").Cells(Compteur, 1) = Left(Texte, off1 - 1)
     
                For i = 2 To 100
                    If InStr(off1 + 1, Texte, Chr(9)) Then
                        off2 = InStr(off1 + 1, Texte, Chr(9))
                        Worksheets("Feuil2").Cells(Compteur, i) = Mid(Texte, off1 + 1, off2 - off1 - 1)
                        off1 = off2
                    Else
                        Worksheets("Feuil2").Cells(Compteur, i) = Right(Texte, Len(Texte) - off1)
                        Exit For
                    End If
                Next i
     
    '        Else
    '            Worksheets("Feuil2").Cells(Compteur, 1) = Texte
    '        End If
     
            Compteur = Compteur + 1
        Loop
     
    End If
     
    End Sub
    EDIT : s'il se peut qu'une de tes lignes n'est pas de "tab" alors décommente la condition "if" que j'ai placé.
    Je l'ai enlevé pour gagner une opération VBA à chaque boucle (ce qui n'est rien), pour autant, si elle n'est pas nécessaire, je n'en vois pas l'intérêt ! =)
    Ceci étant, si tu as une ligne sans tabulation à un quelconque moment, il est préférable de décommenter cette partie tout le temps.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 30
    Par défaut
    Salut,

    Merci pour ton aide,

    toutefois j'ai essayé ton code, et à chaque fois, j'ai la msgbox qui s'affiche "fichier introuvable". Pourtant il va bien chercher dans le bon répertoire.

    Autre chose, dans ton code je ne vois pas comment tu as fait pour dire que :
    Bordeaux est relié à base de données RU01
    Lille est relié à base de données RU02
    Marseille [....] RU03
    Brest [...] RU04....

    Merci de m'éclairer un peu !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/04/2015, 16h55
  2. [XL-2010] Macro pour aller chercher des données dans un autre fichier
    Par GoToon dans le forum Macros et VBA Excel
    Réponses: 40
    Dernier message: 24/01/2015, 03h52
  3. Aller chercher des données dans la BDD
    Par zooffy dans le forum Silverlight
    Réponses: 9
    Dernier message: 14/06/2011, 09h35
  4. Aller chercher des données dans un stringgrid
    Par cre3000 dans le forum Langage
    Réponses: 2
    Dernier message: 29/02/2008, 13h27

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