Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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: 22
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
Bonjour Claude
Question : à quoi et comment prévois-tu de te servir de cette Feuille "Nouvelle Affectation"
je trouve que tu as très bien travaillé !
J'ai modifié quelques trucs Lol
Il faudrait que tu optimises l'utilisation des Tableaux structurés (ListObject)
Car souvent tu commences a travaillé sur le tableau structuré exemple "ListRows.Add" et ensuite tu travailles sur la feuille
VB:
Ws.Range("A" & L).Value = CStr(Me.LblRéf)
Alors que tu peux, tu le verras travaillé sur cette Ligne que tu as ajoutée.

Code:
Private Sub CmdB_Modifier_Click()
  Dim LstR As ListRow
    If MsgBox("Etes-vous certain de vouloir Insérer ce nouvel élément?", vbYesNo, "Demande de confirmation") = vbYes Then
    
With Range("t_Nouvelle_Affect").ListObject 'avec le tableau structuré
 
 Set LstR = .ListRows.Add 'on récupére dans une variable la Ligne créee au tableau structuré

With LstR 'avec cette Ligne ajouté
       .Range(1).Value = CStr(Me.TxBRef) 'on y colle en Première cellule
       .Range(2).Value = Me.TxbCategorie 'Etc etc
       .Range(3).Value = CDbl(Me.TxbQté)
       .Range(4).Value = Me.TxBDesignation
       .Range(5).Value = CDate(Me.TxBDate_Entree)
       .Range(6).Value = Me.TxBEtat
       .Range(7).Value = Me.TxBNom
       .Range(8).Value = Me.TxBDirection
       .Range(9).Value = Me.TxBService
       .Range(10).Value = Me.TxBCellule
       .Range(11).Value = Me.TxBType_Materiel
       .Range(12).Value = CDate(Me.TxbDateNL_Affect)
       .Range(13).Value = Me.CbN_Etat
       .Range(14).Value = Me.TxBNl_Nom
       .Range(15).Value = Me.CbN_Direction
       .Range(16).Value = Me.CbN_Service
       .Range(17).Value = Me.CbN_Cellule 'on y colle en dernière cellule
 End With
End With
    End If
End Sub

le Fichier : Pour Claude

Bonne Journée
Jean marie
 
Dernière édition:

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie.
Merci beaucoup pour tes encouragements.
Pour répondre à ta question, la feuille "Nouvelle Affectation" me permettra d'avoir la traçabilité du matériel. En effet, si le matériel est affecté à un autre agent dans une autre Direction, je pourrai suivre son parcours, et retrouver sa trace.
Ta question est excellente, car c'est la suite que je dois "écrire".
Je n'ai pas encore finalisé ma réflexion sur cette étape.
Mais, je pense que j'aurais besoin de toute ton aide, si tu es d'accord pour m'accompagner.
Cela risque d'être un peu compliqué !
En gros, l'idée serait que lors de la recherche, il analyse le tableau "t_Nouvelle_Affect" et me signale que le choix effectué a fait l'objet d'une nouvelle affectation. Avec la possibilité de basculer sur la feuille "Nouvelle Affectation"
et de visualiser le matériel en question pour savoir dans quelle Direction, Service ou cellule il a été affecté et quand.
Tu penses que c'est réalisable ?
Tu vois que, là, j'aurais besoin de toute ton aide si tu le veux bien.
En tous les cas merci beaucoup pour ton aide précieuse.
Je vais regarder de plus près ta dernière proposition. Pour le moment j'ai survolé tes codes, et j'ai neutralisé la ligne:"Me.Type_Materiel.ListIndex = IIf(Me.Type_Materiel.ListCount = 2, 1, 0)" de la Sub Cellule_Change(). Sinon, lors du choix de la cellule, la ListView affiche toutes les données. En neutralisant cette ligne, la ListView n'affiche que le matériel recensé dans la cellule sélectionnée. Fais un test avec comme choix dans Type Matériel: Armoire H, puis sélectionne Direction, Service et cellule et regarde ce que donne la ListView. Refait le même test après avoir neutralisé cette ligne de code et regarde ce qui se passe dans la ListView.
Par contre, je ne sais pas les conséquences possibles en supprimant cette ligne de code.
A toi de me dire.
Dans l'attente de ton retour, Gros merci à toi.
Bonne journée.
 

ChTi160

XLDnaute Barbatruc
Bonjour Claude
Je pense que ma façon de faire vient du fait que tu as mis la recherche par Materiel hors du Frame ou se trouvent les Combobox "Direction" ,"Services" et "Cellules"
J'aurais mis ces quatre Combobox ensemble car interdépendant.
je regarde ce que je peux faire
Bonne journée
Jean marie
 

ChTi160

XLDnaute Barbatruc
Re
as-tu testé après avoir isolé

VB:
'    Me.Type_Materiel.ListIndex = IIf(Me.Type_Materiel.ListCount = 2, 1, 0)

Mettre "Armoire H" puis choisir "Administration Générale" et bien "Armoire H" n'existe pas pour ce choix, mais est affiché !
à voir donc tu as le Combobox "Type_Materiel "qui n'est pas lié, pour son remplissage, aux autres Combobox .
Si tu veux une recherche par "Type_Materiel" indépendante il faut faire autrement !
Regarde et dis-moi !
Jean marie
 

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie,
Effectivement, Armoire H n'existe pas pour ce choix, mais c'est normal puisque dans la base, il n'y a pas d'armoire H affectée dans cette Direction. Il serait intéressant peut-être de lui faire afficher à ce moment là "Aucun matériel de ce type affecté dans cette direction". Ce qui enlèverait tout doute.
Je te confirme quand supprimant la ligne
VB:
Me.Type_Materiel.ListIndex = IIf(Me.Type_Materiel.ListCount = 2, 1, 0)
, tout fonctionne correctement. La ListView affiche également le matériel affecté dans une cellule.
Je ne veux pas une recherche spécifique par 'Type Matériel'. En effet la façon dont ça fonctionne a été volontaire : je peux faire une recherche par Direction, puis par Service et par Cellule, puis resserrer le recherche par "Type de Matériel", ou encore par "Réf".
Je peux aussi vouloir faire ma recherche d'entrée par "Réf", ou par "Type Matériel".
Tout est d'une grande fluidité ! C'est parfait.
Merci pour tes conseils, j'en tiendrais, bien évidemment, compte.
Je me penche sur tes codes et je reviendrais vers toi.
Bonne journée.
Claude.
 

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie,
Comment ça va ?
Je reviens vers toi pour un m'aider à résoudre un autre problème.
Comme tu pourras le voir dans le fichier joint, j'ai rajouté une frame à mon Usf "Rech_Type_Mat".
Ce que je cherche à faire est d'afficher dans cette Frame les données issues de la feuille 'Nouvelle Affectation" après une recherche par la 'Réf:". Il faudrait qu'il affiche les données en prenant en compte la dernière date de modification. Donc, deux clés de recherche: 1°) la Réf: 2°) la dernière date de modification.
Si tu voulais bien y jeter un œil ?
J'ai tenté de modifier la Sub ListView_ _Rech_Mat_ItemClick
Merci à toi.
 

ChTi160

XLDnaute Barbatruc
Bonsoir Claude
je vais bien aujourd'hui nous avons nos deux petits enfants à la maison depuis hier soir Lol
donc pas trop le temps !
Mais Ok !
j'y regarde dès que possible
Bonne fin de Journée
Jean marie
 

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie,
J'ai réussi à faire ce que je voulais.
Je te mets le fichier en pièce jointe.
Si tu as un moment pour y jeter un œil.
Tu verras qu'après l'ouverture de l'Usf "Tech_Type_Materiel", une nouvelle Frame apparaît sur la droite en bas (couleur Orange).
Après avoir sélectionné "M-2022-001" dans la frame, cette zone est alimentée. Elle me permet de voir si le matériel sélectionné a fait l'objet d'une modification d'affectation. Remonte dans cette zone la dernière modification (donc la plus récente).
Je peux de nouveau modifier son affectation.
J'ai essayé de combiner "XLookup" avec la fonction "MAX" pour ne pas avoir à trier, mais je n'y suis pas arrivé !
Dis-moi si c'est bon, et si je ne risque pas à terme d'avoir des dysfonctionnements.
Dans l'attente, bonne journée à toi.
 

Piment

XLDnaute Occasionnel
Re:
J'ai réussi à lui faire afficher la dernière modification. J'ai juste modifié la fin d'une ligne de code:
VB:
       TxBDate_Dern_Modif = Application.XLookup(TxBRef.Value, Range("t_Nouvelle_Affect[Réf:]"), Range("t_Nouvelle_Affect[Date Nouvelle Affectation]"), ""[B][COLOR=rgb(226, 80, 65)], , -1[/COLOR][/B])
Apparemment ça marche.
Je reste dans l'attente d'un retour.
Bonne après-midi à toi.
Claude
 

ChTi160

XLDnaute Barbatruc
Bonjour Claude
J'espère que tu vas bien ?

Je n'ai pas beaucoup de temps, mais j'ai regardé et lors d'un test je me suis rendu compte (mais ça ne te dérange peut-être pas) lorsque tu choisis, "Moniteur Chinois" le 28/06/2022, tu as bien un retour dans le Frame5 "A été modifié" en date du "06/10/2022"
Comment fais-tu pour changer l'affectation de ce produit qui a déjà fait object d'un changement d'affectation ?
Quelle est la démarche que tu prévois de faire ?
Je poursuis mes tests dès que possible
Si non ça semble pas mal du tout !
Jean marie
 
Dernière édition:

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie,
Effectivement, ça a l'air pas mal !
J'ai rajouté un Texbox pour afficher la réf du matériel dans la frame "A été modifié", ainsi qu'un bouton "initialiser".
Pour répondre à ta question, si je dois de nouveau modifier l'affectation du matériel affiché, avec la touche "Tabulation" j'entre directement dans la zone "Nouvelle Affectation" (zone verte) et je modifie.
Je reste dans l'attente de ton retour pour les tests.
Bonne journée à toi.
 

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie,
J'espère que tu vas bien ?
Je me permets de revenir vers toi pour m'aider une fois de plus.
J'ai créé un nouveau Usf "Visualiser_Mouvem_Mat". J'essaye de lier les deux Listview, et je n'y arrive pas.
J'aimerais pouvoir, après un choix, en cliquant sur l'un des choix proposés par la Listview 1, lui faire afficher dans la Listview 2, les mouvements correspondant recensés dans la feuille "Nouvelle Affectation".
Exemple choix : 001, affichage de tous les mouvements de cette référence dans la Listview 2 (listview orange).
Merci à toi.
Dans l'attente, bonne journée à toi.
 

Discussions similaires

Réponses
4
Affichages
433
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…