Alimenter listBox avec DTPicker

Bonjour à tous

J'essai depuis 2 jours d'adapter un code que j'ai trouvé sur des tutos à mes besoins mais je n'y arrive pas? je viens donc vers vous pour un peu d'aide, svp.

Sur mon fichier exemple en PJ, il y a un tableau qui sert de base sur feuille ("Mouvts") avec l'UF j'aimerai à l'aide du DTPicker récupérer les données du tableau dans la ListBox mais seulement la date demandé.

Exemple :

si on demande le 23/05/2016, il s'affiche seulement les données de cette date.

si on demande le 24/05/2016, il s'affiche seulement les données de cette date.

ect...

Merci de votre soutien.

P.J

56test-recherche.xlsm (32.32 Ko)

Cdlt

bonsoir Pompaero et le forum

erreur de post

Bonjour grisan29

Pourquoi ça !!!!!

Comprends pas, j'ai fais comme dab ! quel est le soucis, stp ?

bonsoir pompaero

j'ai répondu a ton post en joignant un fichier mais ma réponse ne concernait pas du tout ton post que j'ai ouvert par erreur une fois modifier le fichier dont voici le post https://forum.excel-pratique.com/excel/bouton-si-cellule-rempli-t78576.html en cause de l'erreur

Ok ça me rassure !!

Pas de soucis, l'erreur est humain.

bonne continuation.

Re tout le monde

Concernant mon sujet,et après recherche de renseignements, je pense avoir créé tous les codes nécessaires pour le fonctionnement de l'UF Mais j'ai toujours un bug avec laListBox1.

Est ce que quelqu'un pourrai vérifier mes codes svp ?

Merci d'avance.

Cdlt


Oups !!

J'ai oublié de joindre le fichier.;; désolé

62test-recherche.xlsm (29.81 Ko)

Bonjour,

Quel est le problème avec la ListeBox1 à part que les dates du 24 n'ont pas le bon format à comparer aux autres dates ?

Gelinotte

Bonjour gelinotte

merci à toi de vouloir m'aider.

Ok, tout simplement !! il faut que je face attention au futur UF qui va renseigner cette BDD, alors.

je vais regarder à ça.

Sinon la ListBox bug quand on click dessus pour pouvoir remplir les objets et évidemment bug aussi avec le bouton "Modifier".

Les codes seraient bon dans l'ensemble ?

Cdlt

Bonjour,

Remplace :

Private Sub DTPicker1_Change()
Dim LastRow As Long
Dim iR As Long, k%
  LastRow = Range("A" & Rows.Count).End(xlUp).Row
  With Me.ListBox1
  .Clear
    For iR = 3 To LastRow
      If CDate(Range("A" & iR)) = Me.DTPicker1 Then
         .AddItem
         For k = 1 To 10
           .Column(k - 1, Me.ListBox1.ListCount - 1) = Ws.Cells(iR, k)
         Next
      End If
    Next iR
  End With
End Sub

Private Sub ListBox1_Click()
Dim iR As Long
  iR = Me.ListBox1.ListIndex
  Label1 = ListBox1.Column(0, iR)
  Label2 = ListBox1.Column(1, iR)
  ComboBox2 = ListBox1.Column(2, iR)
  TextBox2 = ListBox1.Column(3, iR)
  TextBox3.Value = ListBox1.Column(4, iR)
  ComboBox3.Value = ListBox1.Column(5, iR)
  TextBox5 = ListBox1.Column(6, iR)
  TextBox6 = ListBox1.Column(7, iR)
  ComboBox1 = ListBox1.Column(8, iR)
  TextBox7 = ListBox1.Column(9, iR)
End Sub

... Mais c'est tout ce que je peux te donner. Dans cette situation tu ne peux ni modifier, ni supprimer un enregistrement

En effet une fois que tu as cliqué sur ton DTPicker plus rien ne relie la ListBox à la feuille.

Tu as une BD filtrée dont tu ne sais absolument pas à quelle ligne te rattacher.

Pour pouvoir Modifier ou supprimer une de ces lignes, il faudrait stocker quelques part les N° de lignes de tes enregistrements filtrés...

Il y a différentes méthodes que je ne donnerai pas car c'est un peu "capillo-tracté"...

En fait dans cette situation Microsoft à inventé un contrôle plus pratique pour faire ça : Le Listview

Le Listview se comporte d'une manière un peu analogue au ListBox à cette différence près qu'il est plus pratique et permet grâce à une clef d'identifier un enregistrement. Qui peut être filtré, trié, masqué...

Ainsi avec un Listview une fois sélectionné une date dans ton DTPicker, tu aurais toujours tes 2 ou 3 enregistrement prévus... Avec une seule différence mais de taille : les autres enregistrement seraient toujours là mais invisible... : Grace à la Clef une fois que tu auras sélectionné une ligne tu sauras grâce à VBA à quelle ligne de ta BD on se réfère...

Je t'accorde que le fonctionneement du Listview est un petit peu plus complexe que celui- d'un ListBox... mais quand on cherche les complications... On trouve !

A+

Bonjour galopin01

Pour une fois que j'arrive à faire des codes seul, ben pas de chance !!! Lol

Merci pour tes conseils.

Dans la partie DTPicker1_Change, j'avais prévu la recherche du n° de ligne, même avec le n° de ligne ça ne peu pas marcher ?

Je suis un peu pressé de finaliser ce fichier mais vais tenter tout de même de travailler avec un LIstview, c'est une première pour moi.

Cdlt

Messi !

C'est une des solutions dont je parle mais c'est là que ça se corse... Tu récupères 2 ou 3 ou plus de lignes donc tu vas avoir autant de référence de lignes que tu vas stocker dans un Array dont les indices ne correspondent pas aux lignes et ensuite tu vas te faire une misère à supprimer une ligne donc à mémoriser ça, modifier ton ListBox, modifier tes références d'Array pour pouvoir recupérer les N° de lignes restantes, rafraichir ton ListBox pour pouvoir les modifier... Je te souhaite bien du plaisir !

A+

Bien !!

Je pars sur le Listview, alors, ça fera l'occasion de le découvrir en espèrent y arriver.

Je sais ou m'adresser en cas de besoin . Aller je me lance !!!

Bonjour

Ca y est, je suis lancé !!!! Lol

Grande découverte du Listview pour moi, c'est une première.

Je viens chercher un peu d'aide du coup. Sur le UserForm1 il y a le Listview dont je pense avoir réussi à l'alimenter avec la BDD "Mouvts".

Maintenant je cherche à créer un filtre du Listview à l'aide d'un DTPicker qui afficherai les résultats correspondante à la date du DTPicker.

J'ai commencé un code mais pas sur de moi, en plus ça ne marche pas

Cdlt

P.J

29test-recherche.xlsm (47.27 Ko)

J'ai juste survolé, pas le temps de tester maintenant.

Cette ligne ne veux rien dire (toujours FAUX)

If .ListItems.Count = Int(Me.DTPicker1) Then

A+

bonjour galopin01

notre ami pompaero est parti chez le voisin pour voir s'il y a mieux que tes réponses d'expert il est vrai qu'il démarre avec la listview

Bonjour,

Je ne suis pas jaloux : Il y a de la place pour tout le monde... S'il y en a qui veulent prendre la relève, je ne demande que ça !

Commentaire à l'usage de pompaero

L'utilisation du USF avec ListView n'est pas de tout repos !

Elle repose sur une vieille idée : L'utilisateur est un ennemi facétieux qui n'a de cesse de faire des bêtises aussi on souhaite Empêcher par tous les moyens l'utilisateur de toucher à la base de donnée.

A tout le moins cela offre au moins un avantage c'est de produire un classeur très dépouillé ou les effets de formatage, couleur, bordures, n'existe pas. Par suite la programmation est réduite au minimum...

L'utilisateur n'a accès qu'à l'interface qui est censé contrôler tous les besoins : Pas d'accès au menu, pas d'accès à VBA.

Par suite, le Listview ne dispense pas de construire le UserForm de manière traditionnelle avec tous les TextBox nécessaire à Ajouter, Modifier, la BD.

Si on peut aussi y supprimer des enregistrements, il n'est pas pour autant recommandé de changer son contenu à chaque fois qu'on fait une recherche. D'ailleurs la notion de Filtre n'y existe pas : On se contente de trier la BD dans tous les sens, (le tri est très simplifié) et on garde à la vue les enregistrements qui correspondent au critère voulu ensuite on peut parcourir les enregistrements soit par simple clic sur le lisview soit par une recherche plus élaborée...

Pour illustrer cela je donne ici une appli basée sur ce principe et qui doit encore fonctionner pas trop mal malgré les nombreux outrages que je lui ai fait subir depuis 10 ans...

Au delà de l'interface qui répondait à un cahier des charges particulier et très exigeant (A l'époque la modification du ruban n'existait pas encore sous sa forme actuelle) regarder en particulier les 4 ou 5 Userform dont le nom commence par "USF" qui gèrent à eux seul l'ensemble !

Vous pouvez ignorer le USF Calendrier et tous les autres modules qui ne concerne que le calendrier et la saisie des dates...

N'hésitez pas à tester les différentes fonctionnalités USFClient, Commandes et autres gâteries pour vous imprégner de la philosophie du truc.

Ensuite pour voir le code, dans le menu général cliquer sur Accueil ensuite [Alt] +F11

Pour revenir à notre ami pompaero vider le ListView à chaque fois que tu fait une recherche sur la date pour ne garder que les enregistrements voulus revient à la même problématique que précédemment avec ton ListBox : Tu te déconectes de ta BD pour afficher seulement une extraction. Si tu veux faire une modif ou une suppression tu es coincé ! (Et à plus forte raisons des opérations enchainées...)

Alors qu'en triant seulement sur la date et en affichant les dates que tu veux tu modifies et tu supprimes autant que tu veux par simple clic. (voir à ce sujet la BD Démo...)

A+

64gebdimportexport.xlsm (115.18 Ko)

Bonjour grisan29, galopin01

Mais.... nous sommes surveillé !!!!

oui, je suis allé chez le voisin mais pour moi il n'y a pas de concurrent, la ou je peux apprendre quelque chose et ben j'y vais , sur tout sur un nouveau outil de travail (Listview).

Merci pour les conseils,

Ca fais un peu peur tout de même tout cela , le souci est que le fichier en PJ est juste un modèle, en final je boss sur un autre fichier ou il y a déjà un USF déjà fonctionnel et je voulais tout simplement l'améliorer en y ajoutant la gestions et l'utilisation des munitions puis matériels qui va avec.

La !! j'ai le sentiment d'avoir avancé mais j'arrive à un point ou je me perd un peu dans tout cela.....

démarrer avec un ListBox, ensuite remplacé par Listview ou j'arrive plus ou moins à construire mais au final qui n'ai pas trop bien construit pour moi pour suivre. Grrrrrrrrr !! .

donc je ne sais plus quoi et comment faire

Je vais quand même regarder ton fichier qui à l'aire intéressant mais comme mon fichier est assez urgent (c'est pour le taf) je voulais faire au plus vite pour qu'il soit fonctionnel, mais bon pas grave.

Je joint mon fichier original pour voir ce que j'aimerai et voir si je suis sur la bonne voie, sur le USF_RECHERCHE principalement.

Merci pour tout.

Bonjour,

Ne t'amuse pas à recharger ton ListView avec le résultat de ta recherche affiche seulement le résultat dans la zone visible de la recherche.

Sinon tu te déconnectes de ta BD et tu ne peux plus modifier ni supprimer...

A+

Bonjour

La soirée est longue et difficile pour moi , je cherche , essais, re-essai.. Petite question : faut-il recréer des variables ou puis-je faire avec celles existante pour refaire mon code ?

Bonjour,

As-tu regardé mon dernier fichier ?

Si tu l'analyses un peu tu verras que les USF sont parfaitement autonomes.

IL y a quelques modules standard et un module de classe qui concernent exclusivement le calendrier. On ne s'en occupe pas.

Par suite on ne s'occupe que des Userform. On peut très bien ne s'occuper que du UserForm Clients il est en tout point semblable au USFCommande...

Ils sont parfaitement autonomes et n'utilisent que leur propre code et variables pour toutes les interactions.

Tu as besoin de quoi ?

Pour le initialize : Rien

Un pointeur de ligne courante pour ta BD : iR

Un pointeur de colonne : iC

Une variable pour mémoriser la dernière ligne iLR

En plus 1 variable "k" pour la clef sur la plupart des "Proc machin_Click"

et c'est à peut près tout !

Ah si... La Sub Recherche_Click est un peu chiadée et fait appel à plusieurs Array

Ici ou là, tu vas trouver encore une variable Boléenne : Y

et une temporaire: Temp...

et encore sur chaque formulaire, tu as de nombreuses interractions entre les 2 listviews Clients et Commandes.

Et pour couronner le tout les suppressions ne se font pas "dans les courants d'air" mais dans une BD archives.

Je te fais ça de mémoire... hein ! J'ai pas fait de déclaration Explicit, mais je serais prêt à parier ma chemise que si on le faisait ça passerait les doigts dans le nez... Pas de quoi casser 3 pattes à un canard !

Bon si je regarde ton code, pour moi c'est imbuvable, illisible... truffé de ligne blanches, des dim qui se baladent au milieu du code... J'ai donc pas trop épluché, mais j'ai quand même un peu le sentiment que tu te noies dans un verre d'eau ! Et tu n'as qu'une BD...

ça répond à ta question ?

Conseil : Importe le USFClient dans ton propre classeur pour pouvoir visionner le code, le piquer et l'adapter à ta propre BD. Je pense que ça te fera gagner du temps...

[Edit] C'est vrai que ce fichier modèle est un peu déroutant une fois qu'on a appuyé sur Accueil on ne vois plus rien mais une fois dans VBA tu vois tout...

Pour quitter proprement tu lances un USF (n'importe lequel) et tu reviens sur Accueil

Si tu veux voir quand même les feuilles malgré l'absence d'onglets tu tapes un Worksheets("machin").Activate dans la fenêtre d'exécution...

A+

Rechercher des sujets similaires à "alimenter listbox dtpicker"