Split cle Dico dans fichier csv + tri

Bonjour,

Avec ce bout de code, je crée un fichier cvs à partir d'un dictionnaire. J'obtiens dans le csv une colonne avec 3 valeurs concaténées avec un séparateurs. ex: A&"|"&B&"|"&12/08/2006.

''trouver ce qui manque
    For Each cle In Tres
        If Not DicTest.Exists(cle) Then
        Dtres(cle) = Dtres(cle)
        End If
    Next cle

    If Dtres.Count > 0 Then '***
    Dim num As Integer
        num = FreeFile
Open ThisWorkbook.Path & "\" & "Archive des BD" & "\" & "Mesures" & "\" & "Manquants.csv" For Output As #num
If Dtres.Count > 0 Then
    For Each cle In Dtres.keys
        Print #num, cle
    Next cle
Else
    Print #num, "BD à jour"
End If
Close #num
End If

Je voudrais obtenir dans le fichier csv, chaque valeur dans une colonne et trier la colonne date en décroissant.

S'il est nécessaire de joindre un fichier, j'essaierai d'en faire un avec le juste nécessaire sans données confidentielles.

En vous remerciant par avance.

Bonjour,

j'ai enfin réussi à monter un fichier qui illustre dans l'ensemble mon problème. Présentement, le code transfère un dico vers un fichier csv.

Ce dico contient la concaténation d'une date et 2 données séparées par le caractère "|" (ex: 12/12/2016&"|"&Famille&"|"&sFamille).

Dans fichier, il n'y a qu'une seule colonne. Je voudrais avoir 3 colonnes: Date, Famille et sous famille avec un tri croissant des dates.

J'ai voulu splitter le dico dans un tableau vba, filtrer le tableau et ensuite transférer ce tableau vers le fichier csv.

Sub Export_csv()
    Dim Lig As Long, i As Integer, j As Integer, c As Long, k As Long, s As Long
    Dim Tb(), Dico As Object, Tr()
    Dim BD As Worksheet
    Dim cle

    Set BD = ThisWorkbook.Worksheets("BD")
    Set Dico = CreateObject("Scripting.Dictionary")
    '-------------------De la feuille BD---------------------------------------------------------
    'On récupère les données nécessaires dans dictionnaire Dico "Famille|SousFamille|date"
    Lig = BD.Range("A" & Rows.Count).End(xlUp).Row
    Tb = BD.Range("c2:R" & Lig).Value

    For i = 1 To UBound(Tb)
        If Tb(i, 16) = "M" Or Tb(i, 16) = "M/A" Then    'on ne traite que pour Test= M ou M/A
            If Tb(i, 2) <> "M1" Then    'on exclut la famille=M1
                If Not Dico.Exists(Tb(i, 1) & "|" & Tb(i, 2) & "|" & Tb(i, 3)) Then
                Dico(Tb(i, 1) & "|" & Tb(i, 2) & "|" & Tb(i, 3)) = ""
                End If
            End If
        End If
    Next i

    Feuil2.Range("A1") = "Export Actuel dans csv"
    Feuil2.Range("A2").Resize(Dico.Count) = Application.Transpose(Dico.Keys)    'report juste verifier exactitude resultat
'___________________________________________________________
'plusieurs procédures de traitement des données
'__________________________________________________________
'Je voudrais splitter le dico dans un tableau _
puis transférer ce tableau vers le csv au lieu de transférer le dico

'exportation dans le fichier csv
If Dico.Count > 0 Then '***
    Dim num As Integer
        num = FreeFile
Open ThisWorkbook.Path & "\" & "Archive des BD" & "\" & "Mesures" & "\" & "Manquantstests.csv" For Output As #num
If Dico.Count > 0 Then
    For Each cle In Dico.Keys
        Print #num, cle
    Next cle
Else
    Print #num, "BD à jour"
End If
Close #num
End If
End Sub

Tous mes essais ont été vains. J'ai vraiment besoin de votre aide. Je ne manipule pas bien ni les dicos, ni les tableaux vba.

En vous remerciant.

Bonjour,

essaie avec :

Print #num, replace(cle," | ",";")

Poour le tri il faut que tu transfères tes clés dans une variable tableau que tu tries.

eric

Bonjour,

je voyais ça comme ça pour splitter

If Dico.Count > 0 Then               '*** ton code
'------------------------------------------------
    Dim a, b, sp
    a = Dico.Keys                    ' 
    b = Dico.Items                   
    For i = 0 To UBound(a)
    sp = Split(a(i), "|")
    Cells(i + 2, 10).Value = CDate(sp(0))
    Cells(i + 2, 11).Value = sp(1)
    Cells(i + 2, 12).Value = sp(2)
    Next i
'----------------------------------------------
Dim num As Integer ' ton code

Bonjour,

@Eric: Tous mes remerciements, ta ligne de code fonctionne parfaitement. Pour le tri, là aussi je bogue pour le passage du dico au tableau vba. Merci beaucoup. Je vais approfondir mes recherches dans ce sens.

@ Patrick1957: Je te remercie beaucoup pour ta proposition. En fait, l'envoi sur mon classeur était juste pour vérifier que le résultat par code était bon, vu le grand nombre de lignes à traiter. Le résultat du traitement doit être mis dans le fichier csv. Je n'ai pas compris à quoi sert b=dico.items. Mais ton code me mets sur une voie pour mettre le dico dans un tableau.

Je vous remercie beaucoup. En espérant finaliser ce code en m'appuyant sur vos propositions, car je n'ai encore bien assimilé les tableaux et les dictionnaires vba.

Bon week-end.

Merci beaucoup pour le lien, tu es un sacré fouineur. Avant même de créer cette discussion, j'avais écumé une masse de page web.

Avec qu'il y a sur la page de ton lien, je pense parvenir à quelque chose.

Encore merci.

Bonne soirée et bon dimanche.

Rechercher des sujets similaires à "split cle dico fichier csv tri"