XL 2016 Compatibilité de comportement Listbox entre 2016 et 365

mikachu

XLDnaute Occasionnel
Bonjour,

J'ai créé une macro VBA excel pour pouvoir faire un choix multiple sur une listbox et remplir automatiquement la cellule sélectionnée, et inversement, cocher les informations remplies dans la listbox. (voir fichier joint expurgé des données confidentielles, pour le principe de fonctionnement)

En gros, lorsque je sélectionne une cellule de la colonne C:
- Je vérifie que la cellule correspondante de la colonne A n'est pas vide
- Si c'est le cas, j'affiche la listbox remplie avec les sonnées dans la feuille de calcul Feuil2
- Si la case de la colonne C contient déjà des informations, je les récupère pour cocher les cases de la listbox correspondantes
- Lorsque je coche/décoche les cases de la listbox, je mets à jour la cellule sélectionnée

Tout fonctionne nickel, même si j'imagine que l'écriture de la macro pourrait être améliorée. Le problème est sur le positionnement de la listbox. J'utilise les propriétés Listbox1.Top et Listbox1.left pour positionner la listbox juste à droite de la cellule sélectionnée, et cela fonctionne nickel sauf sous office 365.

Je suis sous office 2016, et tout fonctionne correctement, mais lorsqu'une personne avec office 365 utilise le fichier, un décalage de la listbox se fait peu à peu au fur et à mesure qu'on descend dans le tableau, si bien qu'au bout d'un moment elle est carrément hors de l'écran.

Je n'arrive pas à identifier la cause de ce décalage, pouvez-vous m'aider à résoudre ce problème ? J'ai fouillé sur le forum mais je n'arrive pas à trouver de sujet correspondant.

Je joins également deux images pour expliquer le problème

Voilà ce qui se passe
erreur.GIF


voilà comment ça devrait être
correct.GIF



Merci d'avance :)
 

Pièces jointes

  • test macro selection multiple.xlsm
    46.5 KB · Affichages: 9
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour @fanch55
et donc la liste ne se place pas sur la ligne sélectionnée
de plus pourquoi repeter a chaque click la mise en forme de la listbox

je propose non seulement de simplifier tout ça mais de procéder différemment
quand on sélectionne une cellule en "C" qui est vide la liste est vierge de toute sélection mais quand on sélectionne une ligne ou l'on a déjà sélectionner des cases la liste s'affiche avec ceux qui ont déjà été sélectionne
je fait ca à la vas vite c'est a perfectionner ou a enjoliver le code comme vous voulez
VB:
Option Explicit
Dim stemp As String
Dim i As Long
Dim a
Dim btest As Boolean


Private Sub ListBox1_Change()
    If btest Then Exit Sub
    stemp = ""
    For i = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(i) Then
            stemp = stemp & Me.ListBox1.List(i) & "-"
        End If

    Next
    If stemp = "" Then
    Else
        stemp = VBA.Left(stemp, VBA.Len(stemp) - 1)
    End If

    ActiveCell = stemp


End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim a, b, i&, x&
    If ActiveCell.Row = 1 Or ActiveCell.Column <> 3 Then ListBox1.Visible = False: Exit Sub
    ListBox1.List = Feuil2.Range("A1", Feuil2.Cells(Rows.Count, 1).End(xlUp)).Value

    If ActiveCell.Column = 3 And Feuil1.Cells(ActiveCell.Row, 1) <> "" Then
        ListBox1.Visible = True: ListBox1.Top = ActiveCell.Top
        If ActiveCell <> "" Then
            a = VBA.Split(ActiveCell, "-")
            b = ListBox1.List
                For i = 0 To UBound(a)
                    x = Application.IfError(Application.Match(a(i), b, 0), "")
                    If x >= 1 Then ListBox1.Selected(x - 1) = True
                Next
            
        End If

    End If

End Sub
resultat
demo.gif
 

Discussions similaires