Bonjour à toutes et tous,
Suivant les conseils de job75, je me permets donc de créer une nouvelle discussion pour une question qui 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"
NB 2 : Le code utilise un contrôle de formulaire car de ce que j'ai compris, les contrôle ActiveX ne sont pas pris en charge sur Mac...
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 !
Suivant les conseils de job75, je me permets donc de créer une nouvelle discussion pour une question qui 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"
NB 2 : Le code utilise un contrôle de formulaire car de ce que j'ai compris, les contrôle ActiveX ne sont pas pris en charge sur Mac...
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 !