Erreur de compilation
T
Bonjour à tous,
J'ai une erreur dans mon code que je n'arrive pas à résoudre. Je fais donc appelle à votre expérience.
Une erreur "Erreur de compilation : Membre de méthode ou de données introuvable" s'affiche en surlignant .ListBox1. Pourriez vous m'aiguillez ?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Column = 10 And ActiveCell.Row > 12 Then 'Si on selectionne la cellule "DS"
site = Cells(ActiveCell.Row, 1).Value
If site = "" Then 'si "SITE" n'est pas rempli
Me.ListBox1.Visible = False
MsgBox ("Please fill out the Site")
Exit Sub
Else 'si la ligne est pleine avec site et material type, on affiche la ListBox
With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption
.Height = 350
.Width = 300
.Top = ActiveCell.Top
.Left = ActiveCell.Offset(0, 1).Left
.Visible = True
End With
On Error Resume Next
i = Application.WorksheetFunction.Match(site, Worksheets("DS").Range("DS"), 0) - 1 'numéro de colonne ou se trouve la liste concernée dans "DS" - "DS" étant le nom donné à la ligne n1 de l'onglet DS
'-1 car dans Excel on commence à compter les colonnes à 1 mais dans VBA on commence en 0
If Worksheets("DS").Range("A1").Offset(0, i).End(xlDown).Row = 2 Then 'car dans Excel on commence à compter les lignes à 1 mais dans VBA on commence en 0
Me.ListBox1.List = Array(Worksheets("DS").Range(Worksheets("DS").Range("A1").Offset(1, i), Worksheets("DS").Range("A1").Offset(0, i).End(xlDown)).Value, "")
Else
Me.ListBox1.List = Worksheets("DS").Range(Worksheets("DS").Range("A1").Offset(1, i), Worksheets("DS").Range("A1").Offset(0, i).End(xlDown)).Value 'on attribue la bonne list à la list box
End If
On Error GoTo 0
t = VBA.Split(ActiveCell, ";") 'va récupérer ce qui est déjà coché, pour que si on reclique sur la cellule, on ait déjà les objets selectionnés précochés
If UBound(t) >= 0 Then 'valeur la plus grande
For j = 0 To Me.ListBox1.ListCount - 1
If Not IsError(Application.Match(Me.ListBox1.List(j), t, 0)) Then
b = True
Me.ListBox1.Selected(j) = True
b = False
End If
Next
End If
End If
ElseIf ActiveCell.Column = 11 And ActiveCell.Row > 12 Then 'Si on selectionne la cellule "DP"
site = Cells(ActiveCell.Row, 1).Value
If site = "" Then 'si "SITE" n'est pas rempli
Me.ListBox2.Visible = False
MsgBox ("Please fill out the Site ")
Exit Sub
Else 'si la ligne est pleine avec site et material type, on affiche la ListBox
With Me.ListBox2
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption
.Height = 350
.Width = 300
.Top = ActiveCell.Top
.Left = ActiveCell.Offset(0, 1).Left
.Visible = True
End With
On Error Resume Next
i = Application.WorksheetFunction.Match(site, Worksheets("DP").Range("DP"), 0) - 1 'numéro de colonne ou se trouve la liste concernée dans "DP" - "DP" étant le nom donné à la ligne n1 de l'onglet DP
'-1 car dans Excel on commence à compter les colonnes à 1 mais dans VBA on commence en 0
If Worksheets("DP").Range("A1").Offset(0, i).End(xlDown).Row = 2 Then
Me.ListBox2.List = Array(Worksheets("DP").Range(Worksheets("DP").Range("A1").Offset(1, i), Worksheets("DP").Range("A1").Offset(0, i).End(xlDown)).Value, "")
Else
Me.ListBox2.List = Worksheets("DP").Range(Worksheets("DP").Range("A1").Offset(1, i), Worksheets("DP").Range("A1").Offset(0, i).End(xlDown)).Value 'on attribue la bonne list à la list box
End If
On Error GoTo 0
t = VBA.Split(ActiveCell, ";") 'va récupérer ce qui est dékà coché, pour que si on reclique sur la cellule, on ait dékà les obkets selectionnés précochés
If UBound(t) >= 0 Then 'valeur la plus grande
For k = 0 To Me.ListBox2.ListCount - 1
If Not IsError(Application.Match(Me.ListBox2.List(k), t, 0)) Then
b2 = True
Me.ListBox2.Selected(k) = True
b2 = False
End If
Next
End If
End If
Else
If Me.ListBox1.Visible = True Then Me.ListBox1.Visible = False
If Me.ListBox2.Visible = True Then Me.ListBox2.Visible = False
End If
End SubMerci d'avance pour votre aide,
Bonjour,
Fournir le fichier KIVABIEN avec.
A+
T
Hello,
Toutes les données sont confidentielles, je ne pourrais pas partager le fichier. Je peux juste expliquer le fonctionnement. Juste pour le contexte la macro marche sur un autre fichier. Le code est le même mais là il me met une erreur. L'objectif de la macro est de créer une liste dans laquelle le client va pouvoir tické plusieurs item de la liste. Les éléments tickés vont dans une cellule.