XL pour MAC Liste déroulante à choix multiples Excel mac

excelraideo

XLDnaute Nouveau
Bonjour,

Je me permets d'ouvrir cette discussion car j'ai fait un calendrier 2022 pour un groupe spécifique de personnes ne timbrant pas au sein de l'entreprise mais devant quand même informer de leur présence (si présence demi-journée ou jour complet et où). Je l'ai fait sous forme de calendrier annuel comme cela ne requiert pas de timbrage.

Mon problème est que j'aimerais y intégrer une liste déroulante à choix multiple dans les colonnes "AM" et "PM" comprenant les informations des colonnes "JU", "JUBE" et "NE" de l'onglet "Données". Le problème est que je ne sais pas comment faire ce type de liste déroulante. Je ne sais pas si le fait que je sois sur mac et que je travaille sur Word 2016 pour Mac fait une différence.

Je vois mets le lien du fichier pour mieux vous rendre compte de ce que c'est :


Je vous remercie de votre aide et de vos retours !
Kevin
 
Solution
Dans une liste de validation un seul élément peut être sélectionné:

Mais dans la cellule active on peut concaténer les choix successifs, fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If IsError(Target.Validation.Type) Or Target.Count > 1 Or IsEmpty(Target(1)) Then Exit Sub
Dim memo$, mess As Byte
Application.EnableEvents = False 'désactive les évènements
memo = CStr(Target) 'mémorise l'entrée
Application.Undo 'annule l'entrée
If Not IsEmpty(Target) Then Beep: mess = MsgBox("Voulez-vous concaténet '" & memo & "' ?", vbYesNo + vbQuestion, "Concaténation")
If mess = vbYes Then Target = CStr(Target) & "-" & memo Else Application.Undo
Application.EnableEvents = True 'réactive les...

job75

XLDnaute Barbatruc
Bonsoir excelraideo, bienvenue sur XLD,

Pourquoi déposer votre fichier sur Cjoint qui ne le gardera que quelques jours ?

Déposez-le ici en cliquant sur "Joindre un fichier".

Pour les listes de validation je ne crois pas que MAC pose problème.

Simplement il ne peut y avoir qu'une liste de validation dans une cellule.

Si cette liste doit changer il faut nous dire quels critères la font changer.

A+
 

excelraideo

XLDnaute Nouveau
Bonjour,

J'ai voulu poster ma demande avant l'inscription et il est vrai que l'action "joindre un fichier" n'était pas possible. Donc voici le fichier en pièce jointe.

Pour la liste de validation, je suis consciens qu'il y a qu'une seule liste de validation par cellule mais j'ai besoin de cette liste de validation contienne les éléments des colonnes citées dans mon premier message et que l'on puisse en choisir un ou plusieurs selon où l'on a travaillé (un ou plusieurs lieux de travail) par demi-journée (AM/PM).

A titre informatif, les lieux de travail indiqués dans l'onglet "Données" comprennent les sites de travail de l'institution ainsi que les sites de travail de nos partenaires où nous exerçons également.

Exemple ci-dessous :
AM : D-REP (D = Delémont ; REP = Mon Repos)
PM : M-RES (M = Moutier ; RES = La Résidence)

Si la liste change ce sera uniquement un ajout ou une suppression de lieu dans l'onglet "Données" donc dans une des colonnes "JU", "JUBE" ou "NE".

Merci pour votre retour.
 

Pièces jointes

  • calendrier-2022.xls
    62.5 KB · Affichages: 6

excelraideo

XLDnaute Nouveau
Bonjour,

J'ai voulu poster ma demande avant l'inscription et il est vrai que l'action "joindre un fichier" n'était pas possible. Donc voici le fichier en pièce jointe.

Pour la liste de validation, je suis consciens qu'il y a qu'une seule liste de validation par cellule mais j'ai besoin de cette liste de validation contienne les éléments des colonnes citées dans mon premier message et que l'on puisse en choisir un ou plusieurs selon où l'on a travaillé (un ou plusieurs lieux de travail) par demi-journée (AM/PM).

A titre informatif, les lieux de travail indiqués dans l'onglet "Données" comprennent les sites de travail de l'institution ainsi que les sites de travail de nos partenaires où nous exerçons également.

Exemple ci-dessous :
AM : D-REP (D = Delémont ; REP = Mon Repos)
PM : M-RES (M = Moutier ; RES = La Résidence)

Si la liste change ce sera uniquement un ajout ou une suppression de lieu dans l'onglet "Données" donc dans une des colonnes "JU", "JUBE" ou "NE".

Merci pour votre retour.

Re-bonjour,

Je me permets de préciser ma réponse ci-dessus...En effet, dans la liste de validation, les informations dans les colonnes "Autres" et "Absences" mentionnées dans l'onglet "Données" devraient être incluses.

Si cela est possible, je mettrai une mise en forme conditionnelle pour les données "Autres" et "Absences" selon la légende de couleur figurant sur le calendrier.

Merci de votre retour.
 

excelraideo

XLDnaute Nouveau
Bonjour,

Source de données :
> Onglet "Données", plage A1-E15

> Pas de message de saisie
> Pas d'alerte si erreur

Si modification de la liste, plage A1-E15 susceptible de changer (potentiellement A1-E16) mais à priori pas de changement avant plusieurs années.

J'espère avoir répondu.
A+
 

job75

XLDnaute Barbatruc
Donc si je comprends bien il n'y a pas de critères pour créer la liste de validation.

Tout ce que vous voulez c'est créer une seule liste alors voyez cette macro dans le code de la 1ère feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i&, j%, nlig&, x, liste(), n&
Cells.Validation.Delete 'RAZ
i = ActiveCell.Row
j = ActiveCell.Column
If i < 4 Or i > 34 Or Cells(3, j) <> "AM" And Cells(3, j) <> "PM" Then Exit Sub
With Sheets("Données").[A1].CurrentRegion
    nlig = .Rows.Count
    For j = 1 To .Columns.Count
        For i = 2 To nlig
            x = .Cells(i, j)
            If Not IsEmpty(x) Then
                ReDim Preserve liste(n)
                liste(n) = x
                n = n + 1
            End If
    Next i, j
    With .Columns(.Columns.Count + 2).EntireColumn
        .ClearContents
        If n Then
            .Resize(n) = Application.Transpose(liste) 'Transpose est limitée à 65536 lignes
            .Resize(n).Sort .Cells(1), xlAscending, Header:=xlNo 'tri alphabétique (facultatif)
            .Resize(n).Name = "Liste" 'plage nommée
            With ActiveCell.Validation
                .Add xlValidateList, Formula1:="=Liste" 'création de la liste de validation
                .ShowError = False 'pas de message d'erreur
            End With
        End If
    End With
End With
End Sub
PS : il y a un doublon dans la liste, à vous de faire en sorte qu'il n'y en ait pas.
 

Pièces jointes

  • calendrier-2022(1).xls
    60.5 KB · Affichages: 6

excelraideo

XLDnaute Nouveau
Donc si je comprends bien il n'y a pas de critères pour créer la liste de validation.

Tout ce que vous voulez c'est créer une seule liste alors voyez cette macro dans le code de la 1ère feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i&, j%, nlig&, x, liste(), n&
Cells.Validation.Delete 'RAZ
i = ActiveCell.Row
j = ActiveCell.Column
If i < 4 Or i > 34 Or Cells(3, j) <> "AM" And Cells(3, j) <> "PM" Then Exit Sub
With Sheets("Données").[A1].CurrentRegion
    nlig = .Rows.Count
    For j = 1 To .Columns.Count
        For i = 2 To nlig
            x = .Cells(i, j)
            If Not IsEmpty(x) Then
                ReDim Preserve liste(n)
                liste(n) = x
                n = n + 1
            End If
    Next i, j
    With .Columns(.Columns.Count + 2).EntireColumn
        .ClearContents
        If n Then
            .Resize(n) = Application.Transpose(liste) 'Transpose est limitée à 65536 lignes
            .Resize(n).Sort .Cells(1), xlAscending, Header:=xlNo 'tri alphabétique (facultatif)
            .Resize(n).Name = "Liste" 'plage nommée
            With ActiveCell.Validation
                .Add xlValidateList, Formula1:="=Liste" 'création de la liste de validation
                .ShowError = False 'pas de message d'erreur
            End With
        End If
    End With
End With
End Sub
PS : il y a un doublon dans la liste, à vous de faire en sorte qu'il n'y en ait pas.

Bonjour,

Je vous remercie pour la rapidité de votre retour.

La liste correspond partiellement à ce que je souhaite car j'aimerais dans cette liste pouvoir sélectionner un ou plusieurs éléments.

J'ai dû mal comprendre pour votre demande précédente si je comprends bien.

Merci pour le doublon.

A+
 

job75

XLDnaute Barbatruc
Dans une liste de validation un seul élément peut être sélectionné:

Mais dans la cellule active on peut concaténer les choix successifs, fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If IsError(Target.Validation.Type) Or Target.Count > 1 Or IsEmpty(Target(1)) Then Exit Sub
Dim memo$, mess As Byte
Application.EnableEvents = False 'désactive les évènements
memo = CStr(Target) 'mémorise l'entrée
Application.Undo 'annule l'entrée
If Not IsEmpty(Target) Then Beep: mess = MsgBox("Voulez-vous concaténet '" & memo & "' ?", vbYesNo + vbQuestion, "Concaténation")
If mess = vbYes Then Target = CStr(Target) & "-" & memo Else Application.Undo
Application.EnableEvents = True 'réactive les évènements
End Sub
Edit : ajouté un Beep avant la MsgBox.
 

Pièces jointes

  • calendrier-2022(2).xls
    70.5 KB · Affichages: 12
Dernière édition:

excelraideo

XLDnaute Nouveau
Dans une liste de validation un seul élément peut être sélectionné:

Mais dans la cellule active on peut concaténer les choix successifs, fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If IsError(Target.Validation.Type) Or Target.Count > 1 Or IsEmpty(Target(1)) Then Exit Sub
Dim memo$, mess As Byte
Application.EnableEvents = False 'désactive les évènements
memo = CStr(Target) 'mémorise l'entrée
Application.Undo 'annule l'entrée
If Not IsEmpty(Target) Then mess = MsgBox("Voulez-vous concaténet le texte choisi ?", 4)
If mess = vbYes Then Target = CStr(Target) & " " & memo Else Application.Undo
Application.EnableEvents = True 'réactive les évènements
End Sub

Bonsoir,

Je vous remercie pour le retour cela correspond à ce que je souhaite. Par contre, est-ce qu'il est possible de mettre un "-" au lieu d'un espace lorsqu'on concatène les choix ?

De plus, j'ai vu voulu enlever le doublon "UHPA" dans la liste mais lorsque je fais un test ensuite la liste remet le doublon. Pouvez-vous m'expliquer svp ?

Merci beaucoup pour votre aide !
Kevin
 

job75

XLDnaute Barbatruc
J'ai édité le post #9 pour ajouter un Beep et mis un tiret puisque vous avez un poil dans la main.

Pour supprimer le doublon effacez soit la cellule A13 soit la cellule B10 de la 2ème feuille.

Vous n'avez pas compris que la liste en colonne G se reconstruit à chaque fois ?
 

Tibooo

XLDnaute Nouveau
Bonjour à toutes et tous,
Plutôt que de créer une nouvelle discussion, je me permets (peut être à tord) de répondre directement dans celle-ci car ma question porte sur un problème de liste déroulante à choix multiples, gérée en VBA, qui fonctionne bien sur mon PC, mais pas du tout sur le MAC de mon collègue...


Mon fichier excel est présenté ainsi :
- Feuille planning : dans laquelle je voudrais faire apparaitre la liste
- Feuille Equipe : dans laquelle se trouve la plage "Team" qui correspond à l'ensemble de mon équipe de salarié

objectifs :
Dans la feuille Planning, je voudrais quand les jours sont travaillé ("oui" en Colonne B), qu'une liste déroulante apparaisse à côté de la colonne M, au niveau de la ligne du jour travaillée, une liste déroulante dans laquelle je puisse sélectionné un ou plusieurs de mes salariés séparés par " / ".

Si le jour n'est pas travaillé ou que je clique ailleurs dans le tableur, la liste déroulante disparait mais les noms choisis restent dans la case de la colonne M. Et si je reviens cliqué dans cette case, ça ne m'efface pas les noms qui y étaient mais ça les surligne dans la liste déroulante.

Et je voudrais que cela marche sur PC ET sur Mac

VBA :
Pour répondre à mon besoin, je me suis basé sur un tuto youtube =>

En adaptant le code présenté dans cette vidéo, je suis arrivé à un fichier qui fonctionne bien sur mon PC.
Pour que vous ne soyez pas obligé de regarder toute la vidéo, je précise que ça fonctionne avec :
- Du code dans le code de la feuille de calcul qui fait apparaitre la liste déroulante
- une macro dans un module séparé, lancée lorsque je clique sur la liste déroulante

NB : la liste déroulante a été renommée "Zlist"



Voici le code de la feuille de calcul :


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set oList = Sheets("Planning").ListBoxes("Zlist")
oList.Visible = False

If ActiveCell.Column <> Range("ListTeam").Column Or _
Cells(ActiveCell.Row, 2) = "" Or _
ActiveCell.HasFormula Then

Exit Sub

End If

With oList
.Height = 200 '150 est en point
.Width = 100 '100 est en point
.Top = ActiveCell.Top 'pour situer le haut de la liste quand elle apparait
.Left = ActiveCell.Offset(0, 1).Left 'pour qu'elle apparaisse à droite de la case sélectionner
.Visible = True


For i = 1 To .ListCount
.Selected(i) = False
Next

a = VBA.Split(ActiveCell, " / ")
If UBound(a) >= 0 Then
For i = 1 To .ListCount
If Not IsError(Application.Match(.List(i), a, 0)) Then
bTest = True
.Selected(i) = True
bTest = False
End If

Next
End If
End With

End Sub



Et le code du module :

Option Explicit

Public i As Long
Public a
Public bTest As Boolean
Public oList As ListBox

Sub ZlistChangement()
If bTest Then
Exit Sub
End If
Set oList = Worksheets("Planning").ListBoxes("Zlist")
ActiveCell = ""
Dim j As Integer
j = 1

For i = 1 To oList.ListCount
If oList.Selected(i) = True Then
If j <> 1 Then

ActiveCell = ActiveCell & " / "
End If
ActiveCell = ActiveCell & oList.List(i)
j = j + 1

End If
Next

End Sub


Voilà pour ce qui est de la présentation du problème, et comme déjà dit, cela fonctionne très bien sur mon PC. Par contre, cela ne marche pas sur les MAC où j'ai pu la tester... Est ce que l'un ou l'une d'entre vous arriverait à m'aider pour rendre ça compatible ??

Je vous joins un fichier représentant le problème et que vous pourrez donc tester chez vous.

En vous remerciant déjà pour votre attention !
 

Pièces jointes

  • Liste déroulante choix multiples.xlsm
    21.9 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour Tibooo, bienvenue sur XLD,

Effectivement ce n'est pas une bonne idée de squatter ce fil, d'autant que votre fichier n'utilise pas une liste de validation.

Il utilise un contrôle de formulaire (Zone de liste), c'est peut-être pour cela qu'il ne fonctionne pas sur MAC.

Essayez en utilisant un contrôle ActiveX (ListBox), c'est ce qu'on utilise en général.

A+
 

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 104
dernier inscrit
JEMADA