Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel
Excel Forum d'entraide sur Excel. Vos questions sur les fonctions, formules, manipulations, et tout sujet qui ne trouve pas sa place dans un sous-forum.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2011, 15h03   #1
Invité de passage
 
Femme Amélie Dasré
Ingénieur qualité méthodes
Inscription : décembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Femme Amélie Dasré
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2011
Messages : 5
Points : 2
Points : 2
Par défaut Liste/menu déroulant spécifique

Bonjour.

Merci de m'apporter une aide sur mes problèmes avec Excel.

1) Je voudrais savoir comment créer une liste déroulante sur une cellule excel et que celle-ci de soit pas figée.
Je m'explique :
Dans ma cellule, je voudrais que défile le nom des personnes que j'ai choisi dans ma liste(grace à la petite flèche sur le côté), que je puisse sélectionner le nom et en re-sélectionner d'autre dans la même cellule et à partir de cette même liste (puisque que plusieurs personnes peuvent être concernées). Les noms serait par exemple, séparé d'un petit tiré (dans la même cellule).

2) Les personnes concernées appartienne à des services spécifiques. J'aimerai que lorsque je sélection une personne, le nom du service apparaisse dans la cellule d'à côté. S'il y a plusieurs personnes, le nom des services sont séparé d'un tiré. (et si plusieurs personnes travail pour le même service, il ne sera pas répété).


Interlocuteur concerné Service concerné
jean Bernard - Damien Jean Alimentation - Sport


Je ne sais pas s'il serait possible de faire tout ca.

Merci d'avance pour votre aide et dit-moi au moins si c'est possible.
Tabata58 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 17h55   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 918
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 918
Points : 7 231
Points : 7 231
Bonjour,

Cela devrait être possible en VBA.

Mais avant de se lancer, il faut poser le contexte et se poser quelques questions

- Si je choisi une personne et que je me trompe => Quelle action pour la supprimer de la liste ?
- Une personne déjà choisi devrait ne plus apparaître dans la liste sinon on risque de la choisir une nouvelle fois.
- ou se trouve le nom des personnes et les services (même onglet ?)
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/12/2011, 21h49   #3
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Pour éviter d'avoir à gérer une liste dynamique (ajout/suppression de nom, doublon ...), il est possible d'utiliser une liste statique, et de l'afficher dans une ListBox à sélection multiple.


Cette ListBox apparaîtrait lorsqu'on clique sur la cellule contenant la liste des utilisateur.
A la fermeture :
- du code VBA met à jour la cellule à partir des informations de la liste box.
- du code VBA met à jour la cellule adjacente sur la liste des services.

Citation:
Les noms serait par exemple, séparé d'un petit tiret (dans la même cellule)
Je conseil un séparateur de liste plus standard comme ';'.
Avec le tiret il peut y avoir un conflit avec les prénoms composé (ex : Jean-Bernard)

En pratique la liste box devrait utiliser les options
- Multiselect = fmMultiSelectMulti
- ColumnCount = 2 (Utilisateurs | Services)
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/12/2011, 10h35   #4
Invité de passage
 
Femme Amélie Dasré
Ingénieur qualité méthodes
Inscription : décembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Femme Amélie Dasré
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2011
Messages : 5
Points : 2
Points : 2
Ok, merci BlueMonkey, ca pouvais être une idée mais j'ai un truc genre 70 personnes donc, ca devriendra vite ingérable je pense. . Mais bonne idée pour les "-", tu as parfaitement raison.

Pour Jérome,
-Pour la supression, j'aurai vu plutôt un truc où on clic sur le nom, qui se mets en surbrillance et hop, on supprime ! (a vrai dire, je ne me suis pas posée la question)
-oui, effectivement, ca serait pas mal d'une personne déjà sélectionnée ne soit plus dans la liste.
- Alors, non, le nom des personnes et les services associées ne sont pas dans le même onglet

Je vous envoie un petit exemple de mon tableau excel.

Merci encore pour votre aide.
Fichiers attachés
Type de fichier : xls Exemple.xls (16,5 Ko, 10 affichages)
Tabata58 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 11h21   #5
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 918
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 918
Points : 7 231
Points : 7 231
je te retourne ton fichier avec un peu de code.

- Quand on sélectionne une cellule de la colonne D, on affiche la liste des personnes
- on sélectionne les personnes
- quand on ferme la userform, on affiche en colonne D les personnes et en colonne E les services

VBA - Listbox.xls

EDIT : pour rendre dynamique la liste des personnes, modifies l'évènement Initialise comme suit
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub UserForm_Initialize()
 
Dim i As Integer
 
ListBox1.RowSource = "feuil2!A2:A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row
 
For i = 0 To ListBox1.ListCount - 1
 
    If InStr(ActiveCell.Value, ListBox1.List(i, 0)) > 0 And ListBox1.List(i, 0) <> "" Then
        ListBox1.Selected(i) = True
    End If
Next i
 
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 23/12/2011, 11h48   #6
Invité de passage
 
Femme Amélie Dasré
Ingénieur qualité méthodes
Inscription : décembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Femme Amélie Dasré
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2011
Messages : 5
Points : 2
Points : 2
Jérôme, c'est magique !
Je te remercie beaucoup !

Alors, bon, je ne sais pas comment tu as fais.
Pourrais tu m'expliquer vite fais si c'est pas trop trop long ?

Sinon, je trouverai un moyen d'utiliser ton travail.

Merci encore.

Amélie.
Tabata58 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 11h50   #7
Invité de passage
 
Femme Amélie Dasré
Ingénieur qualité méthodes
Inscription : décembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Femme Amélie Dasré
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2011
Messages : 5
Points : 2
Points : 2
ha oui, j'avais pas vue la programmation.
Merci
Tabata58 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 11h55   #8
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 918
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 918
Points : 7 231
Points : 7 231
Quelques explications.

On capte la sélection d'une cellule de la colonne D (ou 4) et on lance la fenètre contenant la liste des personnes (Userform1)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
'Si la colonne = D
If Target.Column = 4 Then
    Si la Colonne A n'est pas vide
    If Target.Offset(0, -3).Value <> "" Then
        'On affiche la liste des personnes
        UserForm1.Show
    End If
End If
 
End Sub
La fenètre s'ouvre et dans son initialisation, on sélectionne les nom qui sont dans la cellule active
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub UserForm_Initialize()
 
Dim i As Integer
 
'Affiche la liste des personnes
ListBox1.RowSource = "feuil2!A2:A" & Sheets("Feuil2").Range("A65535").End(xlUp).Row
 
'On boucle sur cette liste pour sélectionner les noms déja actifs
For i = 0 To ListBox1.ListCount - 1
 
    If InStr(ActiveCell.Value, ListBox1.List(i, 0)) > 0 And ListBox1.List(i, 0) <> "" Then
        ListBox1.Selected(i) = True
    End If
Next i
 
End Sub
Quand on sort on met a jour la cellule active ainsi que la colonne qui sontient les services
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
Private Sub UserForm_Terminate()
 
Dim i As Integer
Dim strService As String
 
'On vide la précédente mise a jour
ActiveCell.Value = ""
ActiveCell.Offset(0, 1).Value = ""
 
On boucle sur les noms pour savoir lesquels sont sélectionnés
For i = 0 To ListBox1.ListCount - 1
 
    If ListBox1.Selected(i) = True Then
        'Ajout du nom dans la liste de la cellule active
        If ActiveCell.Value <> "" Then ActiveCell.Value = ActiveCell.Value & ";"
        ActiveCell.Value = ActiveCell.Value & ListBox1.List(i, 0)
 
        'Recherche du service lié au nom sélectionné
        strService = Application.WorksheetFunction.VLookup(ListBox1.List(i, 0), Sheets("Feuil2").Range("A:B"), 2, 0)
        'Traitement de l'affichage des doublons de service
        If InStr(ActiveCell.Offset(0, 1).Value, strService) = 0 Then
            If ActiveCell.Offset(0, 1).Value <> "" Then ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(0, 1).Value & ";"
            ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(0, 1).Value & strService
        End If
 
    End If
 
 
Next i
 
End Sub
Si tu as d'autres questions n'hésites pas
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/12/2011, 17h15   #9
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Tout le travail été fait par JFontaine.
Mais juste pour montrer ce que ça donne avec :
- 2 colonnes, (nom | service)
- checkbox,
- 70 personnes.
- et une plage de cellule nommée pour simplifier la mise à jour de la liste des personnes.

VBA - Listbox 2 cols.xls

L'utilisation de plage nommée (est à affecter à la propriété RowSource de la ListeBox). Lorsqu'on ajoute une personne, il suffit de redéfinir la plage, sans toucher au code.
Et ça évite un bug mineur dans la version actuelle (si on sélectionne une ligne après le derniers nom visible, il y a une fenêtre d'erreur qui apparaît).
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 23/01/2012, 12h19   #10
Invité de passage
 
Femme Amélie Dasré
Ingénieur qualité méthodes
Inscription : décembre 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Femme Amélie Dasré
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2011
Messages : 5
Points : 2
Points : 2
Bonjour à tous.
Jérôme et BlueMonkey, tout d'abord, bonne année à vous.
Je vous remercie pour vos explications. Je viens de rentrer de vacances et je viens de prendre connaissance de vos messages seulement aujourd'hui.

Bon, je vais pas vous le cacher, je ne sais même pas comment on insère une macro sur excel, en particulier de 2003. Il faudra reprendre de la base : Tu vas dans outils, macro, etc.... (ignorante que je suis )

Merci et à bientôt amis développeurs !
Tabata58 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h48.


 
 
 
 
Partenaires

Hébergement Web