USF qui coche les case de la ListBox en fonction des éléments du tableau

Bonjour

J'avais demandé de l'aide pour un programme sur le forum et on m'a gentiment écrit un code qui marche super bien (merci ThauThème). Cependant comme je connais vraiment très peu de chose sur excel je n'arrive pas bien a l'arranger pour réaliser exactement ce que je veux c'est pour ca que je redemande de l'aide.

Pour le moment le programme permet d'ouvrir un UserForm dans lequel on choisis un projet a l'aide une ComboBox et on sélectionne dans la ListBox des références pour le projet (elles sont écrite 5 fois c'est normal) et quand on clique sur Ajouter un élément ca ajoute ces références dans le tableau a la ligne choisis.

J'ai plusieurs demandes :

1) Déjà je ne comprend pas le principe de boucle inversé, pourquoi ne pas faire une boucle normale? :

For I = Me.liste1.ListCount - 1 To 0 Step -1 'boucle 2 : inversée du dernier au premier élément de [liste1]

2) Je ne comprend pas non plus a quoi ca sert d'annoncer 2 colonnes dans chaque liste pour les numéroter ?

3) Aussi je n'arrive pas a arranger le programme de manière a ce que lorsqu'un numéro de série est mis dans une ligne du tableau il devienne indisponible et ne puisse pas être mis dans une autre.

12a-partager.xlsm (42.72 Ko)

Merci

Bonjour,

Le mieux serait que Thauthème réponde à vos questions mais voici pour la question 1

1) Déjà je ne comprend pas le principe de boucle inversé, pourquoi ne pas faire une boucle normale? :

Si vous analysez le code, il est normal qu'il parte du bas. Prenez l'exemple de 3 items dans votre listbox à droite.
Vous voulez les replacer à gauche. la variable I va prendre les valeurs de 1 à 3.
Si vous prenez une boucle normale, lorsque I = 1 vous enlevez la première valeur de la colonne. D'où le deuxième item passe en position 1 et le 3 ieme item vient en position 2. Lorsque I = 2, il prendra la 3ieme valeur passée en position 2. Lorsque I = 3, vous aurez une erreur car le code ne trouvera rien. Par contre votre listbox contiendra toujours 1 item.
Dans la boucle proposée par Thauthème, la valeur de I correspondra toujours l'item à enlever (I = 3 pour l'item 3, I = 2 pour l'item 2, ....)

Cordialement

Ah oui en effet merci je comprend mieux pour la boucle

2) Je ne comprend pas non plus a quoi ca sert d'annoncer 2 colonnes dans chaque liste pour les numéroter ?

Il n'y a qu'une colonne dans listbox

Bonjour le fil, bonjour le forum,

Merci à Dan d'intervenir...

Pour répondre à tes questions, le fait de mettre deux colonnes dans chaque listbox est purement esthétique. Il me permet de trier pour retrouver le même ordre. Comme l'a expliqué Dan, pour déplacer les items de la liste1 vers la liste2 je passe par une boucle inversée. Si tu sélectionne les items 1, 5 et 11 de la liste1 tu te retrouverais avec dans l'ordre les items 11, 5 et 1 dans la liste2. Le fait de les avoir numérotés dans une colonne cachée des listes me permet de retrouver le bon ordre.

Dans l'autre sens (flèche vers la gauche), les items se retrouveraient en bas de la liste alors qu'avec ce principe ils se retrouvent à leur place initiale.

Aussi je n'arrive pas a arranger le programme de manière a ce que lorsqu'un numéro de série est mis dans une ligne du tableau il devienne indisponible et ne puisse pas être mis dans une autre.

Jneh, je ne comprends pas pourquoi il y a des doublons dans les Numéros de série d'armoire. Si tu mets un numéro pour un projet et qu'on l'enlève de la liste il en reste encore d'autres à cause des doublons. C'est impossible à coder tant que tu ne fourniras pas une liste sans doublons !...

D'accord merci je vois pour les colonnes et la boucle

Oui je remet un classeur sans doublon mais même si je met les 5 même numéro pour un projet ils sont encore sélectionnables pour un autre projet

8a-partager.xlsm (41.53 Ko)

Re,

Oui pour le moment... Je dois modifier le code...

D'accord merci

Re,

Je ne comprends pas pourquoi tu t'obstines à mettre le bouton Modifier au milieu alors que tu sais qu'il va y avoir de nouvelles colonnes ?!... Je l'ai remis dans la première ligne et décalé le tableau vers le bas... Il est inutile de créer des tableaux structurés jusqu`à la dernière ligne d'un onglet. Le tableau s'agrandira automatiquement lorsque tu rajouteras des données en dessous de la dernière ligne ou en utilisant la touche [Tabulation] dans la dernière cellule de celui-ci...

Dans l'onglet Référence il y a désormais deux tableaux (Numero et NumeroUnique). Numéro est la référence de base. Le code se sert de NumeroUnique et de ce fait sa liste diminue au fur et à mesure que tu rajoutes des références dans les projets. Si par hasard tu as besoin de récupérer toutes les références, fait un copier/coller de Numero vers NumeroUnique. De la même manière, su tu rajoutes une ou plusieurs références, il te faudra les rajouter dans les deux tableaux...

Le fichier :

17jneh-ep-v02.xlsm (45.77 Ko)

Ok merci ca marche bien mais j'ai un problème type "9" avec cette ligne que je ne comprend pas

Set TRf = ORf.ListObjects("NumeroUnique") 'définit le tableau structuré TRf

J'ai l'impression que c'est du a la forme de la liste comme si "ListObjects" ne correspond pas a ce que j'annonce

Sur ton classeur ca marche mais quand je le met sur le mien avec les vrais numéros de série a ne marche plus pourtant j'ai bien définis les noms des tableaux

Re,

Ça marche chez moi avec le fichier que je t'ai envoyé version 2. Je ne vois pas pourquoi ça ne marcherait pas chez toi si tu n'as rien modifié. Envoie ton fichier que je regarde...

J'ai remplacé avec mes numéros de série, il y a des espaces dans mon tableau qui sont nécessaires parce que normalement j'ai une seconde colonne a cotes avec 5 numéro de série correspondant a l'armoire (comme 5 tiroirs différents dans la même armoires par ex) mais ce n'est pas ca qui pose problème donc je ne comprend pas surtout que quand je copie la colonne référence de ton classeur et je la colle dans le mien sans rien changer d'autre ca marche

12partage.xlsm (48.21 Ko)

Re,

Tes tableaux ne correspondent plus à la méthode employée. Désolé...

C'est bon j'ai changé ListObject par Range et j'ai enlever le tableau donc ca fonctionne bien pour le moment

En tout cas merci beaucoup pour ce que tu as fais c'est super cool

Rechercher des sujets similaires à "usf qui coche case listbox fonction elements tableau"