cathodique
XLDnaute Barbatruc
Bonjour,
Je voudrais faire une mise à jour de 2 tableaux structurés depuis 2 fichiers CSV.
Je rencontre plusieurs difficultés:
1 - Une solution m'avait été donnée par @job75 (que je salue, si mes souvenirs sont bons) pour gérer l'inversion de dates se trouvant en colonne 1.
Or, dans mes tableaux les dates ne sont pas dans les mêmes colonnes.
Peut-on déterminer par code les numéros de colonne comportant des dates dans un fichier séquentiel ou csv?
2 - Je fais une boucle sur les feuilles concernées. Pour la 1ère boucle, le résultat sur la feuille est correct sauf pour la colonne date (colonne 2).
Cependant, pour la seconde boucle, le résultat est catastrophique. Sur la feuille, j'obtiens le 1er fichier et en dessous le second. Il me semble que la 1ère séquence est gardée en mémoire.
Il y a bien l'instruction (Close #1) de fermeture du fichier séquentiel.
Je suis perdu. Merci de me venir en aide.
Bonne journée.
Je voudrais faire une mise à jour de 2 tableaux structurés depuis 2 fichiers CSV.
Je rencontre plusieurs difficultés:
1 - Une solution m'avait été donnée par @job75 (que je salue, si mes souvenirs sont bons) pour gérer l'inversion de dates se trouvant en colonne 1.
VB:
S = Split(texte, ";")(0) 'item de la 1ère colonne
texte = Format(S, "m/d/yyyy") & Mid(texte, Len(S) + 1) 'date au format US en 1ère colonne Job75
Peut-on déterminer par code les numéros de colonne comportant des dates dans un fichier séquentiel ou csv?
2 - Je fais une boucle sur les feuilles concernées. Pour la 1ère boucle, le résultat sur la feuille est correct sauf pour la colonne date (colonne 2).
Cependant, pour la seconde boucle, le résultat est catastrophique. Sur la feuille, j'obtiens le 1er fichier et en dessous le second. Il me semble que la 1ère séquence est gardée en mémoire.
Il y a bien l'instruction (Close #1) de fermeture du fichier séquentiel.
Code:
Option Explicit
Sub MàJ_CSV()
Dim texte$, S$, A$(), n&, Wsh, Chemin As String, Fichier As String, NomTb As String, StyleTb As String
Dim CelDeb As Range, Lo As ListObject
Application.ScreenUpdating = False
Chemin = ThisWorkbook.Path 'on définit le chemin d'accès
' Vérifier que le répertoire "Sauvegarde CSV" existe
If Not Dossier_Existe(Chemin, "Sauvegarde CSV") Then Exit Sub
' Ajouter le dossier Sauvegarde CSV au chemin
Chemin = Chemin & "\Sauvegarde CSV" 'on définit le chemin d'accès
ChDir Chemin 'se place dans le r
For Each Wsh In Array(ShFa, ShFb)
Fichier = Chemin & "\" & Wsh.Name & ".csv"
If FichierExiste(Fichier) Then
With Wsh
.Activate
Set CelDeb = .[A1]
NomTb = Sheets(Wsh.Name).ListObjects(1)
StyleTb = Sheets(Wsh.Name).ListObjects(1).TableStyle
Debug.Print NomTb, StyleTb
Sheets(Wsh.Name).ListObjects(1).Delete
Open Fichier For Input As #1 'input accès au fichier
Do While Not EOF(1) 'EndOfFile: fin du fichier
Line Input #1, texte 'récupère la ligne
S = Split(texte, ";")(0) 'item de la 1ère colonne
texte = Format(S, "m/d/yyyy") & Mid(texte, Len(S) + 1) 'date au format US en 1ère colonne Job75
ReDim Preserve A(n) 'tableau VBA, base 0
A(n) = texte 'stocke le texte dans le tableau a
n = n + 1
Loop
Close #1
With CelDeb.Resize(n)
.Value = Application.Transpose(A) 'restitution, Transpose est limitée à 65536 lignes
.TextToColumns CelDeb, xlDelimited, Semicolon:=True 'commande Convertir
.Parent.Columns.AutoFit 'ajustement largeur
End With
Set Lo = .ListObjects.Add(xlSrcRange, .Cells(1).CurrentRegion, , xlYes)
With Lo
.Name = NomTb
.TableStyle = StyleTb
End With
End With
End If
Next Wsh
Exit Sub
End Sub
Je suis perdu. Merci de me venir en aide.
Bonne journée.