Listbox is null
Bonjour,
mes listbox ont une valeur null pourtant ils sont bien rempli.
Quand je le clique j'ai une erreur.
quelqu'un aurais une solution à mon problème svp ?
Merci pour votre aide
Dim dictProjetToProduit As Object
Dim dictProduitToProjet As Object
Dim dictDateToProjetProduit As Object
Private Sub btnFiltrer_Click()
Dim projet As String, produit As String, dateMaj As String
projet = lstProjets.Value
produit = lstProduits.Value
dateMaj = lstDates.Value
If lstDates.ListIndex <> -1 Then
dateMaj = CStr(lstDates.List(lstDates.ListIndex))
Else
MsgBox "Veuillez sélectionner une date.", vbExclamation
Exit Sub
End If
If projet <> "" And produit <> "" And dateMaj <> "" Then
Call FiltrerProjetProduitDate(projet, produit, dateMaj)
Else
MsgBox "Veuillez sélectionner un projet, un produit et une date.", vbExclamation
End If
UseformProjet.Close
End Sub
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim projet As Variant, produit As Variant, dateMaj As Variant
Set dictProjetToProduit = CreateObject("Scripting.Dictionary")
Set dictProduitToProjet = CreateObject("Scripting.Dictionary")
Set dictDateToProjetProduit = CreateObject("Scripting.Dictionary")
Set ws = ThisWorkbook.Sheets("DATA_Graphs")
' Désactiver les filtres pour lire toutes les lignes
If ws.AutoFilterMode Then ws.AutoFilterMode = False
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
For i = 2 To lastRow
If Not IsNull(ws.Cells(i, "B").Value) Then projet = Trim(ws.Cells(i, "B").Value) Else projet = ""
If Not IsNull(ws.Cells(i, "C").Value) Then produit = Trim(ws.Cells(i, "C").Value) Else produit = ""
If Not IsNull(ws.Cells(i, "E").Value) Then dateMaj = Trim(ws.Cells(i, "E").Text) Else dateMaj = ""
If projet <> "" And produit <> "" And dateMaj <> "" Then
If Not dictProjetToProduit.Exists(projet) Then
dictProjetToProduit.Add projet, CreateObject("Scripting.Dictionary")
End If
dictProjetToProduit(projet)(produit) = True
If Not dictProduitToProjet.Exists(produit) Then
dictProduitToProjet.Add produit, CreateObject("Scripting.Dictionary")
End If
dictProduitToProjet(produit)(projet) = True
If Not dictDateToProjetProduit.Exists(dateMaj) Then
dictDateToProjetProduit.Add dateMaj, CreateObject("Scripting.Dictionary")
End If
dictDateToProjetProduit(dateMaj)(projet & "|" & produit) = True
End If
Next i
' Remplir les ListBox
lstProjets.Clear
For Each projet In dictProjetToProduit.Keys
lstProjets.AddItem projet
Next
lstProduits.Clear
For Each produit In dictProduitToProjet.Keys
lstProduits.AddItem produit
Next
Dim dateList As Object
Set dateList = CreateObject("Scripting.Dictionary")
lstDates.Clear
For Each dateMaj In dictDateToProjetProduit.Keys
If Not dateList.Exists(dateMaj) Then
dateList.Add dateMaj, True
lstDates.AddItem dateMaj
End If
Next
End Sub
Private Sub lstProjets_Change()
Dim projet As String, produit As Variant, dateMaj As Variant
If Not IsNull(lstProjets.Value) Then
projet = lstProjets.Value
Else
MsgBox "aucun projet"
End If
' Produits associés
lstProduits.Clear
If dictProjetToProduit.Exists(projet) Then
For Each produit In dictProjetToProduit(projet).Keys
lstProduits.AddItem produit
Next
End If
' Dates associées
lstDates.Clear
For Each dateMaj In dictDateToProjetProduit.Keys
For Each pair In dictDateToProjetProduit(dateMaj).Keys
If Split(pair, "|")(0) = projet Then
lstDates.AddItem dateMaj
Exit For
End If
Next
Next
End Sub
Private Sub lstProduits_Change()
Dim produit As String, projet As Variant, dateMaj As Variant
If Not IsNull(lstProduits.Value) Then
produit = lstProduits.Value
Else
MsgBox "aucun produit"
End If
' Projets associés
'lstProjets.Clear
If dictProduitToProjet.Exists(produit) Then
For Each projet In dictProduitToProjet(produit).Keys
lstProjets.AddItem projet
Next
End If
' Dates associées
lstDates.Clear
For Each dateMaj In dictDateToProjetProduit.Keys
For Each pair In dictDateToProjetProduit(dateMaj).Keys
If Split(pair, "|")(1) = produit Then
lstDates.AddItem dateMaj
Exit For
End If
Next
Next
End Sub
Private Sub lstDates_Change()
Dim dateMaj As String, pair As Variant
dateMaj = lstDates.Value
lstProjets.Clear
lstProduits.Clear
If dictDateToProjetProduit.Exists(dateMaj) Then
For Each pair In dictDateToProjetProduit(dateMaj).Keys
lstProjets.AddItem Split(pair, "|")(0)
lstProduits.AddItem Split(pair, "|")(1)
Next
End If
End SubBonkour,
Quand je le clique j'ai une erreur. A quel niveau?
Le code seul, ne nous aide pas beaucoup tant que nous n'avons pas de fichier pour tester, alors déposez le fichier (sans données confidentielles) et vous aurez peut-être une réponse.
Cdlt
Bonjour, voici le fichier, le bouton s'appel Filtre par projet tu le retrouve dans l'onglet complément
Bonjour, j'ai rajouter l'onglet jour férié
Et si vous expliquiez comment on s'en sert, qu'est-ce qui bloque? On ne peut pas tout deviner, alors faites un petit effort et mettez-vous à la place de quelqu'un qui n'a aucune connaissance de votre projet
Re-bonjour,
Merci encore pour ta disponibilité, c’est vraiment très gentil de ta part.
J’ai créé un formulaire qui permet de filtrer les données présentes dans l’onglet DATA_Graphs.
Pour y accéder, il faut aller dans l’onglet Compléments, puis cliquer sur Filtre par projet pour afficher le formulaire
Fonctionnement du filtre :
Les filtres que je sélectionne permettent de suivre l’évolution de chaque produit sur les graphiques.
Le formulaire s’appelle UseFormProjet.
Problème rencontré :
Lorsque je clique sur la liste déroulante pour sélectionner un élément, j’obtiens l’erreur suivante :
Erreur : null
J’ai essayé d’ajouter une condition pour contourner le problème, mais l’erreur persiste.
Pour y accéder, il faut aller dans l’onglet Compléments, il n'y a pas l'onglet "Compléments"
ha mince c'est un élément externe qu'on a rajouter , sorry j'aurais du y penser.
j'ai rajouter un bouton dans l'onglet Data_Graphs
Merci beaucoup pour ton aide @Arturo83
