Microsoft 365 VBA données ne remontent pas correctement dans Labels

Piment

XLDnaute Occasionnel
Bonjour à tous,
Une fois de plus, je reviens vers vous afin de m'aider à résoudre un problème de données qui ne remontent pas correctement dans mes Labels.
Je rappelle que je suis novice en VBA, aussi je vous demande toute votre indulgence.
Je bricole, je bricole...
Mon problème: dans mon USF "Visualiser Agent" j'ai mis en place 3 Frames afin de regrouper mes données: Frame Mobilier, Frame Informatique, Frame Téléphonie.
Les données sont issues du tableau se trouvant sur la feuille "Recensement".
Cet USF "Visualiser Agent" permet de visualiser tout le matériel affecté à un agent. Un autre USF("Visualiser Direction") permet lui de regrouper le matériel par direction, par Service et par Cellule, sur le même principe.
Mon problème est que lorsqu'une colonne du tableau sur la feuille "Recensement" n'est pas renseignée, il m'affiche le Label quantité et Désignation vide, ce qui est tout à fait logique. Mais ce que j'ai fait est que lorsque c'est le cas, le Label vide est rempli par les valeurs du Label qui suit, et les autres Label suivent le même mouvement. Ainsi, je n'ai pas de "trous" dans la raquette, et offrent un meilleur confort de lecture: Bureau="", Fauteuil remonte dans le Label Bureau qui est vide, Chaises remonte alors dans le Label Fauteuil....
Tout fonctionne correctement, sauf à partir de PC Fixe où là cette remontée ne se fait pas. Pareil pour Téléphonie.
Je pense que c'est lié aux Frames, mais en faîte je n'en sais rien.
Pardon pour les puristes, c'est une usine à gaz que j'ai construit, j'en ai bien conscience, mais je n'ai pas les compétences pour faire mieux.
Aussi n'hésitez pas à me faire des propositions pour simplifier tout çà. J'apprendrais encore.
Merci beaucoup pour votre aide.
 

Pièces jointes

  • Recensement Matériel V15 - Copie.xlsm
    180.4 KB · Affichages: 21
Solution
Re

ton problème vient du fait que tu as affecté Un Label (voir nom des labels) par Colonne ! Donc si la cellule de la Colonne est Vide et bien ton label sera Vide.
C'est pourquoi, je crois, que j'avais affecté les Cellules au Label (vide suivant) dans mon exemple ;
Labels Numéroté de 1 à x je crois)
Si tu as 5 cellules Pleines sur l'ensemble seuls les 5 premiers labels seront remplis.
Enfin je crois avoir fait ainsi !
voir vidéo :
Bonne continuation
Jean marie

ChTi160

XLDnaute Barbatruc
Bonsoir Claude
J'espère que tu vas bien ?
je te mets le Code que j'ai ajouté pour gérer le Click d'une Ligne dans la ListView "ListView_Rech_MatAncien" .
VB:
Private Sub ListView_Rech_MatAncien_ItemClick(ByVal Item As MSComctlLib.ListItem)
Dim LstVItem As Object
Dim Tb()
Tb = Range("t_Nouvelle_Affect").Value 'on va récupérer la base de Données dans feuille "Nouvelle Affectation"
With Me
 With .ListView_Rech_MatAncien 'Avec la ListView
 StrSearch = Item.Text 'on récupère la référence de la ligne sélectionnée
 End With
     With .ListView_Rech_MatNV 'avec la ListView
             .ListItems.Clear 'on l'éfface
    For Lgn = 1 To UBound(Tb) 'pour chaque ligne du tableau
     If Tb(Lgn, 1) = StrSearch Then 'on compare les données de la première colonne du tableau avec la variable "StrSearch"
      Set LstVItem = .ListItems.Add(, , Tb(Lgn, 1)) 'on colle la valeur dans la première colonne due la Listview
         With LstVItem 'avec cette ligne ainsi créée
             .ListSubItems.Add , , Tb(Lgn, 2) 'On colle dans la deuxième Conne
             .ListSubItems.Add , , Tb(Lgn, 3) 'Idem 3è colonne
             .ListSubItems.Add , , Tb(Lgn, 4)
             .ListSubItems.Add , , Tb(Lgn, 5)
             .ListSubItems.Add , , Tb(Lgn, 6)
             .ListSubItems.Add , , Tb(Lgn, 7)
             .ListSubItems.Add , , Tb(Lgn, 8)
             .ListSubItems.Add , , Tb(Lgn, 9)
             .ListSubItems.Add , , Tb(Lgn, 10)
             .ListSubItems.Add , , Tb(Lgn, 11)
             .ListSubItems.Add , , Tb(Lgn, 12)
             .ListSubItems.Add , , Tb(Lgn, 13)
             .ListSubItems.Add , , Tb(Lgn, 14)
             .ListSubItems.Add , , Tb(Lgn, 15)
             .ListSubItems.Add , , Tb(Lgn, 16)
             .ListSubItems.Add , , Tb(Lgn, 17)
         End With
     End If
    Next Lgn
    End With
End With
End Sub
ou en simplifiant

VB:
Private Sub ListView_Rech_MatAncien_ItemClick(ByVal Item As MSComctlLib.ListItem)
Dim LstVItem As Object
Dim Tb(), Col As Byte
Tb = Range("t_Nouvelle_Affect").Value 'on va récupérer la base de Données des
With Me
 With .ListView_Rech_MatAncien
 StrSearch = Item.Text 'on récupére la référence de la ligne sélectionner
 End With
     With .ListView_Rech_MatNV 'avec la ListView
          .ListItems.Clear 'on l'éfface
    For Lgn = 1 To UBound(Tb) 'pour chaque ligne du tableau
     If Tb(Lgn, 1) = StrSearch Then 'on compare les données de la première colonne du tableau avec la variable "StrSearch"
      Set LstVItem = .ListItems.Add(, , Tb(Lgn, 1)) 'on colle la valeur dans la première colonne due la Listview
         With LstVItem 'avec cette ligne ainsi créée
             For Col = 2 To UBound(Tb, 2)'Pour chaque colonne du tableau à partir de la deuxième
                    .ListSubItems.Add , , Tb(Lgn, Col) 'On colle dans les Colonnes
             Next Col
         End With
     End If
    Next Lgn
    End With
End With
End Sub
Tu me tiens au courant!
Jean marie
 
Dernière édition:

Piment

XLDnaute Occasionnel
Re Jean-Marie,
Content de te lire.
Je me grillais les quelques neurones qui me restent à rendre opérationnelle cette foutue ListView.
Il est clair que sans toi, j'y serais jamais arrivé !
Enorme merci !!!!!!
Tout fonctionne correctement. Super !!!!
J'ai rajouté sur le bouton "Initialise" l'effacement du contenu de la ListView_Rech_MatNV.
Il y a un détail qui me gêne : lorsque je click sur la première ligne dans la 1ère ListView, il me sélectionne toute la ligne, tout va bien c'est ce que je veux, mais aussitôt après il me sélectionne que la première ligne de la cellule (Réf:), en mode active, il me semble.
Par contre à partir de la deuxième, ligne tout se passe comme il faut : sélection de toute la ligne.
Y aurait-il moyen d'empêcher ça ?
Sinon superbe boulot !!!!!!
Mille mercis Jean-Marie.
Une question : y-a-t-il moyen de dimensionner la ListView en fonction de son contenu comme pour les Frames?
Dans l'attente, bonne après-midi à toi.
 

ChTi160

XLDnaute Barbatruc
Re
Tu dis :
"lorsque je click sur la première ligne dans la 1ère ListView, il me sélectionne toute la ligne, tout va bien c'est ce que je veux, mais aussitôt après il me sélectionne que la première ligne de la cellule (Réf:), en mode active, il me semble.
Par contre à partir de la deuxième, ligne tout se passe comme il faut : sélection de toute la ligne."
Je ne comprends pas .
Peut être un problème avec la propriété "LabelEdit" de la listview .je regarde des que possible(depuis mon téléphone)
Pour la hauteur de la listview , je regarderai.
Jean marie
 

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie,
Pour compléter mon précédent post, et pour faire simple, click sur "001" dans la listView et regarde ce qui se passe dans la cellule "001".
Click ensuite sur "002" dans la listView et tu verras que toute la ligne est sélectionnée.
Il faudrait que lorsque l'on click sur "001" toute la ligne reste sélectionnée.
Je te fais part également d'un petit problème sur l'Usf "Visualiser_MatCollectif" : le Texbox "TextBUtilis" ne prend pas le contenu de la cellule. J'ai essayé de voir d'où pouvais provenir le problème, mais je sèche !
Si tu sélectionnes "Direction des Services Techniques, puis "Service Logistique", la TexBox devrait afficher le contenu de la dernière colonne de la ligne 74 du tableau "RecensementMatérielCollectif", soit :
Service Logistique
Service Conduite d'Opération.
Si tu pouvais y jeter un œil ?
Merci à toi, bonne journée.
 

ChTi160

XLDnaute Barbatruc
Re

Ce que j'ai Bidouillé.

VB:
Private Sub ListView_Rech_MatAncien_ItemClick(ByVal Item As MSComctlLib.ListItem)
Dim LstVItem As Object
Dim Tb(), Col As Byte
Tb = Range("t_Nouvelle_Affect").Value 'on va récupérer la base de Données des
With Me
 With .ListView_Rech_MatAncien
 StrSearch = Item.Text 'on récupére la référence de la ligne sélectionner
 End With
     With .ListView_Rech_MatNV 'avec la ListView
          .ListItems.Clear 'on l'éfface
    For Lgn = 1 To UBound(Tb) 'pour chaque ligne du tableau
     If Tb(Lgn, 1) = StrSearch Then 'on compare les données de la première colonne du tableau avec la variable "StrSearch"
      Set LstVItem = .ListItems.Add(, , Tb(Lgn, 1)) 'on colle la valeur dans la première colonne due la Listview
         With LstVItem 'avec cette ligne ainsi créée
         For Col = 2 To UBound(Tb, 2)
             .ListSubItems.Add , , Tb(Lgn, Col) 'On colle dans les Colonnes
         Next Col
         End With
     End If
    Next Lgn
    ' Ci dessous la mise a la hauteur de la ListView en fonction du Nombre de Lignes
        .Height = IIf(.ListItems.Count = 0, 234, IIf(.ListItems.Count = 1, 13.75 * 2, 13.2 * (.ListItems.Count + 1)))
    End With
End With
End Sub
Jean marie
 

Piment

XLDnaute Occasionnel
Re :
Tu es quelqu'un d'extraordinaire !!!! Ce que tu appelle "bidouillage" est, en réalité, un travail d'orfèvre !!!!
Cela marche au poil !!!!
Il ne reste plus qu'à régler le problème d'affichage de la TexBox "TextBUtilis" de l'Usf "Visualiser_MatCollectif".
J'ai cherché, mais je trouve pas comment faire. Je ne comprends pas pourquoi il n'affiche rien. Dans une des versions précédentes, ce TexBox fonctionnait pourtant.
Mille merci à toi.
 

Piment

XLDnaute Occasionnel
Re
Question : tu n'as un affichage dans ce TextBox "TextBUtilis" que lorsqu'il ne reste d'une Ligne de Label affichée ?
C'est ça ?
Jean marie
Bonsoir Jean-Marie.
Alors je t'explique:
Il s'agit de l'Usf "Visualiser_MatCollectif" qui récupère les données dans la feuille "RecensementMatérielCollectif".
Lorsque tu ouvre l'Usf "Visualiser_MatCollectif", tu choisis "Direction des Services Techniques", "Service Logistique", le contenu de la dernière colonne de la ligne choisie (ligne 74 du tableau, colonne K) doit remonter dans la TexBox "TextBUtilis" dans la Frame "Utilisateur". Cela me permet de voir que ce matériel est partagé avec quel service ou quelle Direction.
Dans les versions précédentes, les données remontaient, plus maintenant. J'ai essayé de trouver pourquoi, sans succès.
Merci beaucoup pour le mal que tu te donnes. Sans toi je n'y serait pas arrivé !
Bonne soirée à toi.
 

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie,
Tu vas bien ?
En plus de ma demande de mon poste précédent, j'aurais voulu faire afficher un msgBox ("Aucun mouvement pour ce matériel") s'il n'y a aucun changement d'affectation (Usf "Visualiser_Mouvem_Mat").
J'ai beaucoup essayé sans succès. Je continu à chercher !
Merci à toi.
Bonne journée.
 

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie,
Comment vas-tu ?
Je me permets de revenir vers toi pour voir si tu as eu le temps de te pencher sur le problème de mon poste #131.
Je n'arrive toujours pas à comprendre d'où vient le problème de ce TexBox "TextBUtilis".
Si tu as un moment.
Dans l'attente, passe une bonne journée.
Claude.
 

Discussions similaires