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

flo189

XLDnaute Occasionnel
Bonjour CP4,

Super merci à toi en PJ. Le nom fichier csv évolue à chaque fois mais les colonnes restent dans le même ordre.

Je ne parviens pas à joindre un fichier csv je l'ai laissé sous .xlsx

Merci beaucoup de ton aide
 

Pièces jointes

  • FICHIER CSV.xlsx
    8.8 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
bonjour à tous
si on considère le classeur comme model et qui ne sera jamais ré enregistré sous un autre nom et seul la feuille 3 sera toujours exporter alors on intersepte le SaveAsUI tout simplement
donc
dans le module thisworkbook tu met ceci
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI Then
        Cancel = True
        Dim fname As Variant
        fname = Application.GetSaveAsFilename(InitialFileName:=dossier, filefilter:="CSV Files (*.csv), *.csv", Title:="ENREGISTREMENT EN CSV ")
        If fname = False Then Exit Sub
        Application.DisplayAlerts = False
        Sheets("Feuil3").Copy
        ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlCSV, CreateBackup:=False
        ActiveWindow.Close
    End If
End Sub
résultat tu a toujours le dialog pour taper le nom mais c'est automatiquement en csv et uniquement la feuil3
 

cp4

XLDnaute Barbatruc
Bonsoir @patricktoulon ;), @flo189 :),

@flo189 : Si j'ai compris ta demande, enregistrer feuil3 au format csv avec choix libre du dossier de destination.
Copie le code (perfectible) dans un module standard et associe-le au bouton dédié à cette action.
VB:
Sub Feuille_en_CSV_via_tablo()
    Dim T(), Fichier As String, Chaine As String
    Dim L As Long, f As Integer, c As Integer
    Dim dossier As Object, chemin As String

    Set dossier = Application.FileDialog(msoFileDialogFolderPicker)
   
If dossier.Show = 0 Then
        Exit Sub
    Else
        chemin = dossier.SelectedItems(1)
    End If

    Fichier = chemin & "\" & "Fichier CSV Cargo.csv"
    'Application.ScreenUpdating = False

    T = Feuil3.Range("A1").CurrentRegion.Value
    f = FreeFile()
    Open Fichier For Output As #f
    For L = 1 To UBound(T, 1)
        Chaine = T(L, 1)
        For c = 2 To UBound(T, 2)
            Chaine = Chaine & ";" & T(L, c)
        Next c
        Print #f, Chaine
    Next L
    Close #f
End Sub

Bonne soirée.

Joyeuses fêtes de fin d'année.

edit: code corrigé
 
Dernière édition:

cp4

XLDnaute Barbatruc
re
@cp4 toujours par le bouton "enregistrer sous "c'est ça la demande ;)
tu peux m'expliquer a quoi sert le blocage de screenupdating avec la méthode open for output ???😅
Re,

Oui, je peux l'expliquer. C'est une coquille. Dans ma macro, il y avait une copie à faire préalablement à open for output. C'est un oubli qui n'a d'ailleurs aucune incidence sur le résultat final.;)
 

Discussions similaires

Réponses
13
Affichages
339

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T