Récupérer données avec combobox et modifier les texbox

J

JM

Guest
Bonjour le Forum,

J'ai un soucis, je suis en train de développer un petit programme et j'ai un bug qui déconnecte le client. Mon code ne doit surement pas être bon.

J'ai uncombobox qui récupère des données sur une feuille, ces données sont affichées dans des textbox ( nom, prénom etc) voilà ce que cela donne :

Private Sub ComboBox1_Click()
Dim y As Integer
y = ComboBox1.ListIndex + 2
Supclient.nom.Value = Worksheets("Clients").Cells(y, 3)
Supclient.prenom.Value = Worksheets("Clients").Cells(y, 4)
Supclient.adresse.Value = Worksheets("Clients").Cells(y, 5)
Rows(y).Select
End sub

Là pas de problème cela fonctionne. Mais par contre je voudrai pouvoir modifier ces données avant de cliquer sur un CommandButton qui validerai les changements dans les texbox voilà ce que j'ai mis :

Private Sub CommandButton2_Click()
Dim y As Integer
y = ComboBox1.ListIndex + 2

If OptionButton1.Value = True Then
ComboBox1.Value = Supclient.nom.Value
Worksheets("Clients").Cells(y, 3) = Supclient.nom.Value
Worksheets("Clients").Cells(y, 4) = Supclient.prenom.Value
Worksheets("Clients").Cells(y, 5) = Supclient.adresse.Value
End If
En sub

Et là cela ne fonctionne plus, je peux modifier le texte (alors qu'auparavant je ne pouvait pas) mais cela déconnecte et bug.

L'OptionButton1 est là parce qu'en fait j'ai deux combobox que l'on sélectionne en cliquant sur les boutons d'option (au nombre de deux aussi).

Pourriez vous m'indiquer ce qui cloche et comment peut on surmonter cela ? J'ai essayé aussi avec la méthode texbox_change mais ça n'a pas marché non plus.

En vous remerciant et long vie au forum.
 
@

@+Thierry

Guest
=> DEMO UserForm Récupérer données avec ComboBox et modifier les TexBoxs

Bonsoir JM, le Forum

Je n'aime pas vraiment ta façon de nommer ton UserForm et tes controls, mais chacun prend ses petites habitudes comme il le veut en VBA.

A priori, je ne vois pas vraiment ce qui pourrait de faire une rupture de connection avec les ActiveX, peut-être le fait d'écrire dans la ComboBox alors que sa ListIndex est en cours d'utilisation... Faudrait voir aussi comment tu initialises ta ComboBox, si c'est par la propriété "RowSource"... (non accèpté par les Macs, et, ce peut être une source d'ennuis aussi)

Sinon, comme aujourd'hui j'ai été gentillement encouragé Lien supprimé thanks leChti,
voici une démo toute chaude dans la lignée de mes démos rudiments basics pour faire ce dont tu as besoin et même un peu plus...

Bonne fin de journée
@+Thierry
 

Pièces jointes

  • USF-ComboBox-Rudiments-Basics.zip
    13.8 KB · Affichages: 125
J

JM

Guest
Bonsoir Thierry, re-bonsoir le Forum,

Ton exemple réponds tout à fait à mes attentes. Je prends par là aussi des leçons (je ne suis qu'un débutant en vba) sur la manière de condenser le code : tu écrit en deux lignes ce que j'écris en 10 ! Là j'apprends !

Par contre tu pourrais me dire ce que tu veux dire au sujet de la nomination des controles et USF (cela pourra m'aider pour l'avenir).

En te remerciant, je vais potasser cela pour le comprendre au mieux.
 
@

@+Thierry

Guest
Re: => DEMO UserForm Récupérer données avec ComboBox et modifier les TexBox

Re Bonsoir JM, le Forum

En tant que développeur, il y a des conventions classiques à respecter, par exemple :

Supclient.nom.
Supclient.prenom
Supclient.adresse

Représentent des dénominations assez dérountantes, si on doit intervenir sur un code écrit de la sorte.

Exemple de convention :

With USF1_Client
.TxbClientNom
.TxbClientPrenom
.TxbClientAdresse
End With

Ce qui a pour avantage :
1) A la lecture du code on sait immédiatement si il s'agit d'ActiveX, ou d'autres Objects, ou encore de Variables...
2) On identifie immédiatement le Type d'ActiveX (Par exemple Txb = TextBox, Cbx = ComboBox, Cbx = CheckBox, Opb = OptionButton, etc etc)
3) On peut agir en masse sur ces Controls, exemple : on ne veut vider que les TextBox "Clients" :

Dim CTRL As Control
  With USF1_Client
      For Each CTRL In .Controls
         If Left(CTRL.Name, 9) = "TxbClient" Then
            CTRL.Value = ""
         End If
      Next
   End With

Sinon, pour des applis simples et "légères" en code, on peut très bien se passer aussi de nommer les controls, si on a été logique en mode design, avec des TextBox1, TextBox2 et TextBox3 qui se suivent dans l'ordre...

Par ailleurs et selon les besoins, la numérotation des Controls offre l'avantage de pourvoir "jouer" facilement sur des boucles comme sur ma démo ci dessus :

Dim i As Integer
Dim x As Byte

i = Me.ComboBox1.ListIndex + 2

   With Sheet1
      For x = 1 To 3
       Me.Controls("Textbox" & x) = .Cells(i, x)
      Next
      End With

Enfin, voilà, ce n'est pas catastrophique, c'est juste qu'il est plus facile de programmer lorsque l'on nomme bien ses Controls...

En espérant t'avoir éclairé...

Bonne Soirée
@+Thierry
 
J

JM

Guest
Bonjour le Forum,

Je suis toujours embêté avec mon applicatioin. Je résume avec un combobox1 je rappatrie des données dans des textbox (nom, prénom etc..), jusque là pas de soucis.

J'ai deux OptionButton et un bouton valider. Lorsque je choisis de supprimer les données,( optionbutton1 = true) les données s'effacent après un click sur le bouton valider (cela permet en fait de supprimer la ligne où sont les données), là aussi pas de problème.

Par contre avec l'autre optionbutton2 lorsque je l'active cela devrait permettre de moddifer les données rapportées dans les texbox. Pour l'instant je peux écrire les données mais lorsque je valide avec le bouton valider le fichier se bloque ou se ferme. Voilà ce que je met dans le bouton valider (exemple pour un textbox):

Dim y As Integer
y = ComboBox1.ListIndex + 2

If Ajclient.OptionButton1.Value = True Then Rows(y).Delete
If Ajclient.OptionButton2.Value = True Then Worksheets("Clients").Cells(y, 2) = Ajclient.nom.Value

"Ajclient" est le USF et "nom" le textbox.

Quelqu'un pourrait-il me dépanner, sachant que pour moi le but n'est pas de recopier des lignes de codes que je ne comprends pas mais bien plutot d'essayer de comprendre et progresser en vba. Là en l'occurence je ne sais pas pourquoi cela bloque.

En vous remerciatn par avance et longue vie au Forum.
 

Discussions similaires

Statistiques des forums

Discussions
312 614
Messages
2 090 242
Membres
104 464
dernier inscrit
alzerco