XL 2016 Aide fichier VBA - conversion de données

flo189

XLDnaute Occasionnel
Bonjour à tous,

Besoin de votre aide précieuse. Pour intégrer des données entre deux SI, j’ai besoin de faire une conversion de données.


1 Mon code ne fonctionne pas pour ouvrir un fichier CSV et le coller en en feuil2- A1

2 Sur la feuil3, j’aimerais copier les données de la feuil2 de la ligne A2 en feuil3 D2.

3 Sur la feuil 3, Colonne A, Colonne B, Colonne C, il faut recopier respectivement « Année », « Mois », « Jour » en fonction des données copiées de la Feuil 2

4 J’aimerai séparer le code postal de la ville de la feuil2 colonne D, pour cela j’ai rajouté en feuil3 une colonne G (en jaune).

5 J’aimerais si la ville contient « Paris » en feuil 3 colonne H, afficher uniquement « Paris » et pas Paris 8e arrondissement, Paris 08, Paris Cedex….

6 J’aimerais pouvoir ouvrir une boite enregistrer sous de la feuil3 en csv uniquement



Pour aider à comprendre j’ai ajouté des données à titre d'exemple



Merci de votre aide
 

Pièces jointes

  • ImportCargo.xlsm
    22.9 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
re
bonjour
bon déjà je l'importe directement comme souhaité dans la feuil2 sans passer par la feuil3
avec les 3 colonnes en plus devant année,mois,jour et les cdp séparé dans une colonne
VB:
Sub Bouton1_Cliquer()
    Dim ImportCargo
    ImportCargo = Application.GetOpenFilename("Fichier csv, *.csv", , "Importer un fichier csv")

    With Sheets("Feuil2")
        .Cells.Clear
        .Activate
        With .QueryTables.Add(Connection:= _
                              "TEXT;" & ImportCargo, Destination:=Range("$D$1"))
            '.CommandType = 0
            .Name = "FICHIER CSV_1"
            .FieldNames = True
             .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 1252
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileSemicolonDelimiter = True
            .TextFileColumnDataTypes = Array(4, 1, 1, 1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
            .Delete
        End With
        .[A1:C1] = Array("Année", "Mois", "Jour")
        .Columns("G:H").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Range("G2:G" & .Cells(Rows.Count, 4).End(xlUp).Row).FormulaR1C1 = "=MID(RC[2],1,FIND("" "",RC[2],1))"
        .Range("H2:H" & .Cells(Rows.Count, 4).End(xlUp).Row).FormulaR1C1 = "=MID(RC[1],FIND("" "",RC[1],1),99)"
        With .Range("G2:H" & .Cells(Rows.Count, 4).End(xlUp).Row): .Value = .Value: End With
        .Range("G1:H1").Value = Array("CDP", "Ville")
        .Columns("I:I").Delete Shift:=xlToLeft
        .Range("A2:A" & .Cells(Rows.Count, 4).End(xlUp).Row).FormulaR1C1 = "=YEAR(RC[3])"
        .Range("B2:B" & .Cells(Rows.Count, 4).End(xlUp).Row).FormulaR1C1 = "=MONTH(RC[2])"
        .Range("C2:C" & .Cells(Rows.Count, 4).End(xlUp).Row).FormulaR1C1 = "=day(RC[1])"
    End With
End Sub
 

Bebere

XLDnaute Barbatruc
Bonjour
Transfert données Feuil2 vers Feuil3
VB:
Option Explicit
Dim Tbl2, Tbl3
Dim DerL As Long, L As Long    ', L As Long

Public Sub Feuil2versFeuil3()
    Feuil3.Range("A2:" & "M" & Feuil2.Range("A65536").End(xlUp).Row).ClearContents
    DerL = Feuil2.Range("A65536").End(xlUp).Row
    Tbl2 = Feuil2.Range("A2:" & "I" & DerL)
    Tbl3 = Feuil2.Range("A2:" & "M" & DerL)
    For L = 1 To UBound(Tbl2, 1)
        Tbl3(L, 1) = Year(Tbl2(L, 1)): Tbl3(L, 2) = Month(Tbl2(L, 1)): Tbl3(L, 3) = Day(Tbl2(L, 1))
        Tbl3(L, 4) = Tbl2(L, 1)
        Tbl3(L, 5) = Tbl2(L, 2)
        Tbl3(L, 6) = Tbl2(L, 3)
        Tbl3(L, 7) = Left(Tbl2(L, 4), 5)    'cp
        If InStr(Tbl2(L, 4), "PARIS") > 0 Then Tbl3(L, 8) = "PARIS" Else Tbl3(L, 8) = Mid(Tbl2(L, 4), 7)
        Tbl3(L, 9) = Tbl2(L, 5)
        Tbl3(L, 10) = Tbl2(L, 6)
        Tbl3(L, 11) = Tbl2(L, 7)
        Tbl3(L, 12) = Tbl2(L, 8)
        Tbl3(L, 13) = Tbl2(L, 9)
    Next

    Feuil3.Range("A2").Resize(UBound(Tbl3, 1), UBound(Tbl3, 2)) = Tbl3
    Feuil3.Columns("A:M").AutoFit
    
    End Sub
 

patricktoulon

XLDnaute Barbatruc
re
voilà le fichier corrigé on importe , on ajoute les colonnes année,mois jour on les rempli avec les dates on sépare les code postals des villes dans une colonne separé sans passer par une feuil3
et on sauve le tableau obtenu en csv réécrit ligne par ligne avec open for output
Terminé
 

Pièces jointes

  • ImportCargo V2 .xlsm
    27.1 KB · Affichages: 4

cp4

XLDnaute Barbatruc
Merci à tous de votre aide. Je ne pense pas que ce soit le bon csv. Je souhaiterai le csv séparateur point virgule

encore merci
Bonsoir,
Le code du post#13 crée bien un csv avec comme séparateur le point virgule. Pour t'en rendre compte modifie l'extension en txt.
J'ai ajouté une condition pour éviter un plantage dans le cas où l'utilisateur clique sur annuler.

Bonne soirée.
 

cp4

XLDnaute Barbatruc
Bonjour,
Je ne comprends pas pour utiliser le fichier en CSV je doit revenir sur le fichier et l'enregistrer en CSV point virgule.

Merci de votre aide
Bonjour,

@flo189 : Moi aussi je n'ai pas vraiment compris tes attentes.
Le code que je t'ai proposé crée un fichier avec le nom prédéfini pas tes soins dans le dossier que tu auras choisi, dans lequel sont reportées toutes les données présentes dans la feuille 3.
 

Discussions similaires

Réponses
7
Affichages
226
Réponses
9
Affichages
266

Statistiques des forums

Discussions
314 629
Messages
2 111 349
Membres
111 110
dernier inscrit
chergui