vendredi 23 janvier 2015

Code VBA pour inserer un fichier de données dans un tableau excel

J'ai une feuille de calcul avec des tableaux croisés dynamique des des graphiques, et j'ai voulu automatiser l'insertion de données quotidienne.

Voici le code VBA que j'ai mis en place pour cela


Sub FichierTxtCopieSurFeuilleDeCalculs()
Dim Ligne As String, NoLigne As Long, NoCol As Integer, Indice As Integer
Dim Tableau, Chemin$, nomFich$, separateur
 Application.Volatile
    '*** ouverture "d"une" boite de dialogue ***
    'de laquelle on extrait :
    Chemin = "C:\chemin\sur\le\disque\"
    nomFich = "FICHIER.TXT" 'ou .csv
    '********************************
    'Ouverture du fichier
    Open Chemin & nomFich For Input As #1
 
    'Lecture
    While Not EOF(1)
        Input #1, Ligne
 
        'recherche du séparateur
        If InStr(Ligne, ";") <> 0 Then ' ";"
             separateur = ";"
        ElseIf InStr(Ligne, vbTab) <> 0 Then 'Tab
             separateur = vbTab
        ElseIf InStr(Ligne, ",") <> 0 Then ' ","
             separateur = ","
        ElseIf InStr(Ligne, " ") <> 0 Then ' espace
             separateur = " "
        End If
 
        'création d'un tableau des données de la ligne
        Tableau = Split(Ligne, separateur)
        NoLigne = 5
        Cells(NoLigne, 1).EntireRow.Insert
        'transfert des données dans une feuille Excel vierge
        For Indice = 0 To UBound(Tableau)
        If (NoCol = 12) Then
        NoCol = 1
        NoLigne = NoLigne + 1
        Cells(NoLigne + 1, 1).EntireRow.Insert
        Else
        NoCol = NoCol + 1
        End If
        If ((NoCol = 8) Or (NoCol = 12)) Then
        'Dans le 8éme et la 12éme colonne j'insere des nombres
             Cells(NoLigne, NoCol).Value = Val(RTrim(Tableau(Indice)))
        ElseIf (NoCol = 5) Then
        'Dans la 5éme colonne j'insere une date formaté
            Cells(NoLigne, NoCol).Value = Format(Tableau(Indice), "dd-mmm")
        ElseIf (NoCol = 6) Then
        'Dans la 6éme colonne j'insere une formule
        Cells(NoLigne, NoCol).NumberFormat = "General"
        Cells(NoLigne, NoCol).Formula = "=IF(B84=""PLEBIC"",""Boostées"",IF(B84=""FNAC  "",""Offres FNAC"",""Normales""))"
        
        Cells(NoLigne, NoCol).Calculate
         'Cells(NoLigne, NoCol).Value = Cells(NoLigne, NoCol).Value
         
        Else
        'Dans les autres colonnes j'insére du texte
             Cells(NoLigne, NoCol).Value = RTrim(Tableau(Indice))
        End If
        Next
    Wend
    Close #1
    
End Sub