Bonjour , à vous , je viens solliciter votre aide pour un souci dans un formulaire .
Dans le formulaire « frmretrait » je voudrais à coté du combobox « cbocodadhret » avoir un petit bouton ou une loupe sur laquelle cliquer et avoir dans un tableau , les données de la feuille « retraits ». l’idée c est de pouvoir rechercher et selectionner une ligne dans ce tableau , de valider et avoir toutes les infos liées à un adherent qui s 'affichent dans les champs « code adherent », « nom du client » , « prenom du membre », « nom collectrice » , « numero de compte » du formulaire « frmretrait ».
ci-dessous le fichier Gestion tontineV15.xlsm (954,1 Ko)
username : guyak89
pass : 1234
quelques images pour illustrer ce que j explique :
1-
2-
3-
Pour le faire fonctionner j’ai du supprimer la Référence Access Library car n’ayant l’application celle-ci était manquante et m’empêchait de faire fonctionner les différents traitements
Il faudra que tu la remettes
Je t’ai créé un formulaire « choixadhérent » qui s’ouvre avec le bouton installer pour ce besoin « Recherche » dans le formulaire « frmretrait »
Je l’ai un peu descendu par rapport à la combobox « Code adhèrent » pour qui puisse s’implanter et s’utiliser de manière la plus harmonieuse possible
Tu peux changer sa position si tu le souhaites à ta façon
Je n’ai pas mis de loupe mais tu peux la rajouter
Le choix fait dans ce nouveau formulaire son bouton « Selectionner » alimente les différents éléments du formulaire « frmretrait »
Bonjour , j’ai fais des essais , l’idée c’est bien cela mais en executant le code il prend la ligne (n-1) au niveau de la listbox c’est a dire si je selectionne une ligne quelconque dans la listbox , il affecte les données de la ligne qui est juste en haut . Je ne sais pas trop comment fonctionne les index de la listbox mais j’ ai modifié le code comme ceci et ca marche parfaitement :
au lieu de :
Private Sub CommandButton1_Click() ligne = Me.ListBox1.ListIndex frmretrait.cbocodadhret = Sheets(« retraits »).Range(« H » & ligne) frmretrait.txtnommbret = Sheets(« retraits »).Range(« A » & ligne) frmretrait.txtprenclientret = Sheets(« retraits »).Range(« B » & ligne) frmretrait.txtnomcollecret = Sheets(« retraits »).Range(« C » & ligne) frmretrait.txtnumcpteret = Sheets(« retraits »).Range(« E » & ligne) End Sub
Private Sub CommandButton2_Click() Unload Me End Sub
Private Sub Userform_Initialize() Set Ws = Sheets(« retraits ») Me.ListBox1.List = Ws.Range(« A1:H » & Ws.Range(« A » & Rows.Count).End(xlUp).Row).Value End Sub
j’ai modifié comme suit :
Private Sub CommandButton1_Click() ligne = Me.ListBox1.ListIndex frmretrait.cbocodadhret = Sheets(« adherent »).Range(« F » & ligne + 1) frmretrait.txtnommbret = Sheets(« adherent »).Range(« A » & ligne + 1) frmretrait.txtprenclientret = Sheets(« adherent »).Range(« B » & ligne + 1) frmretrait.txtnomcollecret = Sheets(« adherent »).Range(« H » & ligne + 1) frmretrait.txtnumcpteret = Sheets(« adherent »).Range(« I » & ligne + 1) Unload Me End Sub
Private Sub CommandButton2_Click() Unload Me End Sub
Private Sub Userform_Initialize()
Set Ws = Sheets(« adherent ») Me.ListBox1.List = Ws.Range(« A1:H » & Ws.Range(« A » & Rows.Count).End(xlUp).Row).Value End Sub
Mais un point qui n’ etait pas intégré c’ est la recherche à l’interieur de ListBox1 est ce possible de rechercher au niveau des entetes pour trouver un element plus facilement au lieu de scroller .
Et aussi est qu’une barre peut separer les colonnes de listbox1
et puis enfin au niveau de Set Ws = Sheets(« adherent ») Me.ListBox1.List = Ws.Range(« A1:H » & Ws.Range(« A » & Rows.Count).End(xlUp).Row).Value End Sub
je voudrais pouvoir selectionner specifiquement les colonnes A, C, H seulement au au lieu de A:H
Bonjour , j’ai fais des essais , l’idée c’est bien cela mais en exécutant le code il prend la ligne (n-1) au niveau de la listbox c’est a dire si je sélectionne une ligne quelconque dans la listbox , il affecte les données de la ligne qui est juste en haut . Je ne sais pas trop comment fonctionne les index de la listbox mais j’ ai modifié le code comme ceci et ca marche parfaitement :
au lieu de :
Private Sub CommandButton1_Click() ligne = Me.ListBox1.ListIndex frmretrait.cbocodadhret = Sheets(« retraits »).Range(« H » & ligne) frmretrait.txtnommbret = Sheets(« retraits »).Range(« A » & ligne) frmretrait.txtprenclientret = Sheets(« retraits »).Range(« B » & ligne) frmretrait.txtnomcollecret = Sheets(« retraits »).Range(« C » & ligne) frmretrait.txtnumcpteret = Sheets(« retraits »).Range(« E » & ligne) End Sub
Private Sub CommandButton2_Click() Unload Me End Sub
Private Sub Userform_Initialize() Set Ws = Sheets(« retraits ») Me.ListBox1.List = Ws.Range(« A1:H » & Ws.Range(« A » & Rows.Count).End(xlUp).Row).Value End Sub
j’ai modifié comme suit :
Private Sub CommandButton1_Click() ligne = Me.ListBox1.ListIndex frmretrait.cbocodadhret = Sheets(« adherent »).Range(« F » & ligne + 1) frmretrait.txtnommbret = Sheets(« adherent »).Range(« A » & ligne + 1) frmretrait.txtprenclientret = Sheets(« adherent »).Range(« B » & ligne + 1) frmretrait.txtnomcollecret = Sheets(« adherent »).Range(« H » & ligne + 1) frmretrait.txtnumcpteret = Sheets(« adherent »).Range(« I » & ligne + 1) Unload Me End Sub
Private Sub CommandButton2_Click() Unload Me End Sub
Private Sub Userform_Initialize()
Set Ws = Sheets(« adherent ») Me.ListBox1.List = Ws.Range(« A1:H » & Ws.Range(« A » & Rows.Count).End(xlUp).Row).Value End Sub
Mais un point qui n’ etait pas intégré c’ est la recherche à l’interieur de ListBox1 est ce possible de rechercher au niveau des entetes pour trouver un element plus facilement au lieu de scroller .
Et aussi est qu’une barre peut separer les colonnes de listbox1
et puis enfin au niveau de Set Ws = Sheets(« adherent ») Me.ListBox1.List = Ws.Range(« A1:H » & Ws.Range(« A » & Rows.Count).End(xlUp).Row).Value End Sub
je voudrais pouvoir selectionner specifiquement les colonnes A, C, H seulement au au lieu de A:H
Ou effectivement malgré un test effectué je n’ai pas constaté le phénomène pour cause j’ai utilisé une sélection aux paramètres identiques à la ligne précédente et donc de constater la bonne restitution des données mais qui étaient en fait celles de la ligne au dessus
Il aurait fallu faire un test sur une sélection non clonées
J’ai modifié le userforme pour n’a voir dans la liste que 3 colonnes (A,C,H) et j’ai rajouté 3 textbox correspondant à ces 3 colonnes (un par colonne) qui permet de faire une recherche sur l’une ou l’autre ou plusieurs de celles ci
Il suffit de rentrer dans la ou les textbox le ou les données recherchées et par un bouton créé pour le besoin « Recherche » d’obtenir le ou les sélections en correspondance
Suite au choix avant ou après ce filtre le bouton « Sélectionner » agit de la même façon
Suite à un premier filtre effectué ramenant uniquement la sélection en correspondance il est possible de retrouver toutes les sélections en vidant de leur contenu les 3 textbox et de cliquer à nouveau sur le bouton « Recherche »
Pour permettre ce fonctionnement j’ai rajouté un onglet « adherent filtrés » sur lequel est relié le formulaire « choixadhérent »
Je pense que cette version correspond à tes dernières demandes
Bonjour , c’est bien ce que je voulais , merci énormément , j’ai apporté quelques modifications pour utiliser les tableaux dans la listebox(Rowsource)et c’est parfais . J’ai ensuite dupliqué cela vers certains formulaires(les formulaires qui doivent renseigner des données venant de la feuille « adherent » par exemple vont utiliser la loupe qui elle meme sera liée au formulaire « choixadhérent »), le formulaire « frmretrait » par exemple. Pour cela j’ai utilisé le meme formulaire « choixadherent » pour tous (ceux qui doivent prendre des données dans la feuille « adhérent ») en mettant des conditions pour chaque formulaire
Private Sub CommandButton1_Click() ligneselection = Me.ListBox1.ListIndex + 2 ligne = Sheets(« adherent filtrés »).Range(« G » & ligneselection) If frmretrait.lbltitre = « Retrait Client tontine » Then frmretrait.cbocodadhret = Sheets(« adherent »).Range(« F » & ligne) frmretrait.txtnommbret = Sheets(« adherent »).Range(« A » & ligne) frmretrait.txtprenclientret = Sheets(« adherent »).Range(« B » & ligne) frmretrait.txtnomcollecret = Sheets(« adherent »).Range(« H » & ligne) frmretrait.txtnumcpteret = Sheets(« adherent »).Range(« I » & ligne) End If If frmmodifadhe.lbltitre = « Modification/Suppression adhérent » Then frmmodifadhe.cbocodadh = Sheets(« adherent »).Range(« F » & ligne) frmmodifadhe.txtnom = Sheets(« adherent »).Range(« A » & ligne) frmmodifadhe.txtprenom = Sheets(« adherent »).Range(« B » & ligne) frmmodifadhe.txtnaiss = Sheets(« adherent »).Range(« C » & ligne) frmmodifadhe.cbocollectrice = Sheets(« adherent »).Range(« H » & ligne) frmmodifadhe.cbotyppiece = Sheets(« adherent »).Range(« K » & ligne) frmmodifadhe.txtnumpieceidadh = Sheets(« adherent »).Range(« L » & ligne) frmmodifadhe.cboquartier = Sheets(« adherent »).Range(« D » & ligne) frmmodifadhe.cboprofession = Sheets(« adherent »).Range(« G » & ligne) frmmodifadhe.txtnumcpteadh = Sheets(« adherent »).Range(« I » & ligne) frmmodifadhe.txtteladh = Sheets(« adherent »).Range(« J » & ligne) End If If frmrepart.lbltitre = « Repartition collecteur » Then frmrepart.cbocodadhrep = Sheets(« adherent »).Range(« F » & ligne) frmrepart.txtnomadhrep = Sheets(« adherent »).Range(« A » & ligne) frmrepart.txtprenmemrep = Sheets(« adherent »).Range(« B » & ligne) frmrepart.txtnomcollecrep = Sheets(« adherent »).Range(« H » & ligne) frmrepart.txtnumcpterep = Sheets(« adherent »).Range(« I » & ligne) End If Unload Me End Sub
Mais je me rend compte que les contions sont valides pour tous les formulaires et donc à chaque fois il fait l’affectation vers tous les formulaires à renseigner (y compris celles qui ne sont pas lancées)
En gros je voudrais ajouter une seconde condition a ceci par exemple:
Private Sub CommandButton1_Click()** ligneselection = Me.ListBox1.ListIndex + 2 ligne = Sheets(« adherent filtrés »).Range(« G » & ligneselection)
If frmretrait.lbltitre = « Retrait Client tontine » and « frmretrait » lancé Then…
j 'ai essayé
If frmretrait.lbltitre = « Retrait Client tontine » and « frmretrait ».show=true Then…
If frmretrait.lbltitre = « Retrait Client tontine » and « frmretrait ».isloaded=true Then…
Ca n’a pas marché , est qu’il ya une propriété qui peut me renvoyer l’etat d’ouverture ou non d’un formulaire ?
Ci-dessous le fichier : Gestion tontineV18.xlsm (1020,3 Ko)
Merci
Bonjour , c’est bien ce que je voulais , merci énormément , j’ai apporté quelques modifications pour utiliser les tableaux dans la listebox(Rowsource)et c’est parfais . J’ai ensuite dupliqué cela vers certains formulaires(les formulaires qui doivent renseigner des données venant de la feuille « adherent » par exemple vont utiliser la loupe qui elle même sera liée au formulaire « choixadhérent »), le formulaire « frmretrait » par exemple. Pour cela j’ai utilisé le même formulaire « choixadherent » pour tous (ceux qui doivent prendre des données dans la feuille « adhérent ») en mettant des conditions pour chaque formulaire
Private Sub CommandButton1_Click() ligneselection = Me.ListBox1.ListIndex + 2 ligne = Sheets(« adherent filtrés »).Range(« G » & ligneselection) If frmretrait.lbltitre = « Retrait Client tontine » Then frmretrait.cbocodadhret = Sheets(« adherent »).Range(« F » & ligne) frmretrait.txtnommbret = Sheets(« adherent »).Range(« A » & ligne) frmretrait.txtprenclientret = Sheets(« adherent »).Range(« B » & ligne) frmretrait.txtnomcollecret = Sheets(« adherent »).Range(« H » & ligne) frmretrait.txtnumcpteret = Sheets(« adherent »).Range(« I » & ligne) End If If frmmodifadhe.lbltitre = « Modification/Suppression adhérent » Then frmmodifadhe.cbocodadh = Sheets(« adherent »).Range(« F » & ligne) frmmodifadhe.txtnom = Sheets(« adherent »).Range(« A » & ligne) frmmodifadhe.txtprenom = Sheets(« adherent »).Range(« B » & ligne) frmmodifadhe.txtnaiss = Sheets(« adherent »).Range(« C » & ligne) frmmodifadhe.cbocollectrice = Sheets(« adherent »).Range(« H » & ligne) frmmodifadhe.cbotyppiece = Sheets(« adherent »).Range(« K » & ligne) frmmodifadhe.txtnumpieceidadh = Sheets(« adherent »).Range(« L » & ligne) frmmodifadhe.cboquartier = Sheets(« adherent »).Range(« D » & ligne) frmmodifadhe.cboprofession = Sheets(« adherent »).Range(« G » & ligne) frmmodifadhe.txtnumcpteadh = Sheets(« adherent »).Range(« I » & ligne) frmmodifadhe.txtteladh = Sheets(« adherent »).Range(« J » & ligne) End If If frmrepart.lbltitre = « Repartition collecteur » Then frmrepart.cbocodadhrep = Sheets(« adherent »).Range(« F » & ligne) frmrepart.txtnomadhrep = Sheets(« adherent »).Range(« A » & ligne) frmrepart.txtprenmemrep = Sheets(« adherent »).Range(« B » & ligne) frmrepart.txtnomcollecrep = Sheets(« adherent »).Range(« H » & ligne) frmrepart.txtnumcpterep = Sheets(« adherent »).Range(« I » & ligne) End If Unload Me End Sub
Mais je me rend compte que les contions sont valides pour tous les formulaires et donc à chaque fois il fait l’affectation vers tous les formulaires à renseigner (y compris celles qui ne sont pas lancées)
En gros je voudrais ajouter une seconde condition a ceci par exemple:
Private Sub CommandButton1_Click()** ligneselection = Me.ListBox1.ListIndex + 2 ligne = Sheets(« adherent filtrés »).Range(« G » & ligneselection)
If frmretrait.lbltitre = « Retrait Client tontine » and « frmretrait » lancé Then…
j 'ai essayé
If frmretrait.lbltitre = « Retrait Client tontine » and « frmretrait ».show=true Then…
If frmretrait.lbltitre = « Retrait Client tontine » and « frmretrait ».isloaded=true Then…
Ca n’a pas marché , est qu’il ya une propriété qui peut me renvoyer l’etat d’ouverture ou non d’un formulaire ?
Ci-dessous le fichier : Gestion tontineV18.xlsm (1020,3 Ko)
Merci
Bonjour
Ravi que cela te conviennes
Pour ton filtre sur les formulaires non ouvert
Il y avait la solution à l’ouverture de chacun par une variable qui aurait pris une valeur dans la procédure Userform_initiailize de chacun valeur à interroger pour alimenter ou non chacun d’eux
C’est une solution qu’il aurait fallu intégrer dans toutes les procédures Userform_initialize de tous les formulaires concernés avec une variable spécifique pour chacun d’eux à interroger ensuite
Mais cette solution si elle résout la détection des formulaires réellement ouverts au moment du traitement de mise à Jour de ta procédure Private Sub CommandButton1_Click() suite à leur variable dans le bon état ne résout pas celui du formulaire ouvert puis refermé car sa variable restera dans l’état d’ouverture
On pourrais changer l’état de la variable derrière un bouton de fermeture mais celle-ci peut être réalisée par sa croix en haut à droite de celui-ci
Pas fiable donc
J’ai préféré prendre la solution d’une fermeture d’office du formulaire à ouvrir vidant systématiquement de toutes donnée celui-ci
Par exemple :
Dans le module « modifadherent »
Sub modifadherent()
Unload frmmodifadhe
frmmodifadhe.Show
End Sub
En tout début je vide le formulaire :
Unload frmmodifadhe
Puis je l’ouvre :
frmmodifadhe.Show
L’ayant préalablement vidé il est vierge de toute donnée à son ouverture
Donc la procédure peut alimenter le formulaire il sera de toute façon vidé avant son ouverture
Idem pour celui-ci :
Sub formulairerepart()
Unload frmrepart
frmrepart.Show
End Sub
Je pense que c’est la meilleur solution la plus fiable
Ci-joint ton fichier avec ces 2 modules modifiés ainsi
Je te laisse répercuter cette modification sur d’autres modules en fonction de tes besoins
Je ne connais cette fonctionnalité
A voir sur internet
Mais pas facile d’avoir des éléments précis sur ce sujet
Essaies de ton côté
Si j’ai quelque chose du mien je t’en ferais part
J’espère que vous vous portez bien , je reviens demander votre aide pour un souci.
Dans un formulaire « Userform1 » je suis entrain de faire un calcul dans le textbox « txtquant » qui affiche une valeur dans le textbox « txtnvstock » . Voici la formule de calcul: txtnvstock = Val(txtancienstock - Val(Val(h + Val(txtquant)) / Val(txtcontenance)))
le problème c’est qu’à la saisie dans « txtquant » quand le resultat du calcul est decimal il arrondi à l’entier supérieur le plus proche c’est a dire au lieu d’afficher 44,56 il va afficher 45.
Prière m 'aider svp .
Ci-dessous le fichier Gestion tontineV2.0.xlsm (1,2 Mo)
le lien de la base de données au besoin
J’espère que vous vous portez bien , je reviens demander votre aide pour un souci.
Dans un formulaire « Userform1 » je suis entrain de faire un calcul dans le textbox « txtquant » qui affiche une valeur dans le textbox « txtnvstock » . Voici la formule de calcul: txtnvstock = Val(txtancienstock - Val(Val(h + Val(txtquant)) / Val(txtcontenance)))
le problème c’est qu’à la saisie dans « txtquant » quand le résultat du calcul est décimal il arrondi à l’entier supérieur le plus proche c’est a dire au lieu d’afficher 44,56 il va afficher 45.
Prière m 'aider svp .
Ci-dessous le fichier Gestion tontineV2.0.xlsm (1,2 Mo)
le lien de la base de données au besoin
Pas facile de faire fonctionner un userform dont on ne connait aucun fonctionnement ni tenant et aboutissant
Des noms pour désigner les différentes fenêtres qui le composent sont inintelligibles pour moi
J’ai malgré tout réussi a cerner la difficulté
L’égalité en l’état :
Quel est le but de ces instructions rajoutées alors que sans elles le résultat est obtenu de surcroit de manière non arrondi
Instruction Val ne sert qu’à cibler une partie numérique pour une donnée qui comporte du numérique associer à de l’alphanumérique exemple d’explication trouvé sur le sujet sur internet :
MyValue = Val(« 24 and 57 ») ’ Returns 24.
Inutile je pense dans ta procédure
Maintenant à toi de me dire
Dans le traitement concerné :
Private Sub txtquant_Change()
Dim i As Long
Dim h As Long
Dim Quant As Long
If txtquant = « » Then
btnajout.Enabled = False
Else
btnajout.Enabled = True
End If
i = 2
h = 0
Do While i < 50
If Sheets(« vente_caisse »).Range(« B » & i) = cboart Then
Quant = Sheets(« vente_caisse »).Range(« D » & i).Value
h = h + Quant
End If
i = i + 1
Loop
If obtdetail.Value = False Then
txtnvstock = Val(txtancienstock) - Val (h + Val(txtquant / txtcontenance)))
End If
If obtgros.Value = True Then
txtnvstock = Val(txtancienstock) - Val(h + Val(txtquant))
End If
If obtsemgros.Value = True Then
txtnvstock = txtancienstock - Val(Val(h + Val(txtquant)) / Val(txtcontenance))
End If
txtmontant = Val(txtpu) * Val(txtquant)
End Sub
En début j’ai du déclarer tes variables pour le faire fonctionner :
Dim i As Long
Dim h As Long
Dim Quant As Long
Sans ces déclarations le traitement ne veut rien savoir
N’as tu pas eu les même soucis à ce niveau que moi
Rebonjour , merci pour votre réponse , d habitude je suis quelqu’un qui recherche beaucoup , j ai commencé par faire le calcul sans l 'instruction « val » mais j avais des messages d erreurs , j ai cherché , j’ai réessayé plusieurs fois , toujours l 'erreur revenais c est là que mes recherches m ont conduit vers l’instruction « val » qui donnait des résultats mais pas exactement ce que je voulais . Je crois que l erreur devait être liée à une parenthèse ou autre chose .
En ce qui concerne la déclaration des variable je crois qu’il ya une option qui permet d’utiliser des variable sans toute fois les déclarer ''Outils/Options ‹ ›
J’ai réessayé votre code cela a marché , votre réponse m’aidera surement pour la suite , excusez moi vraiment pour le dérangement , c’ est souvent après des recherches infructueuses que je viens solliciter votre aide .
Rebonjour , merci pour votre réponse , d habitude je suis quelqu’un qui recherche beaucoup , j ai commencé par faire le calcul sans l 'instruction « val » mais j avais des messages d erreurs , j ai cherché , j’ai réessayé plusieurs fois , toujours l 'erreur revenais c est là que mes recherches m ont conduit vers l’instruction « val » qui donnait des résultats mais pas exactement ce que je voulais . Je crois que l erreur devait être liée à une parenthèse ou autre chose .
En ce qui concerne la déclaration des variable je crois qu’il y a une option qui permet d’utiliser des variable sans toute fois les déclarer ''Outils/Options ‹ ›
J’ai réessayé votre code cela a marché , votre réponse m’aidera surement pour la suite , excusez moi vraiment pour le dérangement , c’ est souvent après des recherches infructueuses que je viens solliciter votre aide .
Conseil de non-expert en VBA. Il est vivement conseiller de toujours déclarer ses variables correctement. Pour te le faire rappeler, il faut laisser la case Déclaration des variables obligatoires cochée.
Les avantages de la déclaration des variables sont : éviter des répétitions dans le code (par exemple, la TVA) ; ne pas ralentir l’exécution du code ; etc.