begin process at 2008 05 17 04:51:18
1 173 912 membres
44 nouveaux aujourd'hui
13 973 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CHARGER UNE MSFLEXGRID OU UNE LISTVIEW À PARTIR D'UN FICHIER TEXTE (ET VICE-VERSA) EN TENANT COMPTE DE LA TAILLE DES COLONNES [MODULE]


Information sur la source

Catégorie :Fichier / Disque Classé sous : fichier, listview, msflexgrid, sauver, afck Niveau : Débutant Date de création : 05/12/2007 Date de mise à jour : 05/12/2007 18:38:25 Vu / téléchargé: 4 425 / 591

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note


Description

bonjour,

juste un module qui peut se révéler pratique (aux vues des nombreuses demandes sur le forum) pour remplir une flex ou LV à partir d'un fichier texte, et de créer le fichier selon leur contenu

Source

  • ' ---------------------------------------------------------------------------------
  • ' [AFCK] (PCPT) Module Mod_ReadWrite v1.0.1 05 dec 2007
  • ' ---------------------------------------------------------------------------------
  • '
  • ' Nécessite :
  • ' Mod_ReadWrite.bas [*]
  • ' Msflxgrd.ocx "Microsoft FlexGrid Control 6.0 (SP6)"
  • ' MSCOMCTL.OCX "Microsoft Windows Common Controls 6.0 (SP6)"
  • '
  • '
  • ' ----------------
  • ' DESCRIPTION
  • ' ----------------
  • ' permet de charger et d'enregistrer un fichier texte
  • ' d'après une MsFlexGrid ou une ListView
  • '
  • '
  • '
  • ' ----------------
  • ' HISTORIQUE
  • ' ----------------
  • ' v1.0.1 05-12-2007
  • ' .GetArrayFile, FileFolderExists, IsArrayNull,
  • ' LeftToChar, RightFromChar, SetArrayFile
  • ' .FillFlexGridFromFile, SaveFileFromFlexGrid
  • ' .FillListViewFromFile, SaveFileFromListView
  • '
  • '
  • '
  • ' ----------------
  • ' INFORMATION
  • ' ----------------
  • ' .GetArrayFile : modif de http://www.codyx.org/snippet_lire-toutes-lignes-fichier-texte_22.aspx#67
  • ' .FileFolderExists : http://www.codyx.org/snippet_savoir-si-fichier-existe_65.aspx#208
  • ' .IsArrayNull : http://www.codyx.org/snippet_savoir-si-tableau-existe-dimension_231.aspx#747
  • '
  • ' ---------------------------------------------------------------------------------
  • ' dernière version http://www.vbfrance.com/code.aspx?ID=44934
  • ' ---------------------------------------------------------------------------------
  • Option Explicit
  • '
  • ' ===================== CONSTANTE =====================
  • Private Const INVALID_FILE_ATTRIBUTES As Long = &HFFFFFFFF
  • '
  • ' ===================== API =====================
  • Private Declare Function GetFileAttributes Lib "kernel32.dll" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
  • ' =============================================================
  • ' MéTHODES
  • ' =============================================================
  • '
  • '
  • ' *- REMPLI UNE FLEXGRID à PARTIR D'UN FICHIER TEXTE -*
  • Public Sub FillFlexGridFromFile(oFG As MSFlexGrid, ByVal sPath As String, Optional ByVal sColumnsSepar As String = vbTab, Optional ByVal sRowsSepar As String = vbCrLf, Optional ByVal bFirstColAsHeader As Boolean = True)
  • ' nécessite "Microsoft FlexGrid Control 6.0 (SP6)"
  • ' récupère le tableau du fichier
  • Dim aRows() As String
  • Call GetArrayFile(sPath, aRows, sRowsSepar)
  • With oFG
  • .Visible = False
  • ' tableau rempli ?
  • If Not IsArrayNull(aRows) Then
  • Dim i As Integer, j As Integer, aCols() As String
  • ' clear (on laisse une ligne et une colonne pour garder le header de la couleur désirée)
  • .Rows = 1: .Cols = IIf(bFirstColAsHeader, 1, 0): .Clear
  • For i = 0 To UBound(aRows)
  • aCols = Split(aRows(i), sColumnsSepar)
  • If i = 0 Then
  • ' header
  • .Rows = 1: .Cols = UBound(aCols) + 1
  • For j = 0 To UBound(aCols)
  • .ColWidth(j) = Val(LeftToChar(aCols(j), ":"))
  • .TextMatrix(0, j) = RightFromChar(aCols(j), ":")
  • Next j
  • Else
  • ' cellules
  • .Rows = .Rows + 1
  • For j = 0 To UBound(aCols)
  • .TextMatrix(i, j) = aCols(j)
  • Next j
  • End If
  • Erase aCols
  • Next i
  • Erase aRows
  • End If
  • .Visible = True
  • End With
  • End Sub
  • '
  • '
  • ' *- ENREGISTRE UNE FLEXGRID DANS UN FICHIER TEXTE -*
  • Public Sub SaveFileFromFlexGrid(oFG As MSFlexGrid, ByVal sPath As String, Optional ByVal sColumnsSepar As String = vbTab, Optional ByVal sRowsSepar As String = vbCrLf)
  • ' nécessite "Microsoft FlexGrid Control 6.0 (SP6)"
  • Dim aRows() As String, i As Integer, j As Integer
  • With oFG
  • ' dimensionne le tableau selon la grid
  • ReDim aRows(.Rows - 1)
  • ' header
  • aRows(0) = vbNullString
  • For j = 0 To .Cols - 1
  • aRows(0) = aRows(0) & CStr(.ColWidth(j)) & ":" & .TextMatrix(0, j) & sColumnsSepar
  • Next j
  • aRows(0) = LeftToChar(aRows(0), sColumnsSepar, True)
  • ' cellules
  • For i = 1 To .Rows - 1
  • aRows(i) = vbNullString
  • For j = 0 To .Cols - 1
  • aRows(i) = aRows(i) & .TextMatrix(i, j) & sColumnsSepar
  • Next j
  • aRows(i) = LeftToChar(aRows(i), sColumnsSepar, True)
  • Next i
  • End With
  • ' sauve
  • Call SetArrayFile(sPath, aRows, sRowsSepar)
  • Erase aRows
  • End Sub
  • '
  • '
  • ' *- REMPLI UNE LISTVIEW à PARTIR D'UN FICHIER TEXTE -*
  • Public Sub FillListViewFromFile(oLV As ListView, ByVal sPath As String, Optional ByVal sColumnsSepar As String = vbTab, Optional ByVal sRowsSepar As String = vbCrLf)
  • ' nécessite "Microsoft Windows Common Controls 6.0 (SP6)"
  • ' récupère le tableau du fichier
  • Dim aRows() As String
  • Call GetArrayFile(sPath, aRows, sRowsSepar)
  • With oLV
  • .Visible = False
  • ' tableau rempli?
  • If Not IsArrayNull(aRows) Then
  • Dim i As Integer, j As Integer, aCols() As String, Litem As ListItem
  • ' clear
  • .ListItems.Clear: .ColumnHeaders.Clear
  • For i = 0 To UBound(aRows)
  • aCols = Split(aRows(i), sColumnsSepar)
  • If i = 0 Then
  • ' header
  • For j = 0 To UBound(aCols)
  • .ColumnHeaders.Add , , RightFromChar(aCols(j), ":")
  • .ColumnHeaders.Item(j + 1).Width = Val(LeftToChar(aCols(j), ":"))
  • Next j
  • Else
  • ' cellules
  • Set Litem = .ListItems.Add(, , aCols(0))
  • For j = 1 To UBound(aCols)
  • Litem.SubItems(j) = IIf(LenB(aCols(j)) > 0, aCols(j), vbNullString)
  • Next j
  • End If
  • Erase aCols
  • Set Litem = Nothing
  • Next i
  • Erase aRows
  • End If
  • .Visible = True
  • End With
  • End Sub
  • '
  • '
  • ' *- ENREGISTRE UNE LISTVIEW DANS UN FICHIER TEXTE -*
  • Public Sub SaveFileFromListView(oLV As ListView, ByVal sPath As String, Optional ByVal sColumnsSepar As String = vbTab, Optional ByVal sRowsSepar As String = vbCrLf)
  • ' nécessite "Microsoft Windows Common Controls 6.0 (SP6)"
  • Dim aRows() As String, i As Integer, j As Integer
  • With oLV
  • ' dimensionne le tableau selon la listview
  • ReDim aRows(.ListItems.Count)
  • ' header
  • aRows(0) = vbNullString
  • For j = 1 To .ColumnHeaders.Count
  • aRows(0) = aRows(0) & CStr(Round(.ColumnHeaders.Item(j).Width)) & ":" & .ColumnHeaders(j).Text & sColumnsSepar
  • Next j
  • aRows(0) = LeftToChar(aRows(0), sColumnsSepar, True)
  • ' cellules
  • For i = 1 To .ListItems.Count
  • aRows(i) = .ListItems(i).Text & sColumnsSepar
  • For j = 1 To .ColumnHeaders.Count - 1
  • aRows(i) = aRows(i) & .ListItems(i).SubItems(j) & sColumnsSepar
  • Next j
  • aRows(i) = LeftToChar(aRows(i), sColumnsSepar, True)
  • Next i
  • End With
  • ' sauve
  • Call SetArrayFile(sPath, aRows, sRowsSepar)
  • Erase aRows
  • End Sub
  • ' =============================================================
  • ' PROCéDURES/FONCTIONS
  • ' =============================================================
  • '
  • '
  • ' *- RETOURNE LE CONTENU D'UN FICHIER, COMPLET ET SOUS FORME DE TABLEAU -*
  • Private Function GetArrayFile(ByVal sPath As String, Optional ByRef aLines As Variant, Optional ByVal sRowsSepar As String = vbCrLf) As String
  • Dim FF As Integer
  • If FileFolderExists(sPath) Then
  • FF = FreeFile
  • Open sPath For Input As #FF
  • GetArrayFile = Input(LOF(FF), #FF)
  • Close #FF
  • aLines = Split(GetArrayFile, sRowsSepar)
  • End If
  • End Function
  • '
  • '
  • ' *- EXISTANCE FICHIER/DOSSIER -*
  • Private Function FileFolderExists(ByRef vsPath As String) As Boolean
  • FileFolderExists = (GetFileAttributes(vsPath) <> INVALID_FILE_ATTRIBUTES)
  • End Function
  • '
  • '
  • ' *- TABLEAU DIMENSIONNé -*
  • Private Function IsArrayNull(ByRef aArray() As String) As Boolean
  • IsArrayNull = ((Not (Not aArray)) = 0)
  • End Function
  • '
  • '
  • ' *- GAUCHE JUSQU'à UN CARACTèRE (EXCLUS) -*
  • Private Function LeftToChar(ByVal sStr As String, ByVal sSepar As String, Optional bLast As Boolean = False) As String
  • Dim iPos As Integer
  • If bLast Then iPos = InStrRev(sStr, sSepar) * 2 - 1 Else iPos = InStrB(1, sStr, sSepar)
  • If iPos <= 0 Then
  • LeftToChar = vbNullString
  • Else
  • LeftToChar = LeftB$(sStr, iPos - 1)
  • End If
  • End Function
  • '
  • '
  • ' *- DROITE DEPUIS UN CARACTèRE (EXCLUS) -*
  • Private Function RightFromChar(ByVal sStr As String, ByVal sSepar As String) As String
  • Dim iPos As Integer
  • iPos = InStrB(1, sStr, sSepar)
  • If iPos = 0 Then
  • RightFromChar = vbNullString
  • Else
  • RightFromChar = RightB$(sStr, LenB(sStr) - iPos - 1)
  • End If
  • End Function
  • '
  • '
  • ' *- SAUVE UN TABLEAU DANS UN FICHIER -*
  • Private Sub SetArrayFile(ByVal sPath As String, ByRef aLines() As String, Optional sRowsSepar As String = vbCrLf)
  • Dim FF As Integer
  • FF = FreeFile
  • Open sPath For Output As #FF
  • Print #FF, Join(aLines, sRowsSepar);
  • Close #FF
  • End Sub
'   ---------------------------------------------------------------------------------
'   [AFCK] (PCPT)       Module Mod_ReadWrite                      v1.0.1  05 dec 2007
'   ---------------------------------------------------------------------------------
'
'   Nécessite :
'           Mod_ReadWrite.bas [*]
'           Msflxgrd.ocx "Microsoft FlexGrid Control 6.0 (SP6)"
'           MSCOMCTL.OCX "Microsoft Windows Common Controls 6.0 (SP6)"
'
'
'           ----------------
'             DESCRIPTION
'           ----------------
'           permet de charger et d'enregistrer un fichier texte
'               d'après une MsFlexGrid ou une ListView
'
'
'
'           ----------------
'             HISTORIQUE
'           ----------------
'   v1.0.1      05-12-2007
'                   .GetArrayFile, FileFolderExists, IsArrayNull,
'                       LeftToChar, RightFromChar, SetArrayFile
'                   .FillFlexGridFromFile, SaveFileFromFlexGrid
'                   .FillListViewFromFile, SaveFileFromListView
'
'
'
'           ----------------
'             INFORMATION
'           ----------------
'               .GetArrayFile       : modif de http://www.codyx.org/snippet_lire-toutes-lignes-fichier-texte_22.aspx#67
'               .FileFolderExists   : http://www.codyx.org/snippet_savoir-si-fichier-existe_65.aspx#208
'               .IsArrayNull        : http://www.codyx.org/snippet_savoir-si-tableau-existe-dimension_231.aspx#747
'
'   ---------------------------------------------------------------------------------
'   dernière version                       http://www.vbfrance.com/code.aspx?ID=44934
'   ---------------------------------------------------------------------------------



Option Explicit
'
'   =====================   CONSTANTE       =====================
Private Const INVALID_FILE_ATTRIBUTES       As Long = &HFFFFFFFF
'
'   =====================   API             =====================
Private Declare Function GetFileAttributes Lib "kernel32.dll" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long



'   =============================================================
'                           MéTHODES
'   =============================================================
'
'
'   *- REMPLI UNE FLEXGRID à PARTIR D'UN FICHIER TEXTE -*
Public Sub FillFlexGridFromFile(oFG As MSFlexGrid, ByVal sPath As String, Optional ByVal sColumnsSepar As String = vbTab, Optional ByVal sRowsSepar As String = vbCrLf, Optional ByVal bFirstColAsHeader As Boolean = True)
'   nécessite "Microsoft FlexGrid Control 6.0 (SP6)"

'   récupère le tableau du fichier
    Dim aRows() As String
    Call GetArrayFile(sPath, aRows, sRowsSepar)
    
    With oFG
        .Visible = False
'       tableau rempli ?
        If Not IsArrayNull(aRows) Then
            Dim i As Integer, j As Integer, aCols() As String
'           clear (on laisse une ligne et une colonne pour garder le header de la couleur désirée)
            .Rows = 1: .Cols = IIf(bFirstColAsHeader, 1, 0): .Clear
            For i = 0 To UBound(aRows)
                aCols = Split(aRows(i), sColumnsSepar)
                    If i = 0 Then
'                       header
                        .Rows = 1: .Cols = UBound(aCols) + 1
                        For j = 0 To UBound(aCols)
                            .ColWidth(j) = Val(LeftToChar(aCols(j), ":"))
                            .TextMatrix(0, j) = RightFromChar(aCols(j), ":")
                        Next j
                    Else
'                       cellules
                        .Rows = .Rows + 1
                        For j = 0 To UBound(aCols)
                            .TextMatrix(i, j) = aCols(j)
                        Next j
                    End If
                Erase aCols
            Next i
            Erase aRows
        End If
        .Visible = True
    End With
End Sub
'
'
'   *- ENREGISTRE UNE FLEXGRID DANS UN FICHIER TEXTE -*
Public Sub SaveFileFromFlexGrid(oFG As MSFlexGrid, ByVal sPath As String, Optional ByVal sColumnsSepar As String = vbTab, Optional ByVal sRowsSepar As String = vbCrLf)
'   nécessite "Microsoft FlexGrid Control 6.0 (SP6)"

    Dim aRows() As String, i As Integer, j As Integer
    
    With oFG
'       dimensionne le tableau selon la grid
        ReDim aRows(.Rows - 1)

'       header
        aRows(0) = vbNullString
        For j = 0 To .Cols - 1
            aRows(0) = aRows(0) & CStr(.ColWidth(j)) & ":" & .TextMatrix(0, j) & sColumnsSepar
        Next j
        aRows(0) = LeftToChar(aRows(0), sColumnsSepar, True)

'       cellules
        For i = 1 To .Rows - 1
            aRows(i) = vbNullString
            For j = 0 To .Cols - 1
                aRows(i) = aRows(i) & .TextMatrix(i, j) & sColumnsSepar
            Next j
            aRows(i) = LeftToChar(aRows(i), sColumnsSepar, True)
        Next i
    End With

'   sauve
    Call SetArrayFile(sPath, aRows, sRowsSepar)
    Erase aRows
End Sub
'
'
'   *- REMPLI UNE LISTVIEW à PARTIR D'UN FICHIER TEXTE -*
Public Sub FillListViewFromFile(oLV As ListView, ByVal sPath As String, Optional ByVal sColumnsSepar As String = vbTab, Optional ByVal sRowsSepar As String = vbCrLf)
'   nécessite "Microsoft Windows Common Controls 6.0 (SP6)"

'   récupère le tableau du fichier
    Dim aRows() As String
    Call GetArrayFile(sPath, aRows, sRowsSepar)
    
    With oLV
        .Visible = False
'       tableau rempli?
        If Not IsArrayNull(aRows) Then
            Dim i As Integer, j As Integer, aCols() As String, Litem As ListItem
'           clear
            .ListItems.Clear: .ColumnHeaders.Clear
            For i = 0 To UBound(aRows)
                aCols = Split(aRows(i), sColumnsSepar)
                    If i = 0 Then
'                       header
                        For j = 0 To UBound(aCols)
                            .ColumnHeaders.Add , , RightFromChar(aCols(j), ":")
                            .ColumnHeaders.Item(j + 1).Width = Val(LeftToChar(aCols(j), ":"))
                        Next j
                    Else
'                       cellules
                        Set Litem = .ListItems.Add(, , aCols(0))
                        For j = 1 To UBound(aCols)
                            Litem.SubItems(j) = IIf(LenB(aCols(j)) > 0, aCols(j), vbNullString)
                        Next j
                    End If
                Erase aCols
                Set Litem = Nothing
            Next i
            Erase aRows
        End If
        .Visible = True
    End With
End Sub
'
'
'   *- ENREGISTRE UNE LISTVIEW DANS UN FICHIER TEXTE -*
Public Sub SaveFileFromListView(oLV As ListView, ByVal sPath As String, Optional ByVal sColumnsSepar As String = vbTab, Optional ByVal sRowsSepar As String = vbCrLf)
'   nécessite "Microsoft Windows Common Controls 6.0 (SP6)"

    Dim aRows() As String, i As Integer, j As Integer
    
    With oLV
'       dimensionne le tableau selon la listview
        ReDim aRows(.ListItems.Count)

'       header
        aRows(0) = vbNullString
        For j = 1 To .ColumnHeaders.Count
            aRows(0) = aRows(0) & CStr(Round(.ColumnHeaders.Item(j).Width)) & ":" & .ColumnHeaders(j).Text & sColumnsSepar
        Next j
        aRows(0) = LeftToChar(aRows(0), sColumnsSepar, True)

'       cellules
        For i = 1 To .ListItems.Count
            aRows(i) = .ListItems(i).Text & sColumnsSepar
            For j = 1 To .ColumnHeaders.Count - 1
                aRows(i) = aRows(i) & .ListItems(i).SubItems(j) & sColumnsSepar
            Next j
            aRows(i) = LeftToChar(aRows(i), sColumnsSepar, True)
        Next i
    End With

'   sauve
    Call SetArrayFile(sPath, aRows, sRowsSepar)
    Erase aRows
End Sub



'   =============================================================
'                           PROCéDURES/FONCTIONS
'   =============================================================
'
'
'   *- RETOURNE LE CONTENU D'UN FICHIER, COMPLET ET SOUS FORME DE TABLEAU -*
Private Function GetArrayFile(ByVal sPath As String, Optional ByRef aLines As Variant, Optional ByVal sRowsSepar As String = vbCrLf) As String
    Dim FF As Integer
    If FileFolderExists(sPath) Then
        FF = FreeFile
        Open sPath For Input As #FF
            GetArrayFile = Input(LOF(FF), #FF)
        Close #FF
        aLines = Split(GetArrayFile, sRowsSepar)
    End If
End Function
'
'
'   *- EXISTANCE FICHIER/DOSSIER -*
Private Function FileFolderExists(ByRef vsPath As String) As Boolean
    FileFolderExists = (GetFileAttributes(vsPath) <> INVALID_FILE_ATTRIBUTES)
End Function
'
'
'   *- TABLEAU DIMENSIONNé -*
Private Function IsArrayNull(ByRef aArray() As String) As Boolean
    IsArrayNull = ((Not (Not aArray)) = 0)
End Function
'
'
'   *- GAUCHE JUSQU'à UN CARACTèRE (EXCLUS) -*
Private Function LeftToChar(ByVal sStr As String, ByVal sSepar As String, Optional bLast As Boolean = False) As String
    Dim iPos As Integer
    If bLast Then iPos = InStrRev(sStr, sSepar) * 2 - 1 Else iPos = InStrB(1, sStr, sSepar)
    
    If iPos <= 0 Then
        LeftToChar = vbNullString
    Else
        LeftToChar = LeftB$(sStr, iPos - 1)
    End If
End Function
'
'
'   *- DROITE DEPUIS UN CARACTèRE (EXCLUS) -*
Private Function RightFromChar(ByVal sStr As String, ByVal sSepar As String) As String
    Dim iPos As Integer
    iPos = InStrB(1, sStr, sSepar)
    If iPos = 0 Then
        RightFromChar = vbNullString
    Else
        RightFromChar = RightB$(sStr, LenB(sStr) - iPos - 1)
    End If
End Function
'
'
'   *- SAUVE UN TABLEAU DANS UN FICHIER -*
Private Sub SetArrayFile(ByVal sPath As String, ByRef aLines() As String, Optional sRowsSepar As String = vbCrLf)
    Dim FF As Integer
    FF = FreeFile
    Open sPath For Output As #FF
        Print #FF, Join(aLines, sRowsSepar);
    Close #FF
End Sub

Conclusion

4 fonctions à utiliser, pas bien compliqué. une form exemple est néanmoins fournie
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

05 décembre 2007 18:38:26 :
code (pour ne pas DL le zip)
  • signaler à un administrateur
    Commentaire de Exploreur le 05/12/2007 18:47:53

    Salut PCPT,

    Ben pour une suprise...c'est une suprise...

    A+
    Exploreur

  • signaler à un administrateur
    Commentaire de Exploreur le 05/12/2007 18:56:30 10/10

    Re,

    Viens d'essayer...parfait....J'vais même peut-être m'en servir dans ma dernière source..lol..

    A+
    Exploreur

  • signaler à un administrateur
    Commentaire de PCPT le 05/12/2007 18:57:56 administrateur CS

    ah non c'est pas çà du tout ^^
    soit patient, aucun rapport ;)

  • signaler à un administrateur
    Commentaire de Exploreur le 05/12/2007 19:06:37

    Re,

    En tous cas cela est bien pratique...

    A+
    Exploreur

  • signaler à un administrateur
    Commentaire de pobos le 17/12/2007 13:20:16

    Salut PCPT,
    j'ai essayé ton code et ça marche parfaitement.j'aimerais savoir quelle constante utiliser lorsque le séparateur des colonnes est un ;

  • signaler à un administrateur
    Commentaire de PCPT le 17/12/2007 16:37:56 administrateur CS

    salut,

    il suffit de mettre ";" dans le 3e agument qui est vbtab par défaut
    Call SaveFileFromListView(ListView1, "C:\fichier.txt", ";")

  • signaler à un administrateur
    Commentaire de pobos le 18/12/2007 08:54:23

    merci!

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS