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 :

Dupliquer macro sur fichier .csv [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    ingénieur CVC
    Inscrit en
    Octobre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur CVC
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2018
    Messages : 9
    Par défaut Dupliquer macro sur fichier .csv
    Bonjour,

    Etant débutant dans le codage en VBA et n'ayant pas trouvé d'aide dans les forums existants je me permets de vous solliciter.

    J'aimerais automatiser une procédure lorsque j'ouvre un fichier .csv extrait d'une base de données. En effet, je perds du temps à effectuer les mêmes manipulations à chaque fichier, alors que je pense que ceci pourrait être fait dès son ouverture.

    Les conditions et besoins sont les suivantes :
    - le fichier est toujours au format .csv et se retrouve dans le fichier C:\Users\...\Downloads
    - le titre sera toujours "ListeDefauts.csv" ou "ListeDefauts (1).csv" ou "ListeDefauts (2).csv" ou "ListeDefauts (3).csv" ou "ListeDefauts (45).csv" etc.
    - Traitement du fichier (codage réussi) : insertion d'une colonne tout à gauche du fichier, insertion du mot "date" en A1, remplissage du reste de la colonne A en fonction des valeurs en B, ajustement de la largeur des colonnes.
    - Traitement du fichier (codage non réussi) : sélection des données (pas plus, pas moins) et mise sous forme de tableau, insertion d'un tableau croisé dynamique sur la base de ce tableau là.
    - Si possible : insertion du champ "Date" dans champ de lignes, groupement des données par années, mois, jour, heure.

    Ci-joints deux fichiers :
    - une extraction brut d'un fichier (.xlsx) normalement en csv mais le forum n'accepte pas l'envoi des csv.
    - le résultat attendu comprenant le début de macro (.xlsm); le code de la macro est également ci-dessous.
    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
    Public Sub Insert_col()
     
    Dim i As Integer
    nb_lignes = WorksheetFunction.CountA(Range("A:A"))
     
    Columns("A:A").Select 'sélection de la colonne A
    Selection.Insert Shift:=xlToRight 'insère une colonne
     
    Cells(1, 1) = "Date" 'insère "Date" en A1
     
    For i = 2 To nb_lignes 'Pour toute la première colonne, on transforme la date de la colonne B en date lisible par Excel
     
        If Len(Cells(i, 2)) = 21 Then 'si 21 caractères, on enlève le dernier caractère et on copie le résultat en A
        Cells(i, 1) = Left(Cells(i, 2), Len(Cells(i, 2)) - 1)
        'Equivalent sur Excel CNUM(GAUCHE([@[Date Apparition]];19))
        Else
        Cells(i, 1) = Cells(i, 2) 'si c'est le bon nombre de caractères, on n'y touche pas
        End If
     
    Next i
     
    Columns("A:A").Select
    Selection.NumberFormat = "m/d/yyyy h:mm"
     
    Columns("A:K").EntireColumn.AutoFit 'ajustement de la largeur des colonnes
     
    End Sub

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    je pense qu'il y a une chose que tu n'a pas compris
    les fichiers CSV sont des fichier texte et ne peuvent pas contenir de module et encore moins de macro
    pour faire ce que tu veux il te faut créer un fichier xls(m)(avec macro) qui va ouvrir ton csv et le modifier (une sorte de fichier pilote)

    et tes deux fichiers en exemple ne sont pas des csv
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    ingénieur CVC
    Inscrit en
    Octobre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur CVC
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2018
    Messages : 9
    Par défaut
    Bonjour,
    Merci pour ta réponse rapide.
    Je sais que les fichiers joints ne sont pas en .csv, mais le site ne les accepte pas, d'où mon envoi en .xls(m).
    Du coup, est-ce possible de créer un fichier xlsm, qui, automatiquement, va me chercher mon fichier .csv dans le répertoire C:\Users\...\Downloads et lui appliquer la procédure mentionnée dans le premier message ?

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    oui c'est possible c'est ce que je t'ai dis deja il me semble
    regarde du coté de open (nomdufichier)format local a true ca devrait ouvrir ton csv comme un xlsx
    parti de la tu fait ce que tu veux dessus comme un classeur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Tu peux également mettre tes macros dans un fichier PERSONNAL.XLSB (fichier des macros personnelles) propre à ton PC

    ou Encore mieux faire un fichier .XLAM qu tu incorpore à Excel (ce qui est le plus pratique)

  6. #6
    Membre averti
    Homme Profil pro
    ingénieur CVC
    Inscrit en
    Octobre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : ingénieur CVC
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2018
    Messages : 9
    Par défaut
    C'est bon, j'ai réussi à ce que je voulais en utilisant essentiellement l'enregistreur de Macros et en l'intégrant au fichier .xlsb
    Merci pour votre aide

    Voici le code pour ceux que ça pourrait aider.

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Sub Conversion()
     
     
    n = InputBox("Numéro du fichier à convertir")
     
        Workbooks.Open Filename:="C:\Users\pakz03941\Downloads\ListeDefauts (" & n & ").csv"  'ouverture du fichier csv désiré
     
        'enregistrement au format xslx
        ActiveWorkbook.SaveAs Filename:= _
            "C:\Users\pakz03941\Downloads\ListeDefauts (" & n & ").xlsx", FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False
     
    nb_lignes = WorksheetFunction.CountA(Range("A:A"))
     
        Range("M1").Select
        ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-12],RC[-11],RC[-10])" 'on concatène les données au cas-où elles ne soient pas dans les bonnes colonnes
        Range("M1").Copy
        Range("M2:M" & nb_lignes).Select 'on copie sur toutes la colonne de données
        ActiveSheet.Paste
     
       Columns("M:M").Select 'on copie les valeurs
        Selection.Copy
        Columns("N:N").Select
        Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
            , SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Columns("A:M").Select
        Selection.Delete Shift:=xlToLeft
     
        Columns("A:A").Select 'conversion des données et répartition dans les bonnes colonnes
        Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=True, Comma:=True, Space:=False, Other:=False, FieldInfo:= _
            Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7 _
            , 1), Array(8, 1), Array(9, 1), Array(10, 1)), TrailingMinusNumbers:=True
     
     
    Columns("A:A").Select 'sélection de la colonne A
    Selection.Insert Shift:=xlToRight 'insère une colonne
    Cells(1, 1) = "Date" 'insère "Date" en A1
     
    Dim i As Long
    For i = 2 To nb_lignes 'Pour toute la première colonne, on transforme la date de la colonne B en date lisible par Excel
     
        If Len(Cells(i, 2)) <> 19 Then 'si différent de 19 caractères, on tronque à 19 caractères et on copie le résultat en A
        Cells(i, 1) = Left(Cells(i, 2), 19)
        'Equivalent sur Excel CNUM(GAUCHE([@[Date Apparition]];19))
        Else
        Cells(i, 1) = Cells(i, 2) 'si c'est le bon nombre de caractères, on n'y touche pas
        End If
     
    Next i
     
    Columns("A:A").Select
    Selection.NumberFormat = "m/d/yyyy h:mm"
     
    Columns("A:K").EntireColumn.AutoFit 'ajustement de la largeur des colonnes
     
    Columns("B:B").Delete 'suppression de la colonne inutile
     
    'mise en forme de tableau de la base de données
    Columns("A:J").Select
        ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$J$" & nb_lignes), , xlYes).Name = _
            "Tableau1"
        Columns("A:J").Select
        ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight1"
     
    'création du TCD
     Range("Tableau1[[#Headers],[Date]]").Select
        Sheets.Add
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            "Tableau1", Version:=xlPivotTableVersion14).CreatePivotTable _
            TableDestination:="Feuil1!R3C1", TableName:="Tableau croisé dynamique1", _
            DefaultVersion:=xlPivotTableVersion14
        Sheets("Feuil1").Select
        Cells(3, 1).Select
     
    'renom de l'onglet TCD
    Sheets("Feuil1").Select
        Sheets("Feuil1").Name = "TCD"
     
    'groupement des données temps
        Range("A4").Select
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date")
            .Orientation = xlRowField
            .Position = 1
            End With
        Range("A4").Select
        Selection.Group Start:=True, End:=True, Periods:=Array(False, True, True, _
            True, True, False, True)
        ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Date"). _
            Orientation = xlHidden
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Comment eviter de dupliquer macro sur imports fichier xml
    Par ALEX80800 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/11/2013, 20h54
  2. symbole decimal sur fichier CSV
    Par looping dans le forum Langage
    Réponses: 3
    Dernier message: 19/01/2009, 12h06
  3. [VBA] Excel Récuperer Macro sur fichier corrompu
    Par Phenx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/01/2009, 13h13
  4. Ecriture sur fichier csv
    Par PIMPMAX dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 09/01/2007, 11h55

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