HELP!!! VB Excel liste multicolonnes

Résolu/Fermé
Ludivine - 4 févr. 2009 à 11:04
 Ludivine - 4 févr. 2009 à 16:08
Bonjour à tous,

Vous allez probablement vous dire "encore les TextBox multi-colonnes!!!!". Hélas oui, il y a beau avoir de la documentation à ce sujet, je n'arrive pas à adapter les codes présentés à mon cas. J'ai beau me tirer les cheveux, je m'emmèle encore plus les pinceaux! Alors dernière solution avant de devenir folle je vous demande votre aide précieuse!

Voici mon projet:
j'ai fait un formulaire de saisie d'heures sous Excel:
Un premier Userform appelé SAISIE1 s'affiche pour que l'agent saisisse l'année et le mois sur lequel il va faire les enregistrements. En cliquant sur le bouton de commande VALIDATION_PARAM_PERIODE, cela ferme SAISIE1 et ouvre SAISIE2.
Un second Userform appelé SAISIE2 s'affiche pour que l'agent saisise l'affaire dans une liste déroulante, le véhicule également dans une liste déroulante, puis le nombre d'heures. En cliquant sur le bouton de commande VALIDATION2, les données saisies dans les deux formulaires sont stockées dans une feuille excel, puis SAISIE2 est rouvert avec réinititialisation des champs. On peut alors continuer la saisie sans retourner à chaque fois sur SAISIE1.
Les listes déroulantes sont des plages de données Excel.
Tout cela fonctionne parfaitement bien.

Après je me suis dit, ça c'est déjà bien, maintenant on va évoluer un peu. Actuellement, quand on sélectionne dans la liste déroulante, on sélectionne un contenu "code affaire + libellé affaire" donc c'est aussi ce qui est stocké dans ma feuille Excel. Mais je voudrais que l'agent puisse effectuer sélectionner dans la liste déroulante "code affaire + libellé affaire" mais stocker seulement le code affaire. Il faut donc que j'utilise des listes multi colonnes: afficher "code affaire & libellé affaire" dans la liste déroulante de sélection et stocker seulement le premier champs.

Mais alors là, c'est le trou noir, je suis perdue. A force de chercher de l'aide, je me plante encore plus (heureusement, j'ai fait une sauvegarde de mon fichier quand il fonctionnait encore...)
Alors, c'est avec un espoir énorme que je vous demande votre aide!!!!
En espérant que je me suis exprimée de manière compréhensible!
Merci
Ludivine
A voir également:

4 réponses

mikebzh Messages postés 127 Date d'inscription samedi 20 décembre 2008 Statut Membre Dernière intervention 11 mars 2009 28
4 févr. 2009 à 11:13
Coucou
Ai-je compris ton soucis ??

A l'heure actuelle, tu sélectionnes un "code affaire + libellé affaire" et tu voudrais simplement stocker "code affaire".
Où est ton problème exactement ?
1
Bonjour mikebzh et merci pour ta réponse (la mienne est plus tardive, je n'ai encore pas reçu le mail me prévenant de ta réponse...),

En fait, j'ai une plage de données AFFAIRE:
Colonne A Colonne B Colonne C
6C12311 AFFAIRE 1 6C12311 AFFAIRE 1
6G55545 AFFAIRE 2 6G55545 AFFAIRE 2

La colone C est tout simplement la formule : colonne A & " " & Colonne B.

Dans mon userform, j'ai fait une liste déroulante simple de sélection sur la colonne C.

Mais je voudrais en fait faire une liste déroulante multi-colonnes sur les colonnes A et B, pour que l'agent voit le code et le libellé, puis lors de l'enregistrement, je voudrais stocker seulement le champs contenu dans la colonne A.

C'est très simple en fait, mais je n'arrive pas à le réaliser. ça plante de partout.
0
mikebzh Messages postés 127 Date d'inscription samedi 20 décembre 2008 Statut Membre Dernière intervention 11 mars 2009 28
4 févr. 2009 à 13:04
Comment affectes-tu ta liste déroulante à ta colonne C ?

Sinon, je te propose un petit truc du style :

Quand le choix est effectué dans ta liste, on connait sa position par la propriété listindex
ici j'ai mis une combobox mais on peut gérer une listbox ou autre
L'idée est donc de ressortir la position du choix et de lire simplement ta colonne A pour récupérer ton affaire

[code]

Private Sub ComboBox1_Change()
dim ligne as integer
ligne = ComboBox1.ListIndex
MsgBox ("vous désirez l'affaire : " & Cells(ligne + 1, 1).Value)
End Sub

[\code]

A plus
0
Pour mettre en liste la colonne C, je fais le code suivant avant l'ouverture du formulaire

SAISIE2.CHANTIERS.Clear                         ' vider le contenu de la variable CHANTIERS
Sheets("listes").Select                         ' se placer sur le feuillet "listes"
Range("F8").Select                              ' se placer sur la cellule F8 - 1ere ligne de la liste
Do While ActiveCell.Value <> ""                 ' Tant que la cellule sélectionée n'est pas vide
    SAISIE2.CHANTIERS.AddItem ActiveCell.Value  ' Ajoute le contenu de la cellule sélectionnée à la liste déroulante qui s'affiche dans la variable CHANTIERS
    ActiveCell.Offset(1, 0).Select              ' Passe à la ligne suivante
Loop


Dans le code que tu me proposes, où indique-t-on la plage de données où sont listées les chantiers?
(je suis un boulet quand je m'y mets...)
0
mikebzh Messages postés 127 Date d'inscription samedi 20 décembre 2008 Statut Membre Dernière intervention 11 mars 2009 28
4 févr. 2009 à 14:24
Dans mon code la liste des chantiers est indiquée en colonne A dans la cells(ligne + 1,1) que je récupère
dans la msgbox, mais à toi de la récupérer où tu veux.

Si je suis à l'ouest dans mes réponses, tu peux peut-être m'envoyer une trame épurée de ton fichier
via le site www.cijoint.fr ? , après tu n'as plus qu'à me poster le lien.
0
C'est plutôt moi qui est à l'ouest!
Merci beaucoup pour ton aide.
Malheureusement, je ne comprends pas comment le formulaire sait que "ligne" c'est la colonne A de la feuille "liste".

J'ai déposé une version allégée du fichier avec que la partie formulaire de saisie.
http://www.cijoint.fr/cjlink.php?file=cj200902/cijEQbPrvK.xls

Merci encore beaucoup de m'aider!
0
mikebzh Messages postés 127 Date d'inscription samedi 20 décembre 2008 Statut Membre Dernière intervention 11 mars 2009 28
4 févr. 2009 à 15:44
Voila ma proposition dans la sub VALIDATION2_Click()

'ActiveCell.Value = SAISIE2.CHANTIERS.Value (ton retour de formulaire)
ActiveCell.Offset(0, 1).Select
'ActiveCell.Value = SAISIE2.VEHICULES.Value


'Le mien
dim ligne as integer

ligne = SAISIE2.CHANTIERS.ListIndex
ActiveCell.Value = Sheets("listes").Cells(8 + ligne, 7).Value

ActiveCell.Offset(0, 1).Select

ligne = SAISIE2.VEHICULES.ListIndex
ActiveCell.Value = Sheets("listes").Cells(8 + ligne, 3).Value

C'est ce que tu voulais, ou alors j'ai rien compris (ce qui est humainement possible) ?
0
génial!!!! cela fonctionne!! Tu as parfaitement compris ce qu'il me fallait. C'était tellement bête, mais bon... faut quand même savoir le faire! Maintenant j'ai compris le fonctionnement et je t'en remercie milles fois!
ça m'a redonné le moral, je continues sur ma lancée!
Encore merci et bonne journée!
Ludivine
0