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 :

Fusion de fichiers .csv et comparaison avec fichier .xls


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 1
    Par défaut Fusion de fichiers .csv et comparaison avec fichier .xls
    Bonjour,

    Complètement ignare en matière de programmation, je me trouve devant la nécessité de procéder à des opérations de comparaison de fichiers sous excel et je n’y arrive pas :-) Après 3 jours de recherches sur le net, j'en arrive à la conclusion qu'il faut que je passe par vba afin d'automatiser les taches que je souhaite effectuer, malheureusement, comme dit plus haut, mes connaissances en la matière sont proches du néant...

    Voilà, je dispose de 2 types de fichiers :

    1 série de fichiers excel au format csv reprenant des données sous la forme suivante :

    AAA.csv

    a - xxHxxMIN
    b - yyHyyMIN
    c - zzHzzMIN

    BBB.csv

    a - xxHxxMIN
    b - yyHyyMIN
    c – zzHzzMIN

    etc…

    et 1 fichier excel au format xls reprenant des données sous la forme

    AAA - a - xxHxxMIN
    AAA - b - yyHyyMIN
    AAA - c - zzHzzMIN
    BBB - a - xxHxxMIN
    BBB - b - yyHyyMIN
    BBB - c - zzHzzMIN

    Les opérations que je souhaite automatiser sont les suivantes :

    - Sélectionner le répertoire contenant les fichiers .csv au moyen d'une boite de dialogue.
    - Fusionner l'ensemble des fichiers .csv afin de les organiser sous la même forme que le fichier .xls
    - Enregistrer le fichier ainsi obtenu au format .xls sous un nom à choisir au moyen d'une boite de dialogue.
    - Fermer ce fichier

    Ensuite, à partir du fichier .xls ainsi obtenu et du fichier .xls déjà présent dans le répertoire, je souhaiterai générer un 3ème fichier comparant les 2 autres fichiers et indiquant les variations entre l’un et l’autre sous la forme :

    AAA / a / +xMIN
    AAA / b / +yMIN
    AAA / c / -zMIN
    BBB / a / -xMIN
    BBB / b / -yMIN
    BBB / c / +zMIN

    Je ne sais pas si j’ai été très clair, je ne sais pas si ce que je demande est possible, mais en tout cas, un grand merci à ceux qui voudront bien se pencher sur mon problème !

    David.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si tu n'as jamais programmé en VBA, ça va être coton... Mais je pense qu'une bonne âme voudra bien t'aider.
    Tu as plusieurs solutions pour résoudre ton problème et pour chacune, plusieurs méthodes
    Solution 1 :
    Soit tu ouvres tes trois csv et tu copies les feuilles dans ton classeur principal, une feuille par csv.
    soit tu copies les données de tes csv les unes sous les autres en ajoutant une colonne pour le nom de fichier;
    Ensuite, quelque soit la méthode, tu fais tes comparaisons. Pour ça, je préfère la 1ère méthode
    Solution 2 :
    Tu ouvres tes csv en tant que txt et tu recomposes tes feuilles dans une feuille de calculs en ajoutant le nom du fichier dans la première colonne.

    Je préfère toujours la 1ère méthode de la solution 1

    Pour avoir une boîte de dialogue qui te permette d'ouvrir tes csv, tu as là aussi plusieurs solutions, je t'en propose une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Application.Dialogs.Item(xlDialogOpen).Show
    Tu sélectionnes *.txt, *.csv, *.prn puis ton répertoire. Si tu connais le répertoire, tu te places dedans au préalable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chdir "D:\Les Répertoires\ton répertoire"
    Le mieux pour apprendre est d'enregistrer une macro en faisant manuellement ce que tu as à faire -> Outils -Macros -> Macro -> Nouvelle
    Pour voir le code -> Outils -Macros -> Visual Basic Editor
    Et là, tu fais deux clics sur Module1
    Ça ne t'aidera pas pour les comparaisons mais pour rassembler tes csv dans un seul classeur. (copie des feuilles et collage dans ton classeur principal)
    Commence par là
    Bon courage

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Bonjour,

    J'aimerais savoir si les données du types xxHxxMIN sont mises sous forme de type 12H51MIN ou 03H40MIN par exemple ou bien sous forme 12:51. Dans le premier cas il faut traiter ces données sous forme de texte.

    D eplus concernant les variations, je souhaiterais savoir si l'opération que tu fais est la valeur du fichier CVS - la valeur du fichier Excel ou l'inverse.

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 45
    Par défaut
    Désolé,

    J'ai oublié le code pour la récupération des données dans le fichier Excel
    Dans le module 1,tout en haut tu as dans la première liste déroulante
    (Général) et dans la deuxième (Déclaration) tu doit mettre ceci

    Type Donnée
    Lettre As String * 4
    H As String * 10 'Mis à 10 pour les saut de ligne
    End Type

    puis pour récupérer les données, les fichiers CVS doivent être placés dans le même répertoire.

    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
    Sub Recup()
    Dim Numero As Long, Ligne As Long
    'Ligne mise à 2 pour les en-têtes du fichier excel de récupération
    Ligne = 2
    Dim Enr As Donnée
    Dim Nom As String
    Dim fs, f, f1, fc, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder("NOM DU REPERTOIRE")
    Set fc = f.Files
    For Each f1 In fc
    Numero = FreeFile
            If UCase(Right(f1.Name, 3)) = "CVS" Then 'Test que c'est un fichier CVS
            Nom = f1.Name
     Open "NOM DU REPERTOIRE" &"\"& Nom For Random As Numero Len =Len(Enr)
                    Position = 1 
                    While EOF(Numero) = False
                    Get Numero, Position, Enr
                    Cells(Ligne, 1).Value = Nom
                    Cells(Ligne, 2).Value = Trim(Enr.Lettre)
                    Cells(Ligne, 3).Value = Trim(Left((Enr.H), 8)) 'remise à 8
                    Ligne = Ligne + 1
                    Position = Position + 1
                   Wend
                   Close Numero
            End If
    Next 
    End Sub
    J'au supposé que les données étaient sous forme de texte pour les dates et heures, il faut remplacé "NOM DU REPERTOIRE" par le nom complet du dossier dans lequel se trouve les fichiers CVS

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/11/2007, 13h52
  2. creation de table avec fichier csv
    Par pseudobidon57 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/09/2007, 14h05
  3. [VBA-E] SQL - ADODB avec fichier CSV
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/07/2007, 14h24
  4. [CSV] Affichage d'un fichier csv avec pagination
    Par arnoweb dans le forum Langage
    Réponses: 4
    Dernier message: 26/07/2006, 15h13
  5. Mettre a jour BD avec fichier csv
    Par Looping94510 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 07/02/2005, 18h56

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