XL 2010 Macro Synthèse Excel Vba

Mirguy23

XLDnaute Nouveau
Bonjour à tous,

Je me retrouve confronter un petit problème lors de la synthèse de toute mes feuilles et j'espère que vous pourrez m'aider .
Contexte:
J'ai plusieurs feuilles dans un même fichier, en totale 7 feuilles..
- Six feuilles qui contiennent des données différentes et la septième est la feuille ou la macro vient faire la synthèse de toute les feuilles.


Difficulté:
J'ai rajouté des données sur d'autres feuilles, et les informations ajoutées n'apparaissent pas dans la feuille que s'effectue la synthèse. C'est toujours la même synthèse.


J'ai tenté des trucs mais je n'y suis pas du tout. Je vous mets tout de même les lignes de codes de ma macro mais je suis preneur de toute proposition
icon_smile.gif
.

Le lien pour le fichier
https://www.cjoint.com/c/IFAoBUIqcUN


VB:
Option Explicit

Sub AfficherDelais(ByVal ligneRes As Integer, ByVal delai As Single)
    Dim dateLiv As Date, today As Date
    Dim retard As Single
    today = Date
    If ligneRes > 0 Then
    With shSynthese
        dateLiv = CDate(.Cells(ligneRes, 18))
       retard = CInt((today - dateLiv + delai) * 10) / 10
        delai = CInt(10 * delai) / 10
       .Cells(ligneRes, 27) = delai & " jrs"
        
        If retard > 0 Then
            .Cells(ligneRes, 28).Value = retard & " jrs"
            .Cells(ligneRes, 28).Font.Color = RGB(255, 0, 0)
        End If
    
        .Range("R" & ligneRes & ":AB" & ligneRes).Borders(xlEdgeTop).LineStyle = xlDash
    End With    'shSynthese
    End If
End Sub
Function GetInfosCC(ByRef CC As String, ByVal tpsRestant As Single, ByRef tpsAttente As Single) As Single
    Dim ligne As Integer
    
    ligne = 1
    
    With shCC
        'TQ on a pas trouvé le centre de charge mais qu'il reste des lignes
        While .Cells(ligne, 1).Value <> CC And .Cells(ligne, 1).Value <> ""
            ligne = ligne + 1
        Wend    'Fin TQ on a pas trouvé le centre de charge
        
        'Si on a trouvé le centre de charge
        If .Cells(ligne, 1).Value = CC Then
            tpsAttente = .Cells(ligne, 3)
            
            'Si on a pas de capacité (sous-traitance)
            If .Cells(ligne, 8) = "" Then
                GetInfosCC = 0
            Else
                GetInfosCC = tpsRestant / .Cells(ligne, 8)
            End If  'Fin si on a pas de capacité
        Else
            tpsAttente = 0
            GetInfosCC = 0
        End If  'Fin si on a trouvé le centre de charge
    End With    'shCC
End Function

Private Sub CheckChk()
    If chkCC.Value = True And chkCommandes.Value = True And chkOA.Value = True And chkOF.Value = True And chkOFMontage.Value = True Then
        chkTout.Value = True
    ElseIf chkCC.Value = False And chkCommandes.Value = False And chkOA.Value = False And chkOF.Value = False And chkOFMontage.Value = False Then
        chkTout.Value = False
    Else
        chkTout.Value = Null
    End If
End Sub

Private Sub chkCC_Click()
    Call CheckChk
End Sub
Private Sub chkCommandes_Click()
    Call CheckChk
End Sub
Private Sub chkOA_Click()
   Call CheckChk
End Sub
Private Sub chkOF_Click()
    Call CheckChk
End Sub
Private Sub chkOFMontage_Click()
    Call CheckChk
End Sub

Private Sub chkTout_Click()
    Dim etat As Boolean
    
    etat = chkTout.Value
    
    chkCC.Value = etat
    chkCommandes.Value = etat
    chkOA.Value = etat
    chkOF.Value = etat
    chkOFMontage = etat

End Sub

Function CopyOA(projet, article, ByVal ligneRes As Integer, OA As Integer)

    Dim lastTop(5)
    
    Dim res As Range
    Dim firstAddress As String
    
    Dim ligneOA As Long
    Dim colOA As Integer
    
    
    'nb d'OA correspondants à la commande
    OA = 0
    
    'Application.ScreenUpdating = False
    
    With shOA
        Set res = .Range("B:B").Find(What:=article, LookIn:=xlFormulas, LookAt _
            :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
            :=False, SearchFormat:=False)
    
        If Not res Is Nothing Then
            firstAddress = res.Address
            Do
                ligneOA = res.Row
        
                If .Cells(ligneOA, 1) = projet And res.Value = article Then
                    For colOA = 3 To 7
                        If OA = 0 Or .Cells(ligneOA, colOA).Value <> lastTop(colOA - 2) Then
                            shSynthese.Cells(ligneRes, colOA + 26).Value = .Cells(ligneOA, colOA).Value
                            lastTop(colOA - 2) = .Cells(ligneOA, colOA).Value
                        End If
                        
                    Next colOA
                    
                    OA = OA + 1
                    ligneRes = ligneRes + 1
                End If
                Set res = .Range("B:B").FindNext(After:=res)
            Loop While Not res Is Nothing And res.Address <> firstAddress
        End If
    End With    'shOA
    
    If OA > 0 Then
        With shSynthese.Range("AC" & ligneRes - OA & ":AG" & ligneRes - 1)
            'bordure épaisse :
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlEdgeBottom).Weight = xlMedium
        
            'couleur de cellules : blanc
            .Interior.Color = RGB(255, 255, 255)
        End With    'shSynthese.Range("AC" & ligneRes - oa & ":AG" & ligneRes - 1)
    End If
End Function

Function CopyOF(projet, article, ByVal ligneRes As Integer, of As Integer)

    Dim lastTop(14)
    Dim nbTabOF As Integer
    
    Dim res As Range
    Dim delai As Single, tpsAttente As Single, capacite As Single
    
    Dim firstAddress As String
    Dim ligneDebut As Long, ligneOF As Long
    Dim colOF As Integer
    

    
    'nb d'OF correspondants à la commande
    of = 0
    ligneDebut = 0
    
    
    With shOF
        Set res = .Range("B:B").Find(What:=article, LookIn:=xlFormulas, LookAt _
            :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
            :=False, SearchFormat:=False)
    
        If Not res Is Nothing Then
            firstAddress = res.Address
            Do
                ligneOF = res.Row
                
                'Si la ligne d'OF correspond
                If .Cells(ligneOF, 1) = projet And res.Value = article Then
                
                    'Si même OF
                    If .Cells(ligneOF, 4) = lastTop(2) Then
                        delai = delai + tpsAttente      'Ajout du temps d'attente précédent
                        delai = delai + GetInfosCC(.Cells(ligneOF, 8), .Cells(ligneOF, 10) - .Cells(ligneOF, 11), tpsAttente)
                    
                        For colOF = 3 To 11
                            'Si un nouvel OF
                            If colOF > 7 Or of = 0 Or .Cells(ligneOF, colOF).Value <> lastTop(colOF - 2) Then
                                shSynthese.Cells(ligneRes, colOF + 15).Value = .Cells(ligneOF, colOF).Value
                                lastTop(colOF - 2) = .Cells(ligneOF, colOF).Value
                                
                                'On enregistre l'OF
                                ReDim tabOF(nbTabOF + 1)
                                tabOF(nbTabOF) = .Cells(ligneOF, 4).Value
                                nbTabOF = nbTabOF + 1
                            End If  'Fin si un nouvel OF
                        Next colOF
                    Else
                        For colOF = 3 To 11
                            'On réaffiche toutes les informations
                            shSynthese.Cells(ligneRes, colOF + 15).Value = .Cells(ligneOF, colOF).Value
                            lastTop(colOF - 2) = .Cells(ligneOF, colOF).Value
                            
                            'On enregistre l'OF
                            ReDim tabOF(nbTabOF + 1)
                            tabOF(nbTabOF) = .Cells(ligneOF, 4).Value
                            nbTabOF = nbTabOF + 1
                            'Fin si un nouvel OF
                        Next colOF
                        
                        
                        'Si on a déjà fait un OF avant :
                        If ligneDebut <> 0 Then
                            Call AfficherDelais(ligneDebut, delai)
                        End If  'Fin si on a déjà fait un OF avant
                        
                        ligneDebut = ligneRes
                        delai = GetInfosCC(.Cells(ligneOF, 8), .Cells(ligneOF, 10) - .Cells(ligneOF, 11), tpsAttente)
                    End If  'Fin si même OF
                    
                    'Si sous-traitance
                    If .Cells(ligneOF, 12) <> "" Then
                        For colOF = 12 To 16
                            If of = 0 Or .Cells(ligneOF, colOF).Value <> lastTop(colOF - 2) Then
                                shSynthese.Cells(ligneRes, colOF + 17).Value = .Cells(ligneOF, colOF).Value
                                lastTop(colOF - 2) = .Cells(ligneOF, colOF).Value
                            End If
                        Next colOF
                        shSynthese.Range("AC" & ligneRes & ":AG" & ligneRes).Interior.Color = RGB(255, 255, 255)
                    End If
                    
                    of = of + 1
                    ligneRes = ligneRes + 1
                End If
                Set res = .Range("B:B").FindNext(After:=res)
            Loop While Not res Is Nothing And res.Address <> firstAddress
            
            'Affichage du délai et du retard
            Call AfficherDelais(ligneDebut, delai)
        End If
    End With    'shOF
    If of > 0 Then
        With shSynthese.Range("R" & ligneRes - of & ":AB" & ligneRes - 1)
            'bordure épaisse :
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlEdgeBottom).Weight = xlMedium
            
            'couleur de cellules : blanc
            .Interior.Color = RGB(255, 255, 255)
        End With 'shSynthese.Range("R" & ligneRes - of & ":AB" & ligneRes - 1)
    End If
    shSynthese.Activate
End Function
Function CheckOFMontage(ByRef article As String, ByRef dateDebut As Date, ByRef dateFin As Date) As Integer
    Dim besoin As Integer
    Dim res As Range
    Dim firstAddress As String
    Dim ligne As Long
    
    besoin = 0
    
    With shOFMontage
        Set res = .Range("B:B").Find(What:=article, LookIn:=xlFormulas, LookAt _
            :=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
            :=False, SearchFormat:=False)
    
        If Not res Is Nothing Then
            firstAddress = res.Address
            Do
                ligne = res.Row
                
                'Les ventes sont prioritaires
                If .Cells(ligne, 3) >= dateDebut And .Cells(ligne, 3) < dateFin Then
                    besoin = besoin + .Cells(ligne, 8)
                    dateDebut = .Cells(ligne, 3)
                End If
            
                Set res = .Range("B:B").FindNext(After:=res)
            Loop While Not res Is Nothing And res.Address <> firstAddress
        End If
    End With    'shOFMontage
    CheckOFMontage = besoin
End Function
'Renvoie Vrai si les stocks ne sont pas suffisants pour honorer la commande
Function CheckStocks(ByRef restants() As QteStock, ByRef nbLus As Integer, ByVal article As String, ByVal besoin As Integer, ByVal stock, ByVal ladate As Date) As Long
    Dim i As Integer
    i = 1
    While i <= nbLus And restants(i).article <> article
        i = i + 1
    Wend
    
    'si on a déjà lu l'article recherché
    If i <= nbLus Then
        restants(i).stock = restants(i).stock - besoin
    'sinon, on lit l'article pour la première fois
    Else
        'ajout de l'article
        restants(i).stock = stock - besoin
        restants(i).article = article
        restants(i).dateBesoin = CDate("1 / 1 / 1900")
        nbLus = nbLus + 1
    End If
    
    restants(i).stock = restants(i).stock - CheckOFMontage(article, restants(i).dateBesoin, ladate)
    restants(i).dateBesoin = ladate
    
    'les stocks suffisent-ils à satisfaire la commande en cours ?
    CheckStocks = restants(i).stock
End Function

Private Sub CleanImports()
    shCommande.Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    shOF.Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    shOA.Range("A:IV").Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    
    shCommande.Cells.Replace What:=Chr(160), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    shOF.Cells.Replace What:=Chr(160), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
    shOA.Range("A:IV").Cells.Replace What:=Chr(160), Replacement:="", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False
End Sub
Private Sub MakeSynthese()
    Dim restants() As QteStock      'tableau du stock restant pour chaque article lu
    Dim articlesLus As Integer       'nombre d'articles lus
    Dim stockTheo As Long
    
    Dim nbOF As Integer
    Dim nbOA As Integer
    
    Dim ligneRes As Long, ligneCmd As Long
    Dim col As Integer
    
    Dim ensemble As String, projet As String, article As String
    Dim lastEnsemble As String, lastProjet As String, lastArticle As String
    
    
    ReDim restants(shCommande.Range("A:A").End(xlDown).Row)
    With shSynthese
        .Activate
        With .Range("A:IV")
            'Effacement des bordures sur la feuille
            .Borders.LineStyle = xlLineStyleNone
            
            'couleur de cellules : gris
            .Interior.Pattern = xlPatternNone
            .Interior.Color = RGB(192, 192, 192)
            .ClearContents
            .Font.Color = RGB(0, 0, 0)
            .Font.Bold = False
        End With    '.Range ("A:IV")
        
        .Range("A1:AG1") = Array("Date", "Cde", "Client", "Nom", "Lg", "Projet", "Code article", "Description", "Qté cdée", "A livrer", _
                                    "Code article", "Description", "Besoin", "Sto phy", "Sto cde", "Sto rés", "Sto théo", "Livr", "OF", "Qté plan", " Qté réal", "Opé", " CC", "Description", "Tps all", " Temps pass", "Délai", "Retard", _
                                    "N° ordre", "Fourn", "pos", "Qté rest", "Récept")
        .Range("A1:AG1").Font.Bold = True
        .Range("A1:J1").Interior.Color = RGB(0, 0, 255)
        .Range("A1:J1").Font.Color = RGB(255, 255, 255)
        .Range("K1:Q1").Interior.Color = RGB(255, 255, 128)
        .Range("R1:AB1").Interior.Color = RGB(255, 192, 128)
        .Range("AC1:AG1").Interior.Color = RGB(192, 255, 128)
        
        Call AnnulerFusionCellules
        
        
    End With
    
    'nb de ligne ds la feuille finale
    ligneRes = 2
    ensemble = "aaaaaaaaaaaaaaaaa"
    projet = "aaaaaaaaaaaaaaaaaaa"
    article = ""
    'Pour chaque commande
    
    articlesLus = 0 'on n'a détecté aucun article
    ligneCmd = 6    '1ère ligne du carnet de commandes à prendre en compte
    
    With shSynthese
        
        While shCommande.Cells(ligneCmd, 1) <> ""
            'ligneRes = ligneRes + 1
            
            lastEnsemble = ensemble
            lastProjet = projet
            lastArticle = article
            
            ensemble = shCommande.Cells(ligneCmd, 7)
            projet = shCommande.Cells(ligneCmd, 6)
            article = shCommande.Cells(ligneCmd, 12)
                
            'si la ligne correspond à un nouvel article on l'affiche
            If ensemble <> lastEnsemble Or projet <> lastProjet And (projet <> "" Or lastProjet <> "") Then
                'Si ni OA ni OF pour l'article précédent trouvés
                If .Cells(ligneRes, 1) <> "" Then
                    'si la pièce est prête
                    If .Cells(ligneRes, 17) = "" Then
                        With .Range("A" & ligneRes & ":Q" & ligneRes)
                            If .Cells(1, 9).Value = .Cells(1, 10).Value Then
                                .Interior.Color = RGB(192, 255, 128)   'ligne sans OF ni OA en vert
                            Else
                                .Interior.Color = RGB(255, 255, 0)   'gestion des reliquats en jaune
                                shSynthese.Range("K" & ligneRes & ":Q" & ligneRes).Merge
                                .Cells(1, 11).Value = "En attente de décision (confirmation des reliquats)"
                            End If
                            
                            .Font.Bold = True
                        End With
                    End If
                        
                    ligneRes = ligneRes + 1     'saut de ligne pour ne pas écraser l'ensemble vide
                End If
                For col = 1 To 10
                    .Cells(ligneRes, col).Value = shCommande.Cells(ligneCmd, col).Value
                Next col
                'bordure épaisse :
                .Range("A" & ligneRes & ":AG" & ligneRes).Borders(xlEdgeTop).Weight = xlThick
            End If
            
    
            If article <> "" Then
                'si le stock ne suffit pas
                stockTheo = CheckStocks(restants, articlesLus, article, shCommande.Cells(ligneCmd, 14).Value, shCommande.Cells(ligneCmd, 15).Value, CDate(shCommande.Cells(ligneCmd, 1).Value))
                If stockTheo < 0 Then
                    .Cells(ligneRes, 17).Value = stockTheo
                    Call CopyOF(projet, article, ligneRes, nbOF)
                    Call CopyOA(projet, article, ligneRes, nbOA)
    
                    If article <> lastArticle Or ensemble <> lastEnsemble Then
                        .Cells(ligneRes, 11) = article
                    End If
                    'quantités (à livrer, stock, en commande, en réserve
                    For col = 13 To 17
                        .Cells(ligneRes, col - 1).Value = shCommande.Cells(ligneCmd, col).Value
                    Next col
                    
                    If (nbOA > nbOF) Then nbOF = nbOA
                    If (nbOF > 0) Then
                        .Range("A" & ligneRes & ":Q" & ligneRes + nbOF - 1).Interior.Color = RGB(255, 255, 255)
                        ligneRes = ligneRes + nbOF
                    Else
                        With .Range("A" & ligneRes & ":Q" & ligneRes)
                            .Font.Color = RGB(255, 255, 255)
                            .Font.Bold = True
                            .Interior.Color = RGB(192, 0, 0)
                            .Interior.Pattern = xlPatternGray8
                        End With
                        ligneRes = ligneRes + 1
                    End If
                'sinon, le stock suffit
                Else
                                
                End If
            End If
            ligneCmd = ligneCmd + 1
        Wend
        
        If nbOF > 0 Then
        '    ligneRes = ligneRes - 1
        End If
        
        If ensemble = lastEnsemble And .Cells(ligneRes, 1) = "" Then
            ligneRes = ligneRes - 1
        Else
            'éventuellement la dernière ligne est un ensemble vide, auquel cas on la colore en vert
            If .Cells(ligneRes, 17) = "" Then
                With .Range("A" & ligneRes & ":Q" & ligneRes)
                    .Interior.Color = RGB(192, 255, 128)   'ligne sans OF ni OA en vert
                    .Font.Bold = True
                End With
            End If
        End If
        
        .Range("A2:AG" & ligneRes).Borders(xlInsideVertical).Weight = xlThin
    End With
    
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$1"
        .PrintTitleColumns = ""
    End With
    ActiveSheet.PageSetup.PrintArea = "$A$1:$AG$" & ligneRes
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = "&""Arial,Gras""&14CARNET DE COMMANDES ET MANQUANTS" _
                        & " du " & shCommande.Range("C3").Value & " au " & shCommande.Range("C4").Value _
                        & Chr(10) & "Horizon des OF et OA: " & shOF.Range("C2").Value
                        
        .RightHeader = "&D"
        .LeftFooter = ""
        .CenterFooter = "Page &P de &N"
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.393700787401575)
        .RightMargin = Application.InchesToPoints(0.354330708661417)
        .TopMargin = Application.InchesToPoints(0.984251968503937)
        .BottomMargin = Application.InchesToPoints(0.984251968503937)
        .HeaderMargin = Application.InchesToPoints(0.511811023622047)
        .FooterMargin = Application.InchesToPoints(0.511811023622047)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 70
        .PrintErrors = xlPrintErrorsDisplayed
    End With
End Sub
Private Sub ResetForm(feuille As Worksheet)
    feuille.Range("A:IV").ClearContents
End Sub
Private Sub cmdReset_Click()
    If chkCC.Value = True Then Call ResetForm(shCC)
    If chkCommandes.Value = True Then Call ResetForm(shCommande)
    If chkOA.Value = True Then Call ResetForm(shOA)
    If chkOF.Value = True Then Call ResetForm(shOF)
    If chkOFMontage.Value = True Then Call ResetForm(shOFMontage)
End Sub

Private Sub cmdSyntheseDateClient_Click()

   'Suppression des commentaires AG 31:0:713
   Worksheets("Synthese").Columns("S:S").ClearComments
  
  
   'pour eviter de ralentir, on affiche les modifs seulement à la fin
    Application.ScreenUpdating = False
    
    Call CleanImports
    
    shCommande.Activate
    Rows("6:6").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Sort Key1:=Range("G6"), Order1:=xlAscending, _
                    Key2:=Range("E6"), Order2:=xlAscending, _
                    Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
    Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, _
                    Key2:=Range("C6"), Order2:=xlAscending, _
                    Key3:=Range("B6"), Order3:=xlAscending, _
                    Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
    Call MakeSynthese
    Application.ScreenUpdating = True
End Sub


Private Sub cmdSyntheseDateCommande_Click()
    

   'Suppression des commentaires AG 31:0:713
   Worksheets("Synthese").Columns("S:S").ClearComments
      
    
    'pour eviter de ralentir, on affiche les modifs seulement à la fin
    Application.ScreenUpdating = False
    
    Call CleanImports
    
    shCommande.Activate
    Rows("6:6").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Sort Key1:=Range("A6"), Order1:=xlAscending, _
                    Key2:=Range("B6"), Order2:=xlAscending, _
                    Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
    Call MakeSynthese
       Application.ScreenUpdating = True
End Sub


Private Sub MultiPage1_Change()

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = True
    
    If Height < 50 Then
        Height = 227
    Else
        Height = 5
    End If
End Sub

Sub AnnulerFusionCellules()
    Columns("A:AG").Select
    With Selection
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
End Sub
 

Statistiques des forums

Discussions
311 734
Messages
2 082 020
Membres
101 872
dernier inscrit
Colin T