UserForm ListBox sauvergarder les données et modifier

Résolu/Fermé
trevsiob Messages postés 8 Date d'inscription jeudi 7 août 2014 Statut Membre Dernière intervention 8 août 2014 - 8 août 2014 à 13:11
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 8 août 2014 à 15:31
Bonjour,
j'ai une UserForm avec 4 ListBox. Les utilisateurs doivent sélectionner des items dans la première ListBox, appuyer sur un bouton "ADD" et l'item est alors transféré dans la 2ieme ListBox. Ils peuvent aussi sélection un item qui a préalablement été envoyé dans la ListBox 2 et appuyer sur un bouton "REMOVE" pour enlever l'item (en cas d'erreur par exemple). Ils doivent aussi faire la même chose avec la 3ième ListBox qui contient une liste différente d'item et en les sélectionnant ils sont transféré dans la 4ième ListBox sous le même principe décrit un peu plus haut. Ils doivent finalement appuyer sur un bouton "TERMINER" qui ferme la UserForm et transfert la sélection dans deux ListBox différente sur la feuille excel. Sur cette dernière, on retrouve un bouton "MODIFIER" qui permet aux utilisateurs de réouvrir la UserForm qui apparait avec la sélection précédente et peuvent modifier leur travail. Tout ce procédé fonctionne bien mais j'ai deux problèmes. Premièrement, j'aimerais pouvoir sauvegarder les données des ListBox de la feuille excel lors de la fermeture du fichier. Pour ce faire, j'utilise un "range" de cellules dans lequel est transféré le contenu des deux ListBox et j'ai écrit un code dans WorkBook_Open qui va voir dans le range et s'en sert pour remettre les items dans les ListBox sauf que je ne peux pas modifier la sélection lorsque les items proviennent du "range". Deuxièmement, j'aimerais que les utilisateurs ne puissent pas choisir 2 fois le même items dans la userForm. Il faudrait que lorsqu'un item est transféré à l'aide du bouton "ADD", ce même item soit enlever ou invisible ou enabled de la première ListBox et lorsqu'on appuie sur le bouton "REMOVE", l'item revient dans la première ListBox.

J'espère avoir été assez clair!
Merci beaucoup
Alex
A voir également:

4 réponses

skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
8 août 2014 à 13:40
Je remets le liens du premier post:

http://www.webtransfer.ch/en/download/681f638314d6f969a10b6194ea81ea4238ea1d80
0
trevsiob Messages postés 8 Date d'inscription jeudi 7 août 2014 Statut Membre Dernière intervention 8 août 2014
8 août 2014 à 13:41
Merci j'avais oublié!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 8/08/2014 à 14:17
Bonjour,

Pour la seconde question, voici ma réponse en code :

'passer de ListBox1 à ListBox2
Private Sub cmdadd_Click()
Dim counter As Integer
counter = -1

For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
ListBox2.AddItem ListBox1.List(i)
counter = i
End If
Next i
If counter <> -1 Then ListBox1.RemoveItem (counter)
End Sub

'passer de ListBox2 à ListBox1
Private Sub cmdremove_Click()
Dim counter As Integer
counter = -1

For i = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(i) Then
ListBox1.AddItem ListBox2.List(i)
counter = i
End If
Next i
If counter <> -1 Then ListBox2.RemoveItem (counter)
End Sub

Par contre, je n'ai pas compris la première question...

Cordialement,
Franck
0
trevsiob Messages postés 8 Date d'inscription jeudi 7 août 2014 Statut Membre Dernière intervention 8 août 2014
8 août 2014 à 14:16
Je ne vois pas tout le code que tu as écrit..
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 août 2014 à 14:17
Internet Explorer 8?????

Voilà...
0
trevsiob Messages postés 8 Date d'inscription jeudi 7 août 2014 Statut Membre Dernière intervention 8 août 2014
8 août 2014 à 14:31
Je viens d'essayé ton code et j'ai une erreur non répertorié à la dernière ligne:

If counter <> -1 Then ListBox1.RemoveItem (counter)
0
trevsiob Messages postés 8 Date d'inscription jeudi 7 août 2014 Statut Membre Dernière intervention 8 août 2014
8 août 2014 à 14:20
pijaku,

Ma première question était:
Lorsque l'utilisateur a fini son travail, il doit enregistrer le fichier excel. Mais lorsqu'on ouvre à nouveau le fichier sauvegarder, excel ne sauvegarde pas les données des listbox. J'ai donc créé un "Range" dans lequel la sélection se retrouve pour que les données soient enregistrées et j'ai un code dans WorkBook_Open qui va chercher les données du "Range" et cré une population dans la ListBox de la feuille excel. De cette façon je ne perd pas mes données. Le problème est que si je veux modifier la sélection la ça ne fonctionne pas...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 août 2014 à 14:36
Voici votre fichier en retour.
J'ai fait pas mal de modifications.
Pour la question1, vous modifiez manuellement dans vos deux Range et cliquez sur le bouton que j'ai ajouté.

Sinon, d'autres modifs :
- remplacement des propriétés RowSource des listbox d'userform par les propriétés list pour permettre l'effacement,

- Sélection multiple des listbox1 et 3 de l'userform

et des bricoles à droite à gauche, sans importance
0
trevsiob Messages postés 8 Date d'inscription jeudi 7 août 2014 Statut Membre Dernière intervention 8 août 2014
8 août 2014 à 14:41
Je ne peux pas ouvrir ton lien parce que mon réseau ne me le permet pas, il bloque l'accès au site.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 août 2014 à 14:48
je n'ai jamais utilisé itp.webtransfert donc...

http://www.webtransfer.ch/en/uploadfiles/212f1bb2c423eba5217835f74ce28cf608edd1cb
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 août 2014 à 14:49
oups :
http://www.webtransfer.ch/en/download/212f1bb2c423eba5217835f74ce28cf608edd1cb
0
trevsiob Messages postés 8 Date d'inscription jeudi 7 août 2014 Statut Membre Dernière intervention 8 août 2014
8 août 2014 à 15:14
Cette solution ne me convient pas vraiment.

1. En fait, tout ce prodécé fera parti d'un formulaire. L'affichage doit donc être optimal et les utilisateur ne pourront pas aller dans le range pour faire une modification manuelle.

2. Le code pour faire disparaître les item après leur sélection contient plusieurs bogues que je veux éviter. En fait, en faisant le test, si on sélection plusieurs items ils ne se suppriment pas tous. Aussi, en choisissant la mutliselection comme vous l'avez fait, il devient moins intéressant pour les utilisateurs qui choisiront seulement un item et voudront changé avant d'avoir cliqué sur "ADD".

Si vous avez d'autre suggestion à me faire quant aux outils (changer ListBox pour autre chose etc..) n'hésitez pas.

Merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
8 août 2014 à 15:31
J'ai compris...
Enfin je crois.
Regarde ce fichier
0