[OK] Demande d'aide pour Menu de la semaine

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[OK] Demande d'aide pour Menu de la semaine

Message par Micoute »

Bonjour à tous,
j'essaie de faire pour ma très chère épouse adorée, un menu de la semaine pour pouvoir faire la liste d'achats, bien entendu il est complètement fonctionnel, mais j'aimerais ajouter une sauvegarde Json et une recharge, pour pouvoir modifier ou compléter un menu.

Le problème c'est que je ne sais pas sauvegarder un tableau et là il y en a 2, alors ça complique un peu, mais si je comprenais le principe, ce serait plus simple.

Je sollicite une fois de plus votre aide gracieuse et je vous en remercie par anticipation.

http://s000.tinyupload.com/?file_id=528 ... 9702865113

Le programme seul:

Code : Tout sélectionner

XIncludeFile "Fonctions_Date.pbi"
XIncludeFile "Imprime facile 2.pbi"

Enumeration Fenetres
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets
  #Text_Lundi
  #Text_Lundi_Midi
  #Text_Lundi_Soir
  #Text_Mardi
  #Text_Mardi_Midi
  #Text_Mardi_Soir
  #Text_Mercredi
  #Text_Mercredi_Midi
  #Text_Mercredi_Soir
  #Text_Jeudi
  #Text_Jeudi_Midi
  #Text_Jeudi_Soir
  #Text_Vendredi
  #Text_Vendredi_Midi
  #Text_Vendredi_Soir
  #Text_Samedi
  #Text_Samedi_Midi
  #Text_Samedi_Soir
  #Text_Dimanche
  #Text_Dimanche_Midi
  #Text_Dimanche_Soir
  
  #Str_Lundi_Midi_Plat1
  #Str_Lundi_Midi_Plat2
  #Str_Lundi_Soir_Plat1
  #Str_Lundi_Soir_Plat2
  #Str_Mardi_Midi_Plat1
  #Str_Mardi_Midi_Plat2
  #Str_Mardi_Soir_Plat1
  #Str_Mardi_Soir_Plat2
  #Str_Mercredi_Midi_Plat1
  #Str_Mercredi_Midi_Plat2
  #Str_Mercredi_Soir_Plat1
  #Str_Mercredi_Soir_Plat2
  #Str_Jeudi_Midi_Plat1
  #Str_Jeudi_Midi_Plat2
  #Str_Jeudi_Soir_Plat1
  #Str_Jeudi_Soir_Plat2
  #Str_Vendredi_Midi_Plat1
  #Str_Vendredi_Midi_Plat2
  #Str_Vendredi_Soir_Plat1
  #Str_Vendredi_Soir_Plat2
  #Str_Samedi_Midi_Plat1
  #Str_Samedi_Midi_Plat2
  #Str_Samedi_Soir_Plat1
  #Str_Samedi_Soir_Plat2
  #Str_Dimanche_Midi_Plat1
  #Str_Dimanche_Midi_Plat2
  #Str_Dimanche_Soir_Plat1
  #Str_Dimanche_Soir_Plat2
  #BarreStatut
  #Bouton_Imprimer
  #Bouton_Sauvegarder
  #Bouton_Charger
  #Container_Lundi
  #Container_Mardi
  #Container_Mercredi
  #Container_Jeudi
  #Container_Vendredi
  #Container_Samedi
  #Container_Dimanche
  #Spn_Semaine
EndEnumeration

Enumeration Json
  #Fichier_Json
EndEnumeration  

Enumeration Polices
  #Police
  #Police2
EndEnumeration

;- Variables globales
Global.i i
Global Dim PlatM.s(6, 1)
Global Dim PlatS.s(6, 1)
Global NewList Lplats.s()
Global.i Police, Police2, evenement, nb_jour.w, date_1erjour_annee.l, date_debut_semaine.s, date_fin_semaine.s

Police = LoadFont(#Police, "Comic Sans MS", 16 , #PB_Font_Bold) 
Police2 = LoadFont(#Police2, "Comic Sans MS", 8 , #PB_Font_Bold) 

Procedure.s SemaineVersDate(numero_semaine.b, Annee.q = -1)
  
  If Annee < 0
    annee = Year(Date())
  EndIf
  
  nb_jour = 7*(numero_semaine + 2)
  ;Debug nb_jour
  
  date_1erjour_annee = ParseDate("%dd/%mm/%yyyy", "01/01/"+Str(annee))
  
  date_debut_semaine.s = FormatDate("%dd/%mm/%yyyy", AddDate(date_1erjour_annee, #PB_Date_Day, nb_jour-DayOfWeek(Date(Annee,1,1,0,0,0))+1))
  date_fin_semaine.s = FormatDate("%dd/%mm/%yyyy", AddDate(date_1erjour_annee, #PB_Date_Day, nb_jour-DayOfWeek(Date(Annee,1,1,0,0,0))+7))
  
  ProcedureReturn "du "+date_debut_semaine + " au "+ date_fin_semaine
EndProcedure

Procedure Charger()
  
EndProcedure

Procedure Sauvegarder()
  CreateJSON(#Fichier_Json)
  
  InsertJSONArray(JSONValue(#Fichier_Json), PlatM())
  InsertJSONArray(JSONValue(#Fichier_Json), PlatS())
  
  SaveJSON(#Fichier_Json, "Menu de la semaine du " + date_debut_semaine + " au "+ date_fin_semaine + ".Json")
EndProcedure

Procedure Imprimer()
  If DefaultPrinter()
    If StartPrinting("Menu")
      StartDrawing(PrinterOutput())
      MLD_ImpFont("Georgia", 18, #PB_Font_HighQuality, 0, 0, $8B453B)
      MLD_ImpText(-2, 10, "Menu de la semaine du " + date_debut_semaine + " au "+ date_fin_semaine) ; texte centré
      
      MLD_ImpText(40, 30, "Midi")
      MLD_ImpText(120, 30, "Soir")
      MLD_ImpText(10, 40, "Lundi ")
      MLD_ImpText(40, 40, PlatM(0,0))
      MLD_ImpText(120, 40, PlatS(0,0))
      MLD_ImpText(40, 45, PlatM(0,1))
      MLD_ImpText(120, 45, PlatS(0,1))
      
      MLD_ImpText(40, 65, "Midi")
      MLD_ImpText(120, 65, "Soir")
      MLD_ImpText(10, 75, "Mardi ")
      MLD_ImpText(40, 75, PlatM(1,0))
      MLD_ImpText(120, 75, PlatS(1,0))
      MLD_ImpText(40, 80, PlatM(1,1))
      MLD_ImpText(120, 80, PlatS(1,1))
      
      MLD_ImpText(40, 100, "Midi")
      MLD_ImpText(120, 100, "Soir")
      MLD_ImpText(10, 110, "Mercredi ")
      MLD_ImpText(40, 110, PlatM(2,0))
      MLD_ImpText(120, 110, PlatS(2,0))
      MLD_ImpText(40, 115, PlatM(2,1))
      MLD_ImpText(120, 115, PlatS(2,1))
      
      MLD_ImpText(40, 135, "Midi")
      MLD_ImpText(120, 135, "Soir")
      MLD_ImpText(10, 145, "Jeudi ")
      MLD_ImpText(40, 145, PlatM(3,0))
      MLD_ImpText(120, 145, PlatS(3,0))
      MLD_ImpText(40, 150, PlatM(3,1))
      MLD_ImpText(120, 150, PlatS(3,1))
      
      MLD_ImpText(40, 170, "Midi")
      MLD_ImpText(120, 170, "Soir")
      MLD_ImpText(10, 180, "Vendredi ")
      MLD_ImpText(40, 180, PlatM(4,0))
      MLD_ImpText(120, 180, PlatS(4,0))
      MLD_ImpText(40, 185, PlatM(4,1))
      MLD_ImpText(120, 185, PlatS(4,1))
      
      MLD_ImpText(40, 205, "Midi")
      MLD_ImpText(120, 205, "Soir")
      MLD_ImpText(10, 215, "Samedi ")
      MLD_ImpText(40, 215, PlatM(5,0))
      MLD_ImpText(120, 215, PlatS(5,0))
      MLD_ImpText(40, 220, PlatM(5,1))
      MLD_ImpText(120, 220, PlatS(5,1))
      
      MLD_ImpText(40, 240, "Midi")
      MLD_ImpText(120, 240, "Soir")
      MLD_ImpText(10, 250, "Dimanche ")
      MLD_ImpText(40, 250, PlatM(6,0))
      MLD_ImpText(120, 250, PlatS(6,0))
      MLD_ImpText(40, 255, PlatM(6,1))
      MLD_ImpText(120, 255, PlatS(6,1))
      
      StopDrawing()
      StopPrinting()
    EndIf
  EndIf
EndProcedure

Procedure Ouvrir_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 0, 0, 690, 915, "Menu de la semaine", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    SetWindowColor(#Fenetre_principale, $0A78FF)		
    
    ButtonGadget(#Bouton_Imprimer, 200, 855, 60, 20, "Imprimer")
    ButtonGadget(#Bouton_Sauvegarder, 400, 855, 80, 20, "Sauvegarder")
    ButtonGadget(#Bouton_Charger, 600, 855, 60, 20, "Charger")
    
    ContainerGadget(#Container_Lundi, 5, 5, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Lundi, 5, 60, 50, 20, "Lundi")
    TextGadget(#Text_Lundi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Lundi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Lundi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Lundi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Lundi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Lundi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Mardi, 5, 125, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Mardi, 5, 60, 50, 20, "Mardi")
    TextGadget(#Text_Mardi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Mardi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Mardi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Mardi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Mardi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Mardi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Mercredi, 5, 245, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Mercredi, 5, 60, 50, 20, "Mercredi")
    TextGadget(#Text_Mercredi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Mercredi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Mercredi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Mercredi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Mercredi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Mercredi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Jeudi, 5, 365, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Jeudi, 5, 60, 50, 20, "Jeudi")
    TextGadget(#Text_Jeudi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Jeudi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Jeudi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Jeudi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Jeudi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Jeudi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Vendredi, 5, 485, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Vendredi, 5, 60, 50, 20, "Vendredi")
    TextGadget(#Text_Vendredi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Vendredi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Vendredi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Vendredi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Vendredi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Vendredi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Samedi, 5, 605, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Samedi, 5, 60, 50, 20, "Samedi")
    TextGadget(#Text_Samedi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Samedi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Samedi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Samedi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Samedi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Samedi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Dimanche, 5, 725, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Dimanche, 5, 60, 50, 20, "Dimanche")
    TextGadget(#Text_Dimanche_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Dimanche_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Dimanche_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Dimanche_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Dimanche_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Dimanche_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    
    SpinGadget(#Spn_Semaine, 10, 855, 50, 20, 1, 53, #PB_Spin_Numeric)
    SetGadgetState(#Spn_Semaine, NumSemaine())
    
    If CreateStatusBar(#BarreStatut, WindowID(#Fenetre_principale))
      AddStatusBarField(#PB_Ignore)
      StatusBarText(#BarreStatut, 0, "semaine " + SemaineVersDate(NumSemaine() - 1))
    EndIf
    
    SetGadgetColor(#Container_Lundi, #PB_Gadget_BackColor,    $0A0AFF)
    For i = #Text_Lundi To #Text_Lundi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0A0AFF)
    Next i
    SetGadgetColor(#Container_Mardi, #PB_Gadget_BackColor,    $0A28FF)
    For i = #Text_Mardi To #Text_Mardi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0A28FF)
    Next i
    SetGadgetColor(#Container_Mercredi, #PB_Gadget_BackColor, $0A50FF)
    For i = #Text_Mercredi To #Text_Mercredi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0A50FF)
    Next i
    SetGadgetColor(#Container_Jeudi, #PB_Gadget_BackColor,    $0A78FF)
    For i = #Text_Jeudi To #Text_Jeudi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0A78FF)
    Next i
    SetGadgetColor(#Container_Vendredi, #PB_Gadget_BackColor, $0AA0FF)
    For i = #Text_Vendredi To #Text_Vendredi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0AA0FF)
    Next i
    SetGadgetColor(#Container_Samedi, #PB_Gadget_BackColor,   $0AC8FF)
    For i = #Text_Samedi To #Text_Samedi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0AC8FF)
    Next i
    SetGadgetColor(#Container_Dimanche, #PB_Gadget_BackColor, $0AF0FF)
    For i = #Text_Dimanche To #Text_Dimanche_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0AF0FF)
    Next i
    
    For i = #Text_Lundi To #Text_Dimanche_Soir
      SetGadgetFont(i, FontID(#Police2))
    Next
    For i = #Str_Lundi_Midi_Plat1 To #Str_Dimanche_Soir_Plat2
      SetGadgetFont(i, FontID(#Police))
    Next
  EndIf
EndProcedure

Ouvrir_Fenetre_principale()

;- Boucle événementielle
Repeat
  evenement = WaitWindowEvent()
  Select evenement
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Str_Lundi_Midi_Plat1
          PlatM(0, 0) = GetGadgetText(#Str_Lundi_Midi_Plat1)
        Case #Str_Lundi_Midi_Plat2
          PlatM(0, 1) = GetGadgetText(#Str_Lundi_Midi_Plat2)
        Case #Str_Lundi_Soir_Plat1
          PlatS(0, 0) = GetGadgetText(#Str_Lundi_Soir_Plat1)
        Case #Str_Lundi_Soir_Plat2
          PlatS(0, 1) = GetGadgetText(#Str_Lundi_Soir_Plat2)
          
        Case #Str_Mardi_Midi_Plat1
          PlatM(1, 0) = GetGadgetText(#Str_Mardi_Midi_Plat1)
        Case #Str_Mardi_Midi_Plat2
          PlatM(1, 1) = GetGadgetText(#Str_Mardi_Midi_Plat2)
        Case #Str_Mardi_Soir_Plat1
          PlatS(1, 0) = GetGadgetText(#Str_Mardi_Soir_Plat1)
        Case #Str_Mardi_Soir_Plat2
          PlatS(1, 1) = GetGadgetText(#Str_Mardi_Soir_Plat2)
          
        Case #Str_Mercredi_Midi_Plat1
          PlatM(2, 0) = GetGadgetText(#Str_Mercredi_Midi_Plat1)
        Case #Str_Mercredi_Midi_Plat2
          PlatM(2, 1) = GetGadgetText(#Str_Mercredi_Midi_Plat2)
        Case #Str_Mercredi_Soir_Plat1
          PlatS(2, 0) = GetGadgetText(#Str_Mercredi_Soir_Plat1)
        Case #Str_Mercredi_Soir_Plat2
          PlatS(2, 1) = GetGadgetText(#Str_Mercredi_Soir_Plat2)
          
        Case #Str_Jeudi_Midi_Plat1
          PlatM(3, 0) = GetGadgetText(#Str_Jeudi_Midi_Plat1)
        Case #Str_Jeudi_Midi_Plat2
          PlatM(3, 1) = GetGadgetText(#Str_Jeudi_Midi_Plat2)
        Case #Str_Jeudi_Soir_Plat1
          PlatS(3, 0) = GetGadgetText(#Str_Jeudi_Soir_Plat1)
        Case #Str_Jeudi_Soir_Plat2
          PlatS(3, 1) = GetGadgetText(#Str_Jeudi_Soir_Plat2)
          
        Case #Str_Vendredi_Midi_Plat1
          PlatM(4, 0) = GetGadgetText(#Str_Vendredi_Midi_Plat1)
        Case #Str_Vendredi_Midi_Plat2
          PlatM(4, 1) = GetGadgetText(#Str_Vendredi_Midi_Plat2)
        Case #Str_Vendredi_Soir_Plat1
          PlatS(4, 0) = GetGadgetText(#Str_Vendredi_Soir_Plat1)
        Case #Str_Vendredi_Soir_Plat2
          PlatS(4, 1) = GetGadgetText(#Str_Vendredi_Soir_Plat2)
          
        Case #Str_Samedi_Midi_Plat1
          PlatM(5, 0) = GetGadgetText(#Str_Samedi_Midi_Plat1)
        Case #Str_Samedi_Midi_Plat2
          PlatM(5, 1) = GetGadgetText(#Str_Samedi_Midi_Plat2)
        Case #Str_Samedi_Soir_Plat1
          PlatS(5, 0) = GetGadgetText(#Str_Samedi_Soir_Plat1)
        Case #Str_Samedi_Soir_Plat2
          PlatS(5, 1) = GetGadgetText(#Str_Samedi_Soir_Plat2)
          
        Case #Str_Dimanche_Midi_Plat1
          PlatM(6, 0) = GetGadgetText(#Str_Dimanche_Midi_Plat1)
        Case #Str_Dimanche_Midi_Plat2
          PlatM(6, 1) = GetGadgetText(#Str_Dimanche_Midi_Plat2)
        Case #Str_Dimanche_Soir_Plat1
          PlatS(6, 0) = GetGadgetText(#Str_Dimanche_Soir_Plat1)
        Case #Str_Dimanche_Soir_Plat2
          PlatS(6, 1) = GetGadgetText(#Str_Dimanche_Soir_Plat2)
          
        Case #Spn_Semaine
          SemaineVersDate(GetGadgetState(#Spn_Semaine), Year(Date()))
          StatusBarText(#BarreStatut, 0, "semaine " + SemaineVersDate(GetGadgetState(#Spn_Semaine)-1))
        Case #Bouton_Imprimer
          Imprimer()
        Case #Bouton_Sauvegarder
          For i = 0 To ArraySize(PlatM())
            AddElement(Lplats())
            Lplats() = PlatM(i, 0)
            Lplats() = PlatM(i, 1)
            AddElement(Lplats())
            Lplats() = PlatS(i, 0)
            Lplats() = PlatS(i, 1)
          Next i  
          Sauvegarder()
        Case #Bouton_Charger
          Charger()
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver

Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Menu de la semaine

Message par Bernie »

Salut Micoute
Impossible télécharger ton fichier
mon antivirus bloque la page
perso je prefere Dropbox pour mettre un fichier sur un serveur
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Menu de la semaine

Message par Micoute »

Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Menu de la semaine

Message par TazNormand »

Bon, déjà attention au nom de fichier JSON avec tes dates "date_debut_semaine" et "date_fin_semaine" car chez moi elle contiennent des "/" et c'est un caractère "interdit" car il "définit" l'arborescence.

D'autre part, tu fais un

Code : Tout sélectionner

  InsertJSONArray(JSONValue(#Fichier_Json), PlatM())
  InsertJSONArray(JSONValue(#Fichier_Json), PlatS())
  jsonfic.s="Menu de la semaine du 11 au 12.Json"
  SaveJSON(#Fichier_Json, jsonfic)
Mais tu oublie le ComposeJSON avant le SaveJSON, essaie comme ça :

Code : Tout sélectionner

  InsertJSONArray(JSONValue(#Fichier_Json), PlatM())
  InsertJSONArray(JSONValue(#Fichier_Json), PlatS())
  jsonfic.s="Menu de la semaine du 11 au 12.Json"
  ComposeJSON(#Fichier_Json)
  SaveJSON(#Fichier_Json, jsonfic)
Concernant ton problème de double tableau, je ne vois pas 36 solutions : tableau à 2 dimensions, ou list/map !
Image
Image
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Menu de la semaine

Message par TazNormand »

Bon, j'ai modifié ton programme pour qu'il n'y ait plus qu'un seul tableau Plat(6,3), où Plat(n,0) et Plat(n,1) correspondent au midi et Plat(n,2) et Plat(n,3) au soir :

Code : Tout sélectionner

XIncludeFile "Fonctions_Date.pbi"
XIncludeFile "Imprime facile 2.pbi"

Enumeration Fenetres
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets
  #Text_Lundi
  #Text_Lundi_Midi
  #Text_Lundi_Soir
  #Text_Mardi
  #Text_Mardi_Midi
  #Text_Mardi_Soir
  #Text_Mercredi
  #Text_Mercredi_Midi
  #Text_Mercredi_Soir
  #Text_Jeudi
  #Text_Jeudi_Midi
  #Text_Jeudi_Soir
  #Text_Vendredi
  #Text_Vendredi_Midi
  #Text_Vendredi_Soir
  #Text_Samedi
  #Text_Samedi_Midi
  #Text_Samedi_Soir
  #Text_Dimanche
  #Text_Dimanche_Midi
  #Text_Dimanche_Soir
  
  #Str_Lundi_Midi_Plat1
  #Str_Lundi_Midi_Plat2
  #Str_Lundi_Soir_Plat1
  #Str_Lundi_Soir_Plat2
  #Str_Mardi_Midi_Plat1
  #Str_Mardi_Midi_Plat2
  #Str_Mardi_Soir_Plat1
  #Str_Mardi_Soir_Plat2
  #Str_Mercredi_Midi_Plat1
  #Str_Mercredi_Midi_Plat2
  #Str_Mercredi_Soir_Plat1
  #Str_Mercredi_Soir_Plat2
  #Str_Jeudi_Midi_Plat1
  #Str_Jeudi_Midi_Plat2
  #Str_Jeudi_Soir_Plat1
  #Str_Jeudi_Soir_Plat2
  #Str_Vendredi_Midi_Plat1
  #Str_Vendredi_Midi_Plat2
  #Str_Vendredi_Soir_Plat1
  #Str_Vendredi_Soir_Plat2
  #Str_Samedi_Midi_Plat1
  #Str_Samedi_Midi_Plat2
  #Str_Samedi_Soir_Plat1
  #Str_Samedi_Soir_Plat2
  #Str_Dimanche_Midi_Plat1
  #Str_Dimanche_Midi_Plat2
  #Str_Dimanche_Soir_Plat1
  #Str_Dimanche_Soir_Plat2
  #BarreStatut
  #Bouton_Imprimer
  #Bouton_Sauvegarder
  #Bouton_Charger
  #Container_Lundi
  #Container_Mardi
  #Container_Mercredi
  #Container_Jeudi
  #Container_Vendredi
  #Container_Samedi
  #Container_Dimanche
  #Spn_Semaine
EndEnumeration

Enumeration Json
  #Fichier_Json
EndEnumeration  

Enumeration Polices
  #Police
  #Police2
EndEnumeration

;- Variables globales
Global.i i
Global Dim Plat.s(6, 3)

Global NewList Lplats.s()
Global.i Police, Police2, evenement, nb_jour.w, date_1erjour_annee.l, date_debut_semaine.s, date_fin_semaine.s

Police = LoadFont(#Police, "Comic Sans MS", 16 , #PB_Font_Bold) 
Police2 = LoadFont(#Police2, "Comic Sans MS", 8 , #PB_Font_Bold) 

Procedure.s SemaineVersDate(numero_semaine.b, Annee.q = -1)
  
  If Annee < 0
    annee = Year(Date())
  EndIf
  
  nb_jour = 7*(numero_semaine + 2)
  ;Debug nb_jour
  
  date_1erjour_annee = ParseDate("%dd/%mm/%yyyy", "01/01/"+Str(annee))
  
  date_debut_semaine.s = FormatDate("%dd-%mm-%yyyy", AddDate(date_1erjour_annee, #PB_Date_Day, nb_jour-DayOfWeek(Date(Annee,1,1,0,0,0))+1))
  date_fin_semaine.s = FormatDate("%dd-%mm-%yyyy", AddDate(date_1erjour_annee, #PB_Date_Day, nb_jour-DayOfWeek(Date(Annee,1,1,0,0,0))+7))
  
  ProcedureReturn "du "+date_debut_semaine + " au "+ date_fin_semaine
EndProcedure

Procedure Charger()
  
EndProcedure

Procedure Sauvegarder()
  CreateJSON(#Fichier_Json)
  
  InsertJSONArray(JSONValue(#Fichier_Json), Plat())  
  ComposeJSON(#Fichier_Json)
  SaveJSON(#Fichier_Json, "Menu de la semaine du " + date_debut_semaine + " au "+ date_fin_semaine + ".Json")
EndProcedure

Procedure Imprimer()
  If DefaultPrinter()
    If StartPrinting("Menu")
      StartDrawing(PrinterOutput())
      MLD_ImpFont("Georgia", 18, #PB_Font_HighQuality, 0, 0, $8B453B)
      MLD_ImpText(-2, 10, "Menu de la semaine du " + date_debut_semaine + " au "+ date_fin_semaine) ; texte centré
      
      MLD_ImpText(40, 30, "Midi")
      MLD_ImpText(120, 30, "Soir")
      MLD_ImpText(10, 40, "Lundi ")
      MLD_ImpText(40, 40, Plat(0,0))
      MLD_ImpText(120, 40, Plat(0,2))
      MLD_ImpText(40, 45, Plat(0,1))
      MLD_ImpText(120, 45, Plat(0,3))
      
      MLD_ImpText(40, 65, "Midi")
      MLD_ImpText(120, 65, "Soir")
      MLD_ImpText(10, 75, "Mardi ")
      MLD_ImpText(40, 75, Plat(1,0))
      MLD_ImpText(120, 75, Plat(1,2))
      MLD_ImpText(40, 80, Plat(1,1))
      MLD_ImpText(120, 80, Plat(1,3))
      
      MLD_ImpText(40, 100, "Midi")
      MLD_ImpText(120, 100, "Soir")
      MLD_ImpText(10, 110, "Mercredi ")
      MLD_ImpText(40, 110, Plat(2,0))
      MLD_ImpText(120, 110, Plat(2,2))
      MLD_ImpText(40, 115, Plat(2,1))
      MLD_ImpText(120, 115, Plat(2,3))
      
      MLD_ImpText(40, 135, "Midi")
      MLD_ImpText(120, 135, "Soir")
      MLD_ImpText(10, 145, "Jeudi ")
      MLD_ImpText(40, 145, Plat(3,0))
      MLD_ImpText(120, 145, Plat(3,2))
      MLD_ImpText(40, 150, Plat(3,1))
      MLD_ImpText(120, 150, Plat(3,3))
      
      MLD_ImpText(40, 170, "Midi")
      MLD_ImpText(120, 170, "Soir")
      MLD_ImpText(10, 180, "Vendredi ")
      MLD_ImpText(40, 180, Plat(4,0))
      MLD_ImpText(120, 180, Plat(4,2))
      MLD_ImpText(40, 185, Plat(4,1))
      MLD_ImpText(120, 185, Plat(4,3))
      
      MLD_ImpText(40, 205, "Midi")
      MLD_ImpText(120, 205, "Soir")
      MLD_ImpText(10, 215, "Samedi ")
      MLD_ImpText(40, 215, Plat(5,0))
      MLD_ImpText(120, 215, Plat(5,2))
      MLD_ImpText(40, 220, Plat(5,1))
      MLD_ImpText(120, 220, Plat(5,3))
      
      MLD_ImpText(40, 240, "Midi")
      MLD_ImpText(120, 240, "Soir")
      MLD_ImpText(10, 250, "Dimanche ")
      MLD_ImpText(40, 250, Plat(6,0))
      MLD_ImpText(120, 250, Plat(6,2))
      MLD_ImpText(40, 255, Plat(6,1))
      MLD_ImpText(120, 255, Plat(6,3))
      
      StopDrawing()
      StopPrinting()
    EndIf
  EndIf
EndProcedure

Procedure Ouvrir_Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 0, 0, 690, 915, "Menu de la semaine", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
    SetWindowColor(#Fenetre_principale, $0A78FF)		
    
    ButtonGadget(#Bouton_Imprimer, 200, 855, 60, 20, "Imprimer")
    ButtonGadget(#Bouton_Sauvegarder, 400, 855, 80, 20, "Sauvegarder")
    ButtonGadget(#Bouton_Charger, 600, 855, 60, 20, "Charger")
    
    ContainerGadget(#Container_Lundi, 5, 5, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Lundi, 5, 60, 50, 20, "Lundi")
    TextGadget(#Text_Lundi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Lundi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Lundi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Lundi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Lundi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Lundi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Mardi, 5, 125, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Mardi, 5, 60, 50, 20, "Mardi")
    TextGadget(#Text_Mardi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Mardi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Mardi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Mardi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Mardi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Mardi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Mercredi, 5, 245, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Mercredi, 5, 60, 50, 20, "Mercredi")
    TextGadget(#Text_Mercredi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Mercredi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Mercredi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Mercredi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Mercredi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Mercredi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Jeudi, 5, 365, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Jeudi, 5, 60, 50, 20, "Jeudi")
    TextGadget(#Text_Jeudi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Jeudi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Jeudi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Jeudi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Jeudi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Jeudi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Vendredi, 5, 485, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Vendredi, 5, 60, 50, 20, "Vendredi")
    TextGadget(#Text_Vendredi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Vendredi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Vendredi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Vendredi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Vendredi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Vendredi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Samedi, 5, 605, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Samedi, 5, 60, 50, 20, "Samedi")
    TextGadget(#Text_Samedi_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Samedi_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Samedi_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Samedi_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Samedi_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Samedi_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    ContainerGadget(#Container_Dimanche, 5, 725, 680, 115, #PB_Container_Raised)
    TextGadget(#Text_Dimanche, 5, 60, 50, 20, "Dimanche")
    TextGadget(#Text_Dimanche_Midi, 60, 5, 50, 20, "Midi")
    TextGadget(#Text_Dimanche_Soir, 365, 5, 50, 20, "Soir")
    StringGadget(#Str_Dimanche_Midi_Plat1, 60, 30, 300, 35, "")
    StringGadget(#Str_Dimanche_Midi_Plat2, 60, 70, 300, 35, "")
    StringGadget(#Str_Dimanche_Soir_Plat1, 365, 30, 300, 35, "")
    StringGadget(#Str_Dimanche_Soir_Plat2, 365, 70, 300, 35, "")
    CloseGadgetList()
    
    SpinGadget(#Spn_Semaine, 10, 855, 50, 20, 1, 53, #PB_Spin_Numeric)
    SetGadgetState(#Spn_Semaine, NumSemaine())
    
    If CreateStatusBar(#BarreStatut, WindowID(#Fenetre_principale))
      AddStatusBarField(#PB_Ignore)
      StatusBarText(#BarreStatut, 0, "semaine " + SemaineVersDate(NumSemaine() - 1))
    EndIf
    
    SetGadgetColor(#Container_Lundi, #PB_Gadget_BackColor,    $0A0AFF)
    For i = #Text_Lundi To #Text_Lundi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0A0AFF)
    Next i
    SetGadgetColor(#Container_Mardi, #PB_Gadget_BackColor,    $0A28FF)
    For i = #Text_Mardi To #Text_Mardi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0A28FF)
    Next i
    SetGadgetColor(#Container_Mercredi, #PB_Gadget_BackColor, $0A50FF)
    For i = #Text_Mercredi To #Text_Mercredi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0A50FF)
    Next i
    SetGadgetColor(#Container_Jeudi, #PB_Gadget_BackColor,    $0A78FF)
    For i = #Text_Jeudi To #Text_Jeudi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0A78FF)
    Next i
    SetGadgetColor(#Container_Vendredi, #PB_Gadget_BackColor, $0AA0FF)
    For i = #Text_Vendredi To #Text_Vendredi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0AA0FF)
    Next i
    SetGadgetColor(#Container_Samedi, #PB_Gadget_BackColor,   $0AC8FF)
    For i = #Text_Samedi To #Text_Samedi_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0AC8FF)
    Next i
    SetGadgetColor(#Container_Dimanche, #PB_Gadget_BackColor, $0AF0FF)
    For i = #Text_Dimanche To #Text_Dimanche_Soir
      SetGadgetColor(i, #PB_Gadget_BackColor,    $0AF0FF)
    Next i
    
    For i = #Text_Lundi To #Text_Dimanche_Soir
      SetGadgetFont(i, FontID(#Police2))
    Next
    For i = #Str_Lundi_Midi_Plat1 To #Str_Dimanche_Soir_Plat2
      SetGadgetFont(i, FontID(#Police))
    Next
  EndIf
EndProcedure

Ouvrir_Fenetre_principale()

;- Boucle événementielle
Repeat
  evenement = WaitWindowEvent()
  Select evenement
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Str_Lundi_Midi_Plat1
          Plat(0, 0) = GetGadgetText(#Str_Lundi_Midi_Plat1)
        Case #Str_Lundi_Midi_Plat2
          Plat(0, 1) = GetGadgetText(#Str_Lundi_Midi_Plat2)
        Case #Str_Lundi_Soir_Plat1
          Plat(0, 2) = GetGadgetText(#Str_Lundi_Soir_Plat1)
        Case #Str_Lundi_Soir_Plat2
          Plat(0, 3) = GetGadgetText(#Str_Lundi_Soir_Plat2)
          
        Case #Str_Mardi_Midi_Plat1
          Plat(1, 0) = GetGadgetText(#Str_Mardi_Midi_Plat1)
        Case #Str_Mardi_Midi_Plat2
          Plat(1, 1) = GetGadgetText(#Str_Mardi_Midi_Plat2)
        Case #Str_Mardi_Soir_Plat1
          Plat(1, 2) = GetGadgetText(#Str_Mardi_Soir_Plat1)
        Case #Str_Mardi_Soir_Plat2
          Plat(1, 3) = GetGadgetText(#Str_Mardi_Soir_Plat2)
          
        Case #Str_Mercredi_Midi_Plat1
          Plat(2, 0) = GetGadgetText(#Str_Mercredi_Midi_Plat1)
        Case #Str_Mercredi_Midi_Plat2
          Plat(2, 1) = GetGadgetText(#Str_Mercredi_Midi_Plat2)
        Case #Str_Mercredi_Soir_Plat1
          Plat(2, 2) = GetGadgetText(#Str_Mercredi_Soir_Plat1)
        Case #Str_Mercredi_Soir_Plat2
          Plat(2, 3) = GetGadgetText(#Str_Mercredi_Soir_Plat2)
          
        Case #Str_Jeudi_Midi_Plat1
          Plat(3, 0) = GetGadgetText(#Str_Jeudi_Midi_Plat1)
        Case #Str_Jeudi_Midi_Plat2
          Plat(3, 1) = GetGadgetText(#Str_Jeudi_Midi_Plat2)
        Case #Str_Jeudi_Soir_Plat1
          Plat(3, 2) = GetGadgetText(#Str_Jeudi_Soir_Plat1)
        Case #Str_Jeudi_Soir_Plat2
          Plat(3, 3) = GetGadgetText(#Str_Jeudi_Soir_Plat2)
          
        Case #Str_Vendredi_Midi_Plat1
          Plat(4, 0) = GetGadgetText(#Str_Vendredi_Midi_Plat1)
        Case #Str_Vendredi_Midi_Plat2
          Plat(4, 1) = GetGadgetText(#Str_Vendredi_Midi_Plat2)
        Case #Str_Vendredi_Soir_Plat1
          Plat(4, 2) = GetGadgetText(#Str_Vendredi_Soir_Plat1)
        Case #Str_Vendredi_Soir_Plat2
          Plat(4, 3) = GetGadgetText(#Str_Vendredi_Soir_Plat2)
          
        Case #Str_Samedi_Midi_Plat1
          Plat(5, 0) = GetGadgetText(#Str_Samedi_Midi_Plat1)
        Case #Str_Samedi_Midi_Plat2
          Plat(5, 1) = GetGadgetText(#Str_Samedi_Midi_Plat2)
        Case #Str_Samedi_Soir_Plat1
          Plat(5, 2) = GetGadgetText(#Str_Samedi_Soir_Plat1)
        Case #Str_Samedi_Soir_Plat2
          Plat(5, 3) = GetGadgetText(#Str_Samedi_Soir_Plat2)
          
        Case #Str_Dimanche_Midi_Plat1
          Plat(6, 0) = GetGadgetText(#Str_Dimanche_Midi_Plat1)
        Case #Str_Dimanche_Midi_Plat2
          Plat(6, 1) = GetGadgetText(#Str_Dimanche_Midi_Plat2)
        Case #Str_Dimanche_Soir_Plat1
          Plat(6, 2) = GetGadgetText(#Str_Dimanche_Soir_Plat1)
        Case #Str_Dimanche_Soir_Plat2
          Plat(6, 3) = GetGadgetText(#Str_Dimanche_Soir_Plat2)
          
        Case #Spn_Semaine
          SemaineVersDate(GetGadgetState(#Spn_Semaine), Year(Date()))
          StatusBarText(#BarreStatut, 0, "semaine " + SemaineVersDate(GetGadgetState(#Spn_Semaine)-1))
        Case #Bouton_Imprimer
          Imprimer()
        Case #Bouton_Sauvegarder
          For i = 0 To ArraySize(Plat())
            AddElement(Lplats())
            Lplats() = Plat(i, 0)
            Lplats() = Plat(i, 1)
            AddElement(Lplats())
            Lplats() = Plat(i, 2)
            Lplats() = Plat(i, 3)
          Next i  
          Sauvegarder()
        Case #Bouton_Charger
          Charger()
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Fenetre_principale
          CloseWindow(#Fenetre_principale)
          Break
      EndSelect
  EndSelect
ForEver


J'édite mon message pour un dernier conseil : préfères les fichiers JSON structurés, c'est à dire avec un "nom" d'étiquette ({'lundi_midi': ['frites', 'steak], 'lundi_soir': ['soupe', 'fromage'], ...}) en utilisant les structures et les listes comme dans l'exemple de InsertJSONStructure(), le fichier JSON résultant n'en est que plus "lisible".
Image
Image
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Menu de la semaine

Message par Micoute »

Merci TazNormand, c'est tout simplement merveilleux.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Bernie
Messages : 282
Inscription : mar. 22/mars/2016 10:12
Localisation : En France

Re: Menu de la semaine

Message par Bernie »

Micoute a écrit :Voilà qui est fait.

https://www.dropbox.com/s/3ttn65otqkg0j ... e.zip?dl=0

Merci Micoute
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [OK] Demande d'aide pour Menu de la semaine

Message par Micoute »

La version complète est dans 'Applications'
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre