VBA UserForm de Recherche + Mise à Jour de base de donnée

avekash

XLDnaute Nouveau
Bonsoir Chers Amis

Je viens vers vous de nouveau pour soumettre une autre difficulté que je rencontre dans le développement de mon projet qui a assez avancé grâce à vous. De quoi s'agit-il ?

En effet je suis à un stade ou il me faut rechercher dans une feuille ("CLIENTS") du classeur qui fait office de base donnée des clients dont les factures ne sont pas réglées (Référence à la colonne N "Facture réglée?" ).
L'objectif c'est d'arriver à faire ressortir à partir d'un UserForm de recherche dans une Listview (de préférence) Les résultats concernant l'objet de la recherche qui est le Nom du Client(dans un TextBox) ou l'Interlocuteur (dans un TextBox). Les résultats devront être uniquement les factures non réglées.

Aussi, il devrait être possible en double-cliquant sur un résultat dans la listview d'ouvrir un autre UserForm (Dont je n'ai pas encore mis de code) qui permette de mettre à jour la base de donnée dans la colonne L "Règlement/Acompte" en rapport avec le client.

PS : Je fais remarquer que le fichier que je vous fais parvenir contient un UserForm (Avec une ListBox que j'utilise par contrainte de ne pas savoir manipuler la Listview) de recherche avec du code pris sur le forum que j'ai essayé d'adapter. Mais malheureusement le fonctionnement n'est pas correct (Bug).

Merci d'avance pour l'aide que vous m'avez apporté et que vous continuez de m'apporté.

A vous lire très rapidement
 

Pièces jointes

  • Brouillon recherche.xlsm
    27.7 KB · Affichages: 144

vanin

XLDnaute Occasionnel
Joigniez ce que vous avez essayé, si toutefois ça part de ma proposition.
Moi je dis que c'est le plus facile puisqu'il n'y a pour ainsi dire que la Sub UserForm_Initialize à revoir de votre coté …
Bonjour, j'ai essayé des modification dans le code au niveau de UserForm_Initialize() mais je reçois des messages d'erreur. ci jiont le fichier.
je vous explique : chaque commercial a des clients qui lui sont rattachés, il arrive que le client achète le produit à crédit lors de la vente. ainsi au cours du mois le client paye des acomptes. ce que je recherche c'est pouvoir faire la mise à jour de la facture du client lorsque celui ci paye un acompte. mais la base de données contient plusieurs factures du client.
alors lorsqu'un client paye un acompte je dois retrouver la facture de ce client correspondant au paiement dans la base de données et faire la mise à jour.
si l'on doit utiliser des combobox, il faut une première combo pour les commerciaux puis une deuxième pour les clients qui s'affiche en fonction de la sélection de la combo des commerciaux puis en fonction du client sélectionné dans la combo client, afficher toutes les factures non soldées de ce client afin de choisir la facture pour laquelle un acompte a été payé puis faire la mise à jour.
j'ai essayé de l'adapté à votre fichier mais je suis un débutant je n'y arrive pas. votre fichier est interressant pour le cas ou il y'a une seule facture à modifier par client dans la base de données. en plus lorsque vous regardez bien ma base de données, il arrive qu'il apparaisse plusieurs fois le nom d'un même client ce qui provoquera l'affichage du nom du client dans une combo plusieurs fois au lieu d'une seule fois .
j'ai pu trouvé une solution à la question d'enregistrer les informations des textbox dans une feuille. le problème que je rencontre maintenant c'est : dans la listebox, j'arrive à faire tout le traitement de la première ligne mais de la deuxième ligne à la dernière lorsque que je clique sur le bouton mettre à jour je reçois le message "l'objet indiqué s'est déconnecté de ses clients." .
exple lorsque j'entre le nom d'un client, la listbox affiche trois lignes de facture. lorsque je clique sur la première ligne et que je fais la mise à jour pas de problème tout se passe bien. mais de la deuxième ligne à la dernière lorsque j'essaie de faire la mise à jour le processus se solde par le message "l'objet indiqué s'est deconnecté de ses clients."
 

Pièces jointes

  • CLsCAsContacts adapté.xlsm
    153.9 KB · Affichages: 3

Dranreb

XLDnaute Barbatruc
Vous avez laissé spécifié à la méthode Plage du ComboBoxLiées l'objet nommé WshContacts alors qu'il me semble que l'objet Worksheet contenant le tableau à mettre à jour, s'appelle actuellement Feuil1, bien que personnellement je le renommerais WshBDD dans le projet VBA.
La Sub UserForm_Initialize va jusqu'au bout une fois cette erreur corrigée.
Renommez les contrôles de façon plus pertinente par rapport à votre application.

Pour la suite, mettez des TextBox pour tous les champs de votre tableau, puis une ListBox s'il n'y aura pas moyen de sélectionner autrement la bonne facture à mettre à jour.
Mais si ça pouvait suffire il serait possible de prévoir aussi une ComboBox pour la date …
 
Dernière édition:

vanin

XLDnaute Occasionnel
Vous avez laissé spécifié à la méthode Plage du ComboBoxLiées l'objet nommé WshContacts alors qu'il me semble que l'objet Worksheet contenant le tableau à mettre à jour, s'appelle actuellement Feuil1, bien que personnellement je le renommerais WshBDD dans le projet VBA.
La Sub UserForm_Initialize va jusqu'au bout une fois cette erreur corrigée.
Renommez les contrôles de façon plus pertinente par rapport à votre application.

Pour la suite, mettez des TextBox pour tous les champs de votre tableau, puis une ListBox s'il n'y aura pas moyen de sélectionner autrement la bonne facture à mettre à jour.
Mais si ça pouvait suffire il serait possible de prévoir aussi une ComboBox pour la date …
ok j'ai corrigé et ca marche merci. mais comme je vous l'ai expliqué, chaque client possède plusieurs factures. lorsqu'un acompte est payé je dois retrouver la facture pour laquelle l'acompte a été payé afin de faire la mise à jour. avec la modification que je viens de faire, pour chaque client sélectionné ne s'affiche qu'une seule facture. elle peut ne pas être la bonne. il faut un moyen de choisir la facture concernée parmi les factures du client. exemple avec le commercial ABY qui a pour client SOCIETE AZIZ qui dispose de plusieurs factures.
dans l'application lorsque ABY comme commercial et SOCIETE AZIZ comme client dans la deuxième combo, la textbox num facture n'affiche rien car SOCIETE AZIZ a plusieurs facture donc l'application ne sait laquelle afficher.
Aussi ne doit s'afficher pour un client que les factures non soldé (Colonne N : NON-Rappel)
 

Pièces jointes

  • CLsCAsContacts adapté.xlsm
    168.6 KB · Affichages: 3
Dernière édition:

Dranreb

XLDnaute Barbatruc
C'est pour ça que je vous disais d'ajouter une ListBox pour cela, si les factures concernées ne diffèrent pas forcément par leurs dates, ou même si vous souhaiter toujours voir l'historique pour le client sélectionné.
Il vous reste toujours à prévoir les contrôles convenablement nommés pour toutes les colonnes du tableau.
L'évènement Résultat de l'objet ComboBoxLiées sera probablement plus judicieux que le BingoUn car il fournira la liste de tous les numéros de lignes dans la base correspondant aux choix effectués.
 

vanin

XLDnaute Occasionnel
Bonjour.
Une proposition en attendant …
Bonjour et Merci infiniment pour votre aide, ca répond à ce que je recherche. trois remarques :
1- les factures réglées c'est dire les factures dont le solde est égal à zéro ou la valeur de la cellule de la colonne N (Facture réglée?) est égale à "OUI" ne doivent pas s'afficher dans la listbox. ces factures sont déjà soldées.
si le statut de la facture (colonne N (Facture réglée?)) est égale à "OUI" elle n'apparait pas dans la listbox
si le statut de la facture (colonne N (Facture réglée?)) est égale à "NON" elle apparait pas dans la listbox

2- lorsqu'on entre le montant de l'avance et qu'on clique sur le bouton "modifier", le montant de l'avance s'ajoute dans la cellule de la colonne "AVANCE". le souci c'est qu'après l'ajout de l'avance, les formules des cellules des colonnes M et N disparaissent donc les calculs dans ces cellules ne se font pas.
ex: si l'avance se loge dans la cellule L5, les formules des cellules M5 et N5 disparaissent.

3- lorsqu'on entre le montant de l'avance et qu'on clique sur le bouton "modifier", le montant de l'avance s'ajoute mais remplace l'ancienne valeur, les montants doivent plutôt se cumuler. si le montant de l'avance précédent est de 30000 et qu'on ajoute une avance de 20000 le montant doit être 50000. au lieu de 30000.

merci encore pour votre aide
 

vanin

XLDnaute Occasionnel
Bonjour, encore merci pour tout, les soucis ont été corrigés, tout marche bien mais se termine par un bug. lorsque je rentre l'avance et que je clique sur modifier, une fenêtre de bug de visual basic apparait, mais le montant de l'avance est ajouté dans la base de données.
 

Pièces jointes

  • BUG1.jpg
    BUG1.jpg
    96.9 KB · Affichages: 5
  • BUG2.jpg
    BUG2.jpg
    82.6 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Bonjour.
Est-ce qu'au lieu des formules, on ne pourrait pas mettre les valeurs ?
Embêtant les formules dans ce contexte d'utilisation …
Si vous tenez à vos formules on pourrait ne pas écrire les valeur des contrôles au delà de la colonne AVANCE, mais ça impliquera qu'il n'y ait pas non plus de constante dans la dernière colonne Échéance
Quoi qu'il en soit il y avait diverses erreurs, corrigées dans cette version …
 

Pièces jointes

  • CLsCAsVanin.xlsm
    181.5 KB · Affichages: 7

vanin

XLDnaute Occasionnel
Bonjour.
Est-ce qu'au lieu des formules, on ne pourrait pas mettre les valeurs ?
Embêtant les formules dans ce contexte d'utilisation …
Si vous tenez à vos formules on pourrait ne pas écrire les valeur des contrôles au delà de la colonne AVANCE, mais ça impliquera qu'il n'y ait pas non plus de constante dans la dernière colonne Échéance
Quoi qu'il en soit il y avait diverses erreurs, corrigées dans cette version …
Bonjour ca marche vraiment merci pour tout
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87