Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

cp4

XLDnaute Barbatruc
Tu es formidable. Merci beaucoup pour ton aide.
Quel est le code pour ouvrir une boite enregistrer sous uniquement de la feuil3

Encore merci
Si le code répond à tes attentes. Merci de pointer le post pour facilité la recherche aux membres de XLD, dont tu fais parti.

Pour ta question, je t'invite à utiliser l'enregistreur de macro.

Bonne continuation.
 

flo189

XLDnaute Occasionnel
Merci à toi

Voici le code
Dim Fichier As String
Fichier = "Fichier CSV Cargo"
ThisWorkbook.Sheets("Feuil3").Copy
f = Application.GetSaveAsFilename(Fichier, Filefilter:="Excel Files (*.csv), *.csv*")
ActiveWorkbook.SaveAs Filename:=f
 

cp4

XLDnaute Barbatruc
Que veux-tu faire exactement? Je te répondrai plus tard car je suis très occupé.
 
Dernière édition:

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
 
Réactions: cp4

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:

Discussions similaires

Réponses
13
Affichages
368
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…