Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mise à jour à partir d'un csv

5 réponses
Avatar
JulieH
Bonjour à toutes et tous,

Voici un problème que je n'arrive pas à résoudre :
- J'ai un fichier csv qui est mis à jour régulièrement à partir
d'un système AS400.
- J'ai un fichier Excel à partir duquel je souhaite récupérer les
infos du fichier csv précédent.
- Le fichier csv a plus de lignes que le fichier Excel
(informations supplémentaires), mais je dois aussi vérifier que
certaines lignes n'ont pas été modifiées.

Pour l'instant, j'ouvre le fichier csv sous forme Excel avec la macro
suivante :

Sub Macro1()

Workbooks.Open Filename:= _
"L:\Toto\INFOS\tata.csv", Local:=True
End Sub


Quelqu'un peut-il m'aider à retrouver dans le fichier csv toutes les
lignes nouvelles ou légèrement différentes et les recopier à la suite
dans le fichier Excel ?


Merci par avance pour votre aide.

Julie

5 réponses

Avatar
FdeCourt
Salut,

Je n'ai pas très bien compris ce que tu souhaites faire.
Que veux tu faire avec ton fichier CSV ?
S'il a plus de 65 536 lignes, alors Excel ne va pas l'ouvrir (ou le
tronquer).

Quelles lignes nouvelle, ou différentes. Les copier dans quoi ? Que
faire avec ?

Cordialement,

F.
Avatar
JulieH
Bonjour et merci pour t'intéresser à mon problème,

Pour la première question, il n'y aura jamais plus de 1000 lignes.
Pour la seconde :
- Dans le fichier csv, il y des lignes de données sur 5 colonnes.
- Dans le fichier Excel il y a les mêmes 5 colonnes.
- Je veux que, après lancement de la macro, le fichier Excel ouvre le
fichier csv et récupère toutes les lignes du fichier csv qui sont
nouvelles ainsi que celles qui ont été modifiées depuis la dernière mise
à jour et les colle à la fin. En effet, je ne peux pas faire un simple
copier-coller car il y a eu du travail d'effectué sur le fichier Excel
(tri - calcul...) depuis la dernière mise à jour.

Je ne sais pas si c'est plus clair. Merci de me dire.

Julie




Salut,

Je n'ai pas très bien compris ce que tu souhaites faire.
Que veux tu faire avec ton fichier CSV ?
S'il a plus de 65 536 lignes, alors Excel ne va pas l'ouvrir (ou le
tronquer).

Quelles lignes nouvelle, ou différentes. Les copier dans quoi ? Que
faire avec ?

Cordialement,

F.


Avatar
Philippe.R
Bonsoir,
S'il y a parmi ces 5 colonnes une contenant un numéro unique pour chaque
ligne, il sera assez facile alors d'importer le csv comme nouvelle feuille
du classeur, de trier cette feuille et celle initiale du classeur selon
cette colonne puis de comparer ligne à ligne, via une boucle, si les
enregistrements correspondent ou non puis d'ajouter les nouveaux.
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"JulieH" a écrit dans le message de
news:
Bonjour et merci pour t'intéresser à mon problème,

Pour la première question, il n'y aura jamais plus de 1000 lignes.
Pour la seconde :
- Dans le fichier csv, il y des lignes de données sur 5 colonnes.
- Dans le fichier Excel il y a les mêmes 5 colonnes.
- Je veux que, après lancement de la macro, le fichier Excel ouvre le
fichier csv et récupère toutes les lignes du fichier csv qui sont
nouvelles ainsi que celles qui ont été modifiées depuis la dernière mise
à jour et les colle à la fin. En effet, je ne peux pas faire un simple
copier-coller car il y a eu du travail d'effectué sur le fichier Excel
(tri - calcul...) depuis la dernière mise à jour.

Je ne sais pas si c'est plus clair. Merci de me dire.

Julie




Salut,

Je n'ai pas très bien compris ce que tu souhaites faire.
Que veux tu faire avec ton fichier CSV ?
S'il a plus de 65 536 lignes, alors Excel ne va pas l'ouvrir (ou le
tronquer).

Quelles lignes nouvelle, ou différentes. Les copier dans quoi ? Que
faire avec ?

Cordialement,

F.





Avatar
JulieH
Bonjour et merci pour ton idée,

Non il n'y a as de colonne avec un numéro unique mais je pourrais en
créer 1 en concaténant les infos des 5 colonnes dans une sixième.
Pour le reste, je trouve l'idée intéressante mais je ne maitrise pas
les boucles et je ne sais pas faire.

Bonne journée

Julie



Bonsoir,
S'il y a parmi ces 5 colonnes une contenant un numéro unique pour chaque
ligne, il sera assez facile alors d'importer le csv comme nouvelle
feuille du classeur, de trier cette feuille et celle initiale du
classeur selon cette colonne puis de comparer ligne à ligne, via une
boucle, si les enregistrements correspondent ou non puis d'ajouter les
nouveaux.


Avatar
FdeCourt
Salut,

Voilà une première approche (a adapter, notement le chemin d'acces du
fichier, et le caractère séparateur) :

Sub CompareCSV()

Application.ScreenUpdating = False

'Definition des variables
Const separateur As String = ","
Dim Ligne As String, unique As String, Tablo, x As Integer
Dim i As Long, j As Long, k As Long, lgn_fin As Long, nb_lgn As
Long
Dim tmp
Dim AInscrire As Boolean
Dim origine

'Calcul du nombre de lignes total du tableau dans Excel
nb_lgn = Cells(65536, 1).End(xlUp).Row

'Redefinition du tableau Origine en fontion du nombre de ligne
total, pour éviter les Redim Preserve
ReDim origine(1 To nb_lgn)

'remplissae du tableau sur 5 colonnes avec les données déjà
renseignée dans Excel
tmp = Range(Cells(1, 1), Cells(nb_lgn, 5))
For i = 1 To nb_lgn
For j = 1 To 5
origine(i) = origine(i) & tmp(i, j)
Next
Next

'Ouverture du fichier CSV
Open "G:test.csv" For Input As #1
'Boucle sur chaque ligne
Do While Not EOF(1)
Line Input #1, Ligne
'Creer le tableau contenant les valeurs de la ligne en
cours
Tablo = Split(Ligne, separateur)
'Cree un clés unique concatenation de toutes les valeurs
unique = Replace(Ligne, separateur, "")

'Compare cette clés unique au tableau original
For i = 1 To nb_lgn
If origine(i) = unique Then
AInscrire = False
Exit For
Else
AInscrire = True
End If
Next

'Si cles unique absente, alors ecriture des 5 colonnes
dans Excel
If AInscrire = True Then
lgn_fin = Cells(65536, 1).End(xlUp).Row + 1
For k = 0 To UBound(Tablo)
Cells(lgn_fin, k + 1) = Tablo(k)
Next
End If
Loop

'Fermeture du fichier
Close #1
Application.ScreenUpdating = True
End Sub

Cordialement,

F.

PS : Attention aux lignes qui peuvent être découpées