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 :

Lire et modifier une cellule de plusieurs classeurs .csv


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Décembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 5
    Par défaut Lire et modifier une cellule de plusieurs classeurs .csv
    Bonjour à tous,

    Je suis devant un problème que je n'arrive pas à résoudre, j'en appelle donc à votre aide.

    J'ai devant moi 350 fichiers .csv dans des répertoires et des sous-répertoires.
    Je voudrais extraire de ces fichiers la cellule B17 (si possible sans ouvrir le fichier pour un gain de temps)
    Dans un dernier temps, je voudrais être capable de modifier cette cellule.

    En farfouillant sur internet, j'ai trouvé une demi-solution via un buffer et le code suivant :

    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
    Option Explicit
    Dim Lig As Long
    Dim Chemin As String
     
    Sub ExtractionCSV()
    Dim Fichier
        Lig = 2
        Chemin = SelectionRep() & "\"
        Fichier = Dir(Chemin)
        Do While Fichier <> ""
            Lig = Lig + 1
            CopierData Fichier
            Fichier = Dir
        Loop
        Sheets(2).Cells.ClearContents
        Sheets(1).Select
    End Sub
     
    Sub CopierData(Fichier)
    Dim i As Integer
        With Sheets(2)
            .Cells.ClearContents
            With .QueryTables.Add(Connection:="TEXT;" & Chemin & Fichier, Destination _
                :=.Range("A1"))
                .Name = Fichier
                .FieldNames = True
                .RowNumbers = False
                .FillAdjacentFormulas = False
                .PreserveFormatting = True
                .RefreshOnFileOpen = False
                .RefreshStyle = xlInsertDeleteCells
                .SavePassword = False
                .SaveData = True
                .AdjustColumnWidth = True
                .RefreshPeriod = 0
                .TextFilePromptOnRefresh = False
                .TextFilePlatform = 1252
                .TextFileStartRow = 1
                .TextFileParseType = xlDelimited
                .TextFileTextQualifier = xlTextQualifierDoubleQuote
                .TextFileConsecutiveDelimiter = False
                .TextFileTabDelimiter = True
                .TextFileSemicolonDelimiter = False
                .TextFileCommaDelimiter = False
                .TextFileSpaceDelimiter = False
                .TextFileOtherDelimiter = """"
                .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
                .TextFileTrailingMinusNumbers = True
                .Refresh BackgroundQuery:=False
            End With
     
            'Stop
            For i = 1 To .Range("L500").End(xlUp).Row
                If Sheets("Buffer").Cells(i, 1) = "EQUIPMENT;AESSCP;;LRU;;;3SE" Then
                    Sheets("Liste").Cells(Lig, 1) = Sheets("Buffer").Cells(i, 12)
                End If
            Next i
     
        End With
     
    End Sub
    Ce qui me semble être la bonne solution. C'est à dire que je vois bien dans ma feuille "buffer" le texte de mon CSV (en utilisant le stop entre les deux End with).
    Le problème c'est que je le vois uniquement dans la colonne A et non pas configurer comme dans mon fichier CSV initial, à la limite pas très grave (mais chiant).
    Mon plus gros problème, c'est que je n'arrive pas à faire le copier/coller souhaité.

    Mes questions sont:
    - Si vous pouvez m'aider pour ce copier/coller?
    - Est-il possible de fouiller dans des sous-répertoires avec cette méthode?
    - Pourrais-je facilement modifier les caractères de mes cellules avec cette méthode?

    Merci d'avance pour votre aide précieuse.

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Je ne suis pas spécialiste. Désolé.
    Au demeurant, tu peux consulter ce tutoriel
    Classeurs fermés

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Décembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 5
    Par défaut
    Merci pour ta réponse rapide, je me suis déjà appuyé sur ce tutoriel la semaine dernière et ça n'a pas aboutie.

    Je pense toucher du doigt la solution avec le code précédent, mais ça reste à confirmer...

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonsoir ami
    commencer par essayer avec :
    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
    Sub importProdVte()
    Dim wkA As Workbook, wkB As Workbook
    Dim chemin As String, fichier As String
    Dim j As Long
    Application.ScreenUpdating = False
    Set wkA = ThisWorkbook 'le dossier ouvert qui va recevoir les données
    chemin = "Z:\TRAVAUX COMPTABLES BNA\Controle de Gestion\" ' Adresse du dossier fermé
    fichier = "RAPPORT JOURNALIER.xlsx" ' nom du classeur fermé pour ton cas .CSV et non pas .xlsm
    Workbooks.Open chemin & fichier 'ouvrir le classeur
    Set wkB = ActiveWorkbook 'dossier déja ouvert
    wkA.Sheets("feuil1").Range("A2").Value = wkB.Sheets("feuil1").Range("B17").Value
    wkB.Close True 'fermer le classer
     Application.ScreenUpdating = True
     
    End Sub

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Décembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique

    Informations forums :
    Inscription : Décembre 2018
    Messages : 5
    Par défaut
    Bonjour BENNASR,

    La solution d'ouvrir le fichier me fait un peu peur. Je crains de perdre beaucoup de temps sur aujourd'hui 350 fichiers, mais demain peut être plus de 1000. C'est pour moi aujourd'hui le plan B.

    J'ai quand même essayé ta solution et je ne sais pas pourquoi mais ligne 11 le "wkB.Sheets("feuil1")" ne plait pas du tout au fichier csv.

    J'avance tout de même sur mon code, j'ai réussi à faire un copier coller en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    End With
     
            'Stop
            .Range("A17").Copy
            Sheets("Liste").Cells(Lig, 2).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
     
        End With
    Par contre je ne comprends pas que toute ma ligne dans le fichier CSV s'ouvre dans la colonne A et non pas dans les différentes colonnes.
    C'est à dire dans mon csv :
    ColA = azerty
    ColB = qwerty
    ColC = saucisse
    ColD = pouet

    devient dans mon xlsm:
    ColA = azerty;qwerty;;saucisse;;;pouet
    ColB
    ColC

    Merci

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonsoir
    J'ai quand même essayé ta solution et je ne sais pas pourquoi mais ligne 11 le "wkB.Sheets("feuil1")" ne plait pas du tout au fichier csv.
    peut être et simplement parce que l'onglet dans le dossier fermé a un nom différent de "feuil1" non ??
    pour ton cas si tu passe le transpose à false??

    Transpose:=True à remplacer par : Transpose:=False

Discussions similaires

  1. [XL-2013] Modifier une cellule dans plusieurs classeurs fermés
    Par Robindesbulle dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 16/04/2017, 12h10
  2. [XL-2007] Copier une selection de cellule depuis plusieurs classeur EXCEL
    Par glbaa dans le forum Excel
    Réponses: 2
    Dernier message: 18/11/2015, 17h54
  3. [XL-2003] récupérer la valeur d'une cellule dans plusieurs classeurs identiques
    Par greenfire15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/08/2012, 09h20
  4. Lire et modifier une table avec plusieurs TQuery
    Par Alyx² dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/08/2006, 13h09
  5. modifier une cellule deja defini par un css
    Par GroRelou dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 18/04/2005, 09h26

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