Bonsoir,
j'ai un problème qui dépasse mes compétences actuelles : je suis confronté à un plantage qui n'est pas systématique, le programme pouvant fonctionner pendant plusieurs heures avant de planter, ou planter immédiatement, ou marcher quelques minutes puis planter, ou planter pendant plusieurs redémarrages avant de remarcher, ... La plupart du temps, le plantage fait également planter Excel qu'il faut alors que je ferme avec le gestionnaire des tâches.
J'ai fait plusieurs recherches sur cette erreur sans trouver de réponses transposables à mon cas (ou peut être sans les comprendre). Désolé si ce sujet a déjà été traité et merci d'avance de me réorienter si tel est le cas.
Une feuille de mon fichier Excel est connectée à une base de données Access et l'affiche sous forme de tableau. Je trie le tableau par ordre alphabétique selon la colonne souhaitée, puis j'affiche cette colonne dans une ListBox contenue dans un formulaire. Cette ListBox est configurée pour autoriser la MultiSelection : 1-fmMultiSelectMulti. Mon formulaire contient également une TextBox permettant de filtrer les noms affichés dans la ListBox en fonction des caractères indiqués dans la TextBox.
Pas de soucis pour l'affichage du formulaire, pour remplir la ListBox, pour l'utilisation de la TextBox. Tout s'affiche correctement, systématiquement. En revanche, lorsque je clique sur un Item de la ListBox, il peut arriver que le programme plante avec le message d'erreur suivant : Erreur execution '-2147417848 (800101108)': Erreur Automation-L'objet invoqué s'est déconnecté de ses clients. et que tout plante. J'ai remarqué qu'en rentrant du texte dans la TextBox avant de cliquer sur un Item de la ListBox, l'erreur n'a pas lieu, cependant un Item de la ListBox sur lequel je n'ai pas cliqué se sélectionne quand je clique sur un autre Item.
Le code d'initialisation du formulaire :
Le code de tri du tableau connecté à la base de données Access :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub UserForm_initialize() Application.ScreenUpdating = False ListBoxAvecMesItems.Clear Tri 'Tri le tableau contenant les Items à afficher dans la ListBox RemplissageListBox 'Affiche les Items dans la ListBox End Sub
Le code de remplissage de la ListBox :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Public Sub Tri() Dim tri_tblName As String tri_tblName = ActiveWorkbook.Worksheets("maFeuille").ListObjects(1).Name ActiveWorkbook.Worksheets("maFeuille").ListObjects( _ tri_tblName).Sort.SortFields.Clear ActiveWorkbook.Worksheets("maFeuille").ListObjects( _ tri_tblName).Sort.SortFields.Add Key:=Range( _ tri_tblName & "[[#All],[MaColonneQueJeTrie]]"), SortOn:= _ xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("maFeuille").ListObjects( _ tri_tblName).Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
Et le code pour filtrer les Items affichés dans la ListBox en fonction des caractères entrés dans la TextBox :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Private Sub RemplissageListBox() Dim i as Integer i = 2 Do While ActiveWorkbook.Worksheets("maFeuille").Cells(i, 2) <> "" ListBoxAvecMesItems.AddItem ActiveWorkbook.Worksheets("maFeuille").Cells(i, 2) i = i + 1 Loop 'Dé-sélectionne les Items éventuellement sélectionnés par défaut For i = 0 To ListBoxAvecMesItems.ListCount - 1 If ListBoxAvecMesItems.Selected(i) = True Then ListBoxAvecMesItems.Selected(i) = False End If Next i ListBoxAvecMesItems.ListIndex = -1 End Sub
Si quelqu'un a une piste, je suis plus que preneur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Private Sub TextBoxFiltre_Change() Dim i As Integer ListBoxAvecMesItems.Clear i = 2 Do While ActiveWorkbook.Worksheets("maFeuille").Cells(i, 2) <> "" If ActiveWorkbook.Worksheets("maFeuille").Cells(i, 2) Like "*" & UCase(TextBoxFiltre) & "*" Then ListBoxAvecMesItems.AddItem ActiveWorkbook.Worksheets("maFeuille").Cells(i, 2) End If i = i + 1 Loop End Sub
Cordialement.
Partager