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 :

Gestion de liaisons de fichiers texte


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut Gestion de liaisons de fichiers texte
    Bonjour,

    je travaille sur un fichier Excel qui a des liaisons avec des fichiers texte. Il s'agit en fait d'un fichier qui synthétise tous ces fichiers, avant d'exploiter toutes les informations.
    J'ai une liste de fichiers texte qui peuvent être en lien, mais ils n'existent pas forcément tous.
    Dans une première feuille, nommée MAJ, j'affiche en vert les fichiers texte présent dans le répertoire courant, en gris ceux qui ne sont pas disponibles. J'affiche également la date de dernière sauvegarde de ces fichiers à titre d'information.

    Dans un autre onglet, je récupère les informations sur chacun de ces fichiers texte avec des liens. Tous les liens sont codées en dur dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ='C:\Essais\[A_eff.txt]A_eff'!B2
    Mon souhait serait de n'afficher dans cet onglet que les lignes qui font référence à des fichiers texte existant, sans détruire le lien "qui ne marche plus", afin que, en cas de création du fichier texte, le lien se remette automatiquement à jour. Pour être plus clair, ce que je veux éviter, c'est qu'en cas de perte de liaison avec un fichier texte, je n'ai pas de chiffres qui apparaissent.
    J'ai pensé utiliser une fonction recherche de caractère avec comme paramètre le nom du fichier texte pour décider d'afficher ou non les valeurs mais je ne vois pas comment mettre ma variable Tab_noms(i) en paramètre.


    Une deuxième petite question : j'aurais aimé ne pas avoir une constante de nombre de fichiers dans mon programme, mais ma fonction NbFichierATraiter() ne peut pas être utilisée dans la définition de la taille du tableau qui est fixe. Comment peut-on contourner ce problème ?


    Merci à tous ceux qui auront eu la patience de lire ce post. Et merci d'avance pour toute réponse ou même critique sur mon code qui est loin d'être optimal.

    Bonne soirée

    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
    Sub AutomatisationMAJLiaisons()
    '
    ' AutomatisationMAJLiaisons Macro
     
    '
        Const nb_fichiers = 24
        'Dim nb_fichiers As Integer
        'nb_fichiers = NbFichierATraiter()
     
        Dim Path1 As String
        Dim Tab_noms(1 To nb_fichiers) As String
        Dim Derniere_sauvegarde As String
     
        oldStatusBar = Application.DisplayStatusBar
        Application.DisplayStatusBar = True
        Application.StatusBar = "Mise à jour de tous les liens en cours..." 'dans la barre d'etat
     
        Application.ScreenUpdating = False ' Pour éviter de voir défiler les actions
     
     
        ' Fichiers texte pour le cas A
        Tab_noms(1) = "A_eff"
        Tab_noms(2) = "A_mas"
        Tab_noms(3) = "A_pro_mas"
        Tab_noms(4) = "A_moy"
        Tab_noms(5) = "A_d_eff"
        Tab_noms(6) = "A_d_mas"
        Tab_noms(7) = "A_d_pro_mas"
        Tab_noms(8) = "A_d_moy"
        Tab_noms(9) = "A_d_dur"
        Tab_noms(10) = "A_d_agex"
        Tab_noms(11) = "A_d_durm"
        Tab_noms(12) = "A_m55_eff"
        Tab_noms(13) = "A_m55_mas"
        Tab_noms(14) = "A_m55_pro_mas"
        Tab_noms(15) = "A_m55_moy"
        Tab_noms(16) = "A_m55_pro_moy"
     
     
        ' Fichiers texte pour le B
        Tab_noms(17) = "B_pro_eff"
        Tab_noms(18) = "B_pro_mas"
        Tab_noms(19) = "B_pro_moy"
        Tab_noms(20) = "B_m55_eff"
        Tab_noms(21) = "B_m55_mas"
        Tab_noms(22) = "B_m55_pro_mas"
        Tab_noms(23) = "B_m55_moy"
        Tab_noms(24) = "B_m55_pro_moy"
     
        'Dossier où sont stockés les fichiers
        Path1 = ActiveWorkbook.Path
     
        Sheets("MAJ").Select
        Range("A2:E2").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.ClearContents
        Selection.Font.ColorIndex = 10
        Range("A2").Select
     
        For i = 1 To nb_fichiers
            If ExisteFichier(Tab_noms(i)) Then
                Workbooks.Open Filename:=Path1 & "\" & Tab_noms(i) & ".txt"
                Columns("A:A").Select
                Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
                    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
                    Semicolon:=True, Comma:=False, Space:=False, Other:=False
     
                Derniere_sauvegarde = FileDateTime(Path1 & "\" & Tab_noms(i) & ".txt")
     
                ActiveWindow.Close SaveChanges:=False
     
                ActiveCell.FormulaR1C1 = Tab_noms(i)
                ActiveCell.Offset(0, 1).Select
                ActiveCell.FormulaR1C1 = Derniere_sauvegarde
                ActiveCell.Offset(0, 1).Select
                ActiveCell.FormulaR1C1 = 1
                ActiveCell.Offset(1, -2).Select
            Else
                ActiveCell.FormulaR1C1 = Tab_noms(i)
                ActiveCell.Font.ColorIndex = 15
                ActiveCell.Offset(0, 1).Select
                ActiveCell.ClearContents
                ActiveCell.Offset(0, 1).Select
                ActiveCell.FormulaR1C1 = 0
                ActiveCell.Font.ColorIndex = 15
                ActiveCell.Offset(1, -2).Select
            End If
        Next
     
        Columns("B:B").Select
        Selection.NumberFormat = "mm/dd/yyyy hh:mm"
     
        Application.ScreenUpdating = True
        Application.StatusBar = oldStatusBar
     
    End Sub
     
    Function ExisteFichier(nomFichier As String) As Boolean
        ExisteFichier = (Dir(ActiveWorkbook.Path & "\" & nomFichier & ".txt") <> "")
    End Function
     
    Function NbFichierATraiter() As Integer
    '
    ' Compteur de fichier texte dans le répertoire courant
     
    '
    Dim Fichier As Object
    Dim Chemin As String, T As String
    Dim NbFichierATraiter As Long
     
        Chemin = ActiveWorkbook.Path
     
        'Traitement
        With CreateObject("Scripting.FileSystemObject")
            For Each Fichier In .GetFolder(Chemin).Files
                If Fichier.Name Like "*.txt" Then
                    NbFichierATraiter = NbFichierATraiter + 1
                End If
            Next Fichier
        End With
    End Function

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonsoir,

    En ce qui concerne la definition de ton tableau, tu peux utiliser l'instruction ReDim:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim nb_fichiers As Integer
    Dim Tab_noms() As String
     
    nb_fichiers = NbFichierATraiter
    ReDim Tab_noms(1 To NbFichierATraiter)
    Cordialement,

    Tirex28/

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    En ce qui concerne la détection de l'existence de tes fichiers texte, tu désire qu'elle soit faite comment? Régulièrement, ou alors lorsque tu fais une modif, quand tu ouvres le classeur, etc... ?

    J'ai bien une idée pour la façon de procéder, mais il faudrait que je puisse examiner un peu mieux la structure de ta feuille Excel (=un support serait bienvenu) afin de te proposer une solution adéquate.

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut
    @tirex28 : merci pour la fonction Redim, honte à moi j'en avais déjà oublié l'utilisation !

    @decondelite : je vais préparer ça, faut juste que j'anonymise un peu ;-) Merci pour cette réponse déjà !

    Edit : Voici le fichier en pièce jointe. Ce n'est pas très très lisible s'il faut des éclaircissements je peux en apporter.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut
    Citation Envoyé par decondelite Voir le message
    En ce qui concerne la détection de l'existence de tes fichiers texte, tu désire qu'elle soit faite comment? Régulièrement, ou alors lorsque tu fais une modif, quand tu ouvres le classeur, etc... ?
    En fait, j'utilise ce fichier Excel comme suit :
    Je le copie, je le colle dans un autre dossier, je crée mes fichiers texte que je mets dans ce même dossier puis j'actualise les données en cliquant sur le bouton que j'ai mis dans l'onglet MAJ.

    Donc pour la détection, ce n'est que lorsque j'ai fait une modification de mes fichiers texte, et donc "manuellement" via mon bouton

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/11/2012, 21h02
  2. Gestion de compte utilisateur à partir d'un fichier texte
    Par superjaja dans le forum Visual C++
    Réponses: 1
    Dernier message: 16/03/2007, 11h36
  3. Réponses: 11
    Dernier message: 14/03/2007, 14h39
  4. Gestion accent fichier texte dynamique
    Par delavega dans le forum Flash
    Réponses: 2
    Dernier message: 29/06/2006, 17h43
  5. Réponses: 1
    Dernier message: 02/12/2005, 14h07

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