FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Récupération d'une sélection listbox vers Excel
 

Récupération d'une sélection listbox vers Excel

Réseaux : The Ghost Is Me Jeux et consoles : mwaaaaa, 4 utilisateurs anonymes et 198 utilisateurs inconnus
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Récupération d'une sélection listbox vers Excel
 
Plus d'informations

Bonjour,
 
Je commence un projet de gestion du personnel et des formations sous excel (macro + VBA) et j'ai des difficultés à aller au bout des choses toute seule. Alors comme cela m'est arrivée il y a quelques temps maintenant, je viens faire appel à vos lumières, qui m'avaient déjà bien secourues à l'époque.
 
Cette fois je pars d'un fichier excel existant ou sur une feuille de calcul j'ai : en colonne les noms du perssonel entreprise et en ligne les formations réalisées. Quand un personnel a suivi une formation, je met un "X" à l'intersection ligne / colonne.
Je me suis fixée un nombre maxi de formation de 48 => 50 lignes dans le tableau et un nombre de personnel de 20 => 21 colonnes.
Je viens de créer un Userform permettant de créer une nouvelle formation (zone texte) qui est récupérer pour alimenter le feuille de calcul excel précitée en dernière ligne. L'Userform est ouvert à partir d'une commande bouton sur la 1 feuille excel de mon fichier. Jusque là tout fonctionne. Voici le code affecté au bouton VALIDER :

Code :
  1. Private Sub CommandValider_Click()
  2.            
  3.         Dim BDAC As Worksheet
  4.         Dim GFDP As Worksheet
  5.        
  6.     Set BDAC = Worksheets("BD Acteur" )
  7.     Set GFDP = Worksheets("Gestion FDP" )
  8. ' On teste la saisie de la dénomination ...
  9.     If Me.TextDenom.Text = "" Then
  10.         MsgBox "Vous devez entrer une dénomination."
  11.         Me.TextDenom.SetFocus
  12.         Exit Sub
  13.     End If
  14. ' Mise en place des données dans la feuille de calcul BD acteur'
  15.     BDAC.Range("A65536" ).End(xlUp).Offset(1, 0).Value = Me.TextDenom.Text
  16.     BDAC.Range("A65536" ).End(xlUp).Offset(0, 1).Value = Me.TextCode.Text
  17. ' On tri le tableau des dénomination et code par ordre croissannt du code'
  18.     BDAC.Select
  19.     Range("A1:B50" ).Select
  20.         Selection.Sort Key1:=Range("B2" ), Order1:=xlAscending, Header:=xlGuess, _
  21.             OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  22.             DataOption1:=xlSortNormal
  23.     GFDP.Select
  24. ' On décharge le formulaire
  25.     Unload Me
  26. End Sub


 
Là où ça se corse, c'est que j'ai X listbox pour sélectionner les participants à la formation et une case à cocher au cas où tout le personnel aurait suivi la formation et que je veux pouvoir pour chaque nom de participant sélectionner, mettre une croix "X" sur la ligne de formation correspondante. Dans le cas de la case à cocher "TOUS", je veux une croix pour tout le personnel sur la ligne de la formation.
Et c'est pour cette seconde partie que je fais appel à vos lumières car malgré mes recherches sur divers forum, je n'arrive pas à trouver par quel bout prendre le problème.
Please HELP ! :??:  

zeb
Profil : Modérateur libre
Plus d'informations

Rebonjour Cafiniou :hello:
 
:cry: Vire-moi ces Select/Selection, ligne 21 à 23, s'il te plaît.

Code :
  1. BDAC.Range("A1:B50" ).Sort Key1:=Range("B2" )...


 
Sinon, je ne vois pas trop clairement ton problème. Et je ne vois pas le rapport avec le code et l'explication de ton problème. Bref, c'est confus de ton côté. (C'est peut-être moi qui est l'esprit embrumé).
 
------------------
 
Si tu peux savoir à l'avance quelle zone doit être remplie de X, tu peux faire comme ça :

Code :
  1. Dim cell As Range
  2. For Each cell In Range("C2:L50" ).Rows(4)
  3.     cell.Value = "X"
  4. Next


Avec C2:L50, ta zone de X et 4 si tu veux remplir à 4ème ligne de cette zone.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Boujour Zeb,  
Je vous que tu es toujours fidèle au poste et que tu es toujours aussi rapide déguéner  :lol:  
 
Bon! je vais essayer d'être le plus claire possible.
Voici le contenu de ma feuille "BD form" :
- colonne A : les désignation des formations (jusqu'à la ligne 50)
- colonne B à U : en 1ère ligne les noms des perssones et lignes suivantes une croix "X" en face des formations suivies
 
Le but de mon Userform : créer une nouvelle formation et y affecter des participants  
L'Userform est construit de la façon suivante :
- Un textbox servant à l'intitulé de la formation à créer
- 10 listbox permettant de sélectionner les participants
- une case à cocher intitulée "TOUS" permettant d'affecter la formation à tous les participants.
 
Question subsidiaire : j'ai mis 10 list box, mais n'aurait-il pas mieux value que je mette une liste à sélection multiple ? (que je ne sais pas utiliser voilà le pourquoi des 10  listbox)
 
L'utilisateur doit donc créer une formation et sélectionner des participants.
Ce que je veux pouvoir faire, c'est récupérer les informations saisies ou sélectionnées dans l'Userform pour les mettre dans ma feuille "BD form".
Le code que j'ai écris ne me permet actuellement que de créer une nouvelle formation et de l'ajouter à la liste des formations existantes sur la feuille BD form en les retriant par ordre alphabétique.
Comment puis-je dire en VBA, prend le nom de la première list box, cherche la colonne correspondante dans la feuille "BD form" et écrit une croix "X" dans cette colonne, à la hauteur de la ligne correspondante à la formation (cf intitulé du textbox)??? Et ainsi desuite avec les autres noms.
Et idem au cas où la case TOUS est cochée?
Est-ce plus clair comme ceci?
 

zeb
Profil : Modérateur libre
Plus d'informations

Oh là là ! Les dix listboxes, c'est une hérésie.

 

La bonne solution, c'est effectivement la liste unique en multiselect.
Il n'est pas question que je te dise comment faire une listbox en multiselect. Tu me connais maintenant, je te laisse chercher. ;)
(Click sur la listbox dans l'éditeur VB et appuye sur F4. Ca devrait te sembler évident)

 

Bon, alors voilà ce que je te propose :

 

Un Userform avec :
 Un textbox pour donner un nom à ta formation
 Une listbox à choix multiple
 Un bouton pour sélectionner tout le monde
 Un bouton Valider
 Un bouton Annuler

 

Sais-tu remplir cette listbox ? Avec la méthode AddItem bien sûr :

Code :
  1. ListBox.AddItem BDForm.Range("B1" ) '//C'est une personne ou un code ?
  2. ListBox.AddItem BDForm.Range("C1" )
  3. ListBox.AddItem BDForm.Range("D1" )
  4. ...


Bon, ce code est idiot.
Voilà comment on peut faire autrement :

Code :
  1. Dim c As Range
  2. ListBox1.Clear
  3. For Each c In BDForm.Range("C1:U1" )
  4.   If c.Value = "" Then Exit For
  5.   ListBox1.AddItem c.Value
  6. Next
 

Tu remarqueras que je m'arrête à la première case vide.
S'il y a un "trou" entre deux personnes, tant pis.

 

Voici le code pour le bouton "Sélectionner tout le monde" :

Code :
  1. Dim i As Integer
  2. For i = 0 To ListBox1.ListCount - 1
  3.   ListBox1.Selected(i) = True
  4. Next
 

Fais-moi aussi un bouton "Désélectionner tout le monde" s'il te plaît :)

 
Code :
  1. BDAC.Range("A65536" ).End(xlUp).Offset(1, 0).Value = Me.TextDenom.Text
  2. BDAC.Range("A65536" ).End(xlUp).Offset(0, 1).Value = Me.TextCode.Text


Ce code est tout moche. Regarde bien ce que tu fais.
Tu cherches la dernière ligne non vide et tu te décales d'une ligne vers le bas. Ca, c'est TRES BIEN :)
Bon, donc tu l'as trouvé. Ensuite tu recherche à nouveau la même ligne. Ca, c'es IDIOT.

 

Regarde ça :

Code :
  1. Dim NewLine As Range
  2. Set NewLine = BDAC.Range("A65536" ).End(xlUp).Offset(1, 0).Rows(1)
  3. NewLine.Cells(1, 1) = Me.TextDenom.Text
  4. NewLine.Cells(1, 2) = Me.TextCode.Text


Pourquoi est-ce mieux ?

 

Eh, parce que maintenant, on va pouvoir écrire dans la bonne ligne sans avoir à la rechercher tout le temps.

 

Bon, quand tu cliques sur Valider, il faut regarder si la personne est sélectionnée, et si oui, mettre une croix.
Dans la ligne NewLine, A=0, B=1, C=2, etc. Donc la première personne est dans la cellule 2.

 
Code :
  1. Dim i As Integer
  2. For i = 0 To ListBox1.ListCount - 1
  3.   If ListBox1.Selected(i) Then
  4.     NewLine.Cells(1, 2 + i) = "X"
  5.   End If
  6. Next
 

Et voilà !!!!

 

__________________________________________________

 


Pour aller, plus loin.
Au lieu de se servir de l'ordre d'entrée implicite des valeurs dans une liste, on stocke en général cette valeur dans l'élément lui-même :

+--+-------------+
|13| Cafiniou    |
|80| Zeb         |
|92| PPC         |
+--+-------------+


Comme ça, si la list est triée, ou s'il y a un trou, on s'y retrouve quand même :

+--+-------------+
|13| Cafiniou    |
|92| PPC         |
|80| Zeb         |
+--+-------------+

 

On peut faire ça avec les listboxes. Il faut mettre 2 colonnes et donner une largeur nulle à la première, pour la rendre invisible :

Code :
  1. ListBox1.ColumnCount=2
  2. ListBox1.ColumnWidth = "0"


Pour voir ce qui se passe, on peut ne pas rendre cette colonne invisible, dans un premier temps.

 

On remplit alors la liste comme suit :

Code :
  1. Dim c As Range
  2. ListBox1.Clear
  3. For Each c In BDForm.Range("C1:U1" )
  4.   If c.Value <> "" Then
  5.     ListBox1.AddItem c.Column
  6.     ListBox1.List(ListBox1.ListCount - 1, 1) = c.Value
  7.   End If
  8. Next
 

Et pour mettre les croix :

Code :
  1. Dim i As Integer
  2. Dim col As Integer
  3. For i = 0 To ListBox1.ListCount - 1
  4.   If ListBox1.Selected(i) Then
  5.     col = ListBox1.List(i, 0)
  6.     NewLine.Cells(1, col) = "X"
  7.   End If
  8. Next

Message cité 1 fois
Message édité par zeb le 29-07-2008 à 14:43:28

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Bonjour Zeb,
 
Je vois que tu as travaillé dur sur ma question!
Je me plonge dans la réponse pour l'exploitée et retravailler mon code et je te tiens au courant biensûr!
En attendant grand merci, pour le grain à moudre que tu m'as donné!

zeb
Profil : Modérateur libre
Plus d'informations

:jap:


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

:cry:  
Je galère grave!
Alors si tu veux bien, procédons par étape
 

Citation :

Oh là là ! Les dix listboxes, c'est une hérésie


1ère erreur de ma part j’ai parlé de listbox là ou j’ai utilisé des combobox (mea culpa)
 

Citation :

Il n'est pas question que je te dise comment faire une listbox en multiselect. Tu me connais maintenant, je te laisse chercher.  


Oui est c’est bien pour çà que je suis contente de voir que tu réponds toujours à mes demandes car j’ai toujours avancé grâce à tes réponses ! :p  
Pour le multi select j'ai mis le temps, mais j'ai trouvé la fonction 1 fmMultiSelectSingle dans les propriétés!
 

Citation :

(Click sur la listbox dans l'éditeur VB et appui sur F4. Ca devrait te sembler évident)


Pour sûr, j’ai toujours les propriétés des contrôles ouvertes, mais merci pour le raccourci touche!
 
Pour le Userform que tu me proposes je suis OK.  
 
Pour ce qui est de remplir la listbox, j’utilise la solution « Rowsource » [‘BD poste’ !A2 :A21] feuille où j’ai toutes les personnes de l’entreprise sur une seule colonne (cette solution est plus simple à mon goût et surtout, elle allège le code qui n’est déjà pas simple !).
Est-ce que la méthode Row source vaut la solution que tu proposes ou est-ce que c’est moins bien ?
 
Quant au contenu des cellules A2 à A21 c’est un nom ou plus exactement « Prénom NOM » (séparés par un espace). Il y a des noms jusqu'à la ligne 13 de la feuille BD poste, les autres lignes sont disponibles pour les nouveaux recrutés (du coup dans ma listbox j'ai les premières lignes avec les noms et les dernières sont vides => conséquence : quand je coche l'option "sélectionner tout le personnel" même les lignes vides sont sélectionnées, j'aurais donc des croix pour la formation dans des colonnes qui sont encore vierge de salarié)
Comment puis-je résoudre ce 1er point ?
 
Je continue de mon coté et je pense que je ne suis pas au bout de mes peines! :whistle:

zeb
Profil : Modérateur libre
Plus d'informations

Citation :

Est-ce que la méthode Row source vaut la solution que tu proposes ou est-ce que c'est moins bien ?

C'est égal. Tu as plus de contrôle quand tu fais toi-même les choses. Tu as moins de chance de te gourer quand tu laisses faire les choses ;)

 

Donc moi, je préfère MA solution.
Un ptit coup de pouce pour que la tienne marche aussi :

 

['BD poste'!A2:A21]

Là, ce n'est pas bon ! évidemment tu vas avoir des cellules vides ou manquantes. Donc il faut construire cette liste :

 
Code :
  1. Dim ws As Worksheet
  2. Dim c_prem As Range, c_dern As Range
  3. Set ws = Worksheets("BD poste" )
  4. Set c_prem = ws.Range("A1" )
  5. Set c_dern = R_1. ?????
  6. Msgbox "Adresse sans rien préciser : " & Range(r_prem, r_dern).Address
  7. Msgbox "Adresse en précisant tout :  " & Range(r_prem, r_dern).Address(External:=True)
  8. ListBox1.RowSource = Range(c_prem, c_dern).Address(External:=True)
 

Tu as vu, je t'ai laissé un trou ligne 6 pour que cette solution soit la tienne :)


Message édité par zeb le 25-07-2008 à 16:06:11

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Pour la suite j'ai du planter quelque chose car j'ai une erreur d'axécution 1004' (erreur définie par l'application ou par l'objet) sur la ligne : 33.
 
Voici le code :
 

Code :
  1. Private Sub CommandValider_Click()
  2.            
  3.         Dim BDF As Worksheet
  4.         Dim GFDP As Worksheet
  5.         Dim BDP As Worksheet
  6.         Dim NewLine As Range
  7.         Dim f As Integer
  8.        
  9.     Set BDF = Worksheets("BD form" )
  10.     Set GFDP = Worksheets("Gestion FDP" )
  11.     Set BDP = Worksheets("BD poste" )
  12.     Set NewLine = BDF.Range("A1" ).End(xlDown).Offset(1, 0).Rows(1)
  13.    
  14.  
  15. ' On teste la saisie de la dénomination ...
  16.     If Me.TextFormCompl.Text = "" Then
  17.         MsgBox "Vous n'avez pas saisi l'intitulé de la formation complémentaire."
  18.         Me.TextFormCompl.SetFocus
  19.         Exit Sub
  20.     End If
  21. ' On teste s'il y a suffisamment de place pour ajouter une formation complémentaire'
  22.     'trouve la derniere ligne ecrite de  la colonne
  23.     FIN = BDF.Range("A65536" ).End(xlUp).Row
  24.         If FIN > 50 Then ' test si plus de 50 lignes écrites
  25.             MsgBox "Vous avez dépassé le nombre de formations complémentaires possible. Faite faire un tri des formations complémentaires par l'administrateur pour pouvoir saisir une formation."
  26. ' Mise en place des données dans la feuille de calcul BD acteur'
  27.         ElseIf FIN <= 50 Then
  28.             NewLine.Cells(0, 0) = Me.TextFormCompl.Text
  29.             For f = 0 To ListBox1.ListCount - 1
  30.                 If ListBox1.Selected(f) Then
  31.                     NewLine.Cells(0, 1 + f) = "X"
  32.                 End If
  33.                 Next
  34. ' On tri le tableau des formations par ordre croissannt de l'intitulé'
  35.             BDF.Range("A3:Z50" ).Sort Key1:=Range("A3" ), Order1:=xlAscending, Header:=xlGuess, _
  36.                     OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  37.                     DataOption1:=xlSortNormal
  38.             GFDP.Select
  39.         End If       ' fin de test
  40.    
  41. ' On décharge le formulaire
  42.     Unload Me
  43. End Sub


 
Je viens de me rendre compte que tu avais déjà répondu au reste ! Mais j'ai pas encore lu, so no comment.

zeb
Profil : Modérateur libre
Plus d'informations

zeb a écrit :

Regarde ça :

Code :
  1. Dim NewLine As Range
  2. Set NewLine = BDAC.Range("A65536" ).End(xlUp).Offset(1, 0).Rows(1)
  3. NewLine.Cells(1, 1) = Me.TextDenom.Text
  4. NewLine.Cells(1, 2) = Me.TextCode.Text



Ce n'est pas zeb qui a pu écrire ça, puisquil y a une erreur, ligne 2. :o

 

Je voulais désigner toute la ligne, mais la bonne syntax est la suivante :

Code :
  1. Set NewLine = BDAC.Range("A65536" ).End(xlUp).Offset(1, 0).EntireRow


Modifie donc ta ligne 12 ;)


Message édité par zeb le 29-07-2008 à 14:45:01

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Bonjour zeb,
 
de retour de week end, je viens de faire la modif, mais j'ai toutjours la même erreur au même endroit! :heink:  
Je sais que je n'ai pas trop les yeux en face des trous ce matin, mais je ne vois pas d'où vient le problème.

zeb
Profil : Modérateur libre
Plus d'informations

:hello:

Citation :

pas trop les yeux en face des trous

C'est que le week-end fut bon :D Il te reste 5 jours de semaine pour te reposer avant le prochain week-end :D :D :D

 

Tu as bien modifier ta ligne 12 ?
L'erreur est toujours sur la ligne 33 ?

 

Quand tu as ce genre de problème, ajoute un Stop avant la ligne incriminée.
Ensuite, utilise la fenêtre Exécution (Ctrl+G) et la fenêtre Espion pour explorer des objets. (Il faudrait que je fasse un topic sur le sujet.)

 

Donc ça plante sur la ligne

Code :
  1. NewLine.Cells(1, 2 + f) = "X"


Pour ce cas particulier, dans la fenêtre Exécution, tape les lignes suivantes :

print NewLine.Address
print f
print NewLine.Cells(1, 2)
print NewLine.Cells(1, 2 + f)


Message édité par zeb le 29-07-2008 à 14:45:19

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

:(  
Je te confirme que j'ai changé la ligne 12 et que j'ai toujours l'erreur sur la ligne 30, soit la ligne  

Code :
  1. NewLine.Cells(0, 0). = Me.TextFormCompl.Text


 
Je te remet le code complet au cas où pb sur autre lignes ou erreur de frappe de ma part.
 

Code :
  1. Private Sub CommandValider_Click()
  2.            
  3.         Dim BDF As Worksheet
  4.         Dim GFDP As Worksheet
  5.         Dim NewLine As Range
  6.         Dim f As Integer
  7.        
  8.     Set BDF = Worksheets("BD form" )
  9.     Set GFDP = Worksheets("Gestion FDP" )
  10.     Set BDP = Worksheets("BD poste" )
  11.     Set NewLine = BDF.Range("A1" ).End(xlDown).Offset(1, 0).EntireRow
  12. ' On teste la saisie de la dénomination ...
  13.     If Me.TextFormCompl.Text = "" Then
  14.         MsgBox "Vous n'avez pas saisi l'intitulé de la formation complémentaire."
  15.         Me.TextFormCompl.SetFocus
  16.         Exit Sub
  17.     End If
  18. ' On teste s'il y a suffisamment de place pour ajouter une formation complémentaire'
  19.     'trouve la derniere ligne ecrite de  la colonne
  20.     FIN = BDF.Range("A65536" ).End(xlUp).Row
  21.         If FIN > 50 Then ' test si plus de 50 lignes écrites
  22.             MsgBox "Vous avez dépassé le nombre de formations complémentaires possible. Faite faire un tri des formations complémentaires par l'administrateur pour pouvoir saisir une formation."
  23. ' Mise en place des données dans la feuille de calcul BD acteur'
  24.         ElseIf FIN <= 50 Then
  25.             NewLine.Cells(0, 0). = Me.TextFormCompl.Text
  26.             For f = 0 To ListBox1.ListCount - 1
  27.                 If ListBox1.Selected(f) Then
  28.                     NewLine.Cells(0, 1 + f) = "X"
  29.                 End If
  30.                 Next
  31. ' On tri le tableau des formations par ordre croissannt de l'intitulé'
  32.             BDF.Range("A3:Z50" ).Sort Key1:=Range("A3" ), Order1:=xlAscending, Header:=xlGuess, _
  33.                     OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  34.                     DataOption1:=xlSortNormal
  35.             GFDP.Select
  36.         End If       ' fin de test
  37.    
  38. ' On décharge le formulaire
  39.     Unload Me
  40. End Sub


 
J'ai mis un stop at il me met le message  
"Erreur de compilation. Erreur de synthaxe"
 
Quant au résultat de la fenêtre exécution après avoir tapé les lignes que tu m'as donné, j'ai une erreur d'éxécution 424. Objet requis.
Mais là je ne suis pas sûre du tout de ma manipulation.
Pour la fenêtre espion, tu trouves çà où ?
 :whistle:

Plus d'informations

:pt1cable:  
J'ai trouvé la  fenêtre espion (OK ma question

Citation :

Pour la fenêtre espion, tu trouves çà où ?  

était un peu trop facile.
Cela dit, je ne vois pas à quoi elle sert, où tout du moins je ne sais pas m'en servir!  :??:  
 

zeb
Profil : Modérateur libre
Plus d'informations

Citation :

Pour la fenêtre espion, tu trouves çà où ?
- J'ai trouvé la  fenêtre espion

De toute façon, je t'aurais répondu "cherche mieux" :o
 

Citation :

après avoir tapé les lignes

Ce qui m'embête, c'est que tu dois taper une seule ligne, taper [Entrée], lire le résultat, taper une autre ligne, taper [Entrée], lire le résultat, etc. Donc si tu ne précises pas, c'est que ça a planté sur la première ligne :/
 
Ligne 29,5 (entre tes lignes 29 et 30), je ne vois pas le Stop.
 
Je prends le temps de faire un topic sur les fenêtres Espion et Exécution, et je reviens à toi....


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Citation :

De toute façon, je t'aurais répondu "cherche mieux" :o  


C'est marrant mais je m'y attendais, c'est pour çà que dès que j'ai trouvé la solution j'ai rajouté un message.  :D  
 

Citation :

Ligne 29,5 (entre tes lignes 29 et 30), je ne vois pas le Stop.


 
Normal, avant de recopier le code j'ai enlevé le stop.
Bon si je fais les choses comme il faut :
1- je remet stop entre ligne 29 et 30
2- je lance l'exécution à partir du bouton de commande comme pour créer une formation
3- dans la fenêtre exécution je tape :

Citation :

print NewLine.Address  

puis entrée
C'est à ce moment là que j'ai l'erreur d'exécution 424
4- si je n'avais pas d'erreur il faudrait que je répète la ligne 3 pour les trois autres lignes que tu m'as donné.
 
Comment dit-on? C'est en forgeant qu'on devient forgeron ! Alors forgeons!

zeb
Profil : Modérateur libre
Plus d'informations