Modifier ligne avec userform
Bonjour,
J'aimerai à partir du fichier ci joint que lorsque je vais dans l'userform 4 (Modifier QMOS), je clique sur un QMOS présent dans la liste déroulante et que toutes les informations de la ligne correspondante s'affiche dans les TextBox 1 à 20. Puis que je puisse changer les renseignements d'une Textbox et enfin quand je cliquerai sur modifier il me modifie ma ligne dans mon tableur.
C'est possible ?
Merci
Bonjour pour modifier une ligne c'est possible en utilisant la méthode find.
Private Sub CommandButton1_Click()
Dim quoi As Variant
Dim trouve As Range
quoi = ComboBox1
With Sheets("feuil1").Range("c15:c65536")
Set trouve = .Find(quoi)
If Not trouve Is Nothing Then
trouve.Select
End If
End With
End SubVoici un début de solution où il faut remplacer "trouve.select" par ce que vous voulez faire.
ici trouve.select va selectionner la case ayant la même référence que dans l'userform cependant au lieu de selectionner la case vous devez maintenant indiquer tout ce qu'excel doit faire et pour ceci vous pouvez utiliser l'offset :
trouve.offset(0,1) = ... signifie que la première case à droite de qmos (soit date pv) sera égale à ... (rempalcez les ... par vos textbox)
trouve.offset(0,2) = ... signifie que la deuxième case à droite de qmos (soit procédé) sera égale à ... (rempalcez les ... par vos textbox)
etc
Et pour afficher les informations dans les textbox la base de la macro est la même sauf qu'au lieu de " trouve.select" il faudra écrire :
textbox1 = trouve.offset(0,1) par exemple
Bonjour,
Oui je pense que je peux m'en sortir avec ceci.
Autre question en supplément j'ai ajouter un choix entre 6 optionbutton qui affiche leurs captions dans la colonne C quand j'en choisit un. Comment je fais pour appliquer la même méthode (récupération et modification) ?
Merci
euh...Ca doit être button1.caption = ... ou alors button1.text... quelque chose de se genre mais avec reserve car j'ai un peu de mal à visualiser ce que vous voulez faire
Je vous envoie mon fichier en cliquant sur le bouton "ajouter QMOS" vous verrez que j'ai le choix entre 6 possibilité de Optionbutton.
Lorsque j'en choisit un, le caption du optionbouton se met dans la colonne C.
Le but est d'avoir un retour d'informations quand je choisit dans "modification QMOS" un QMOS dans ma combobox il doit m'indiquer quel caption j'ai choisit et que je puisse modifier mon choix.
Voilà
Pour les optionbutton, vous pouvez le faire comme ceci
If trouve.Offset(0, 2) = OptionButton1.Caption Then
OptionButton1.Value = 1
End IfQui veut dire concrètement si dans la colonne C la valeur est égale au texte de l'option bouton 1 alors je l'active (.value = 1)
Je ne sais pas si il y a possibilité de desactiver automatiquement les autres en même temps mais si non, il faut copier collé l'instruction et changer optionbutton1 en optionbutton2.
Je vous remets le code en entier du combobox 1 click car j'ai rajouté un paramètre dans la fonction de recherche ( j'ai rajouté lookat:=xlwhole)
Private Sub Combobox1_Click()
Dim quoi As Variant
Dim trouve As Range
quoi = ComboBox1
With Sheets("feuil1").Range("c15:c65536")
Set trouve = .Find(quoi, lookat:=xlWhole)
If Not trouve Is Nothing Then
TextBox1 = trouve.Offset(0, -2)
TextBox2 = trouve.Offset(0, -1)
TextBox3 = trouve.Offset(0, 1)
TextBox4 = trouve.Offset(0, 3)
TextBox5 = trouve.Offset(0, 4)
TextBox6 = trouve.Offset(0, 5)
TextBox7 = trouve.Offset(0, 6)
TextBox8 = trouve.Offset(0, 7)
TextBox9 = trouve.Offset(0, 8)
TextBox10 = trouve.Offset(0, 9)
TextBox11 = trouve.Offset(0, 10)
TextBox12 = trouve.Offset(0, 11)
TextBox13 = trouve.Offset(0, 12)
TextBox14 = trouve.Offset(0, 13)
TextBox15 = trouve.Offset(0, 14)
TextBox16 = trouve.Offset(0, 15)
TextBox17 = trouve.Offset(0, 16)
TextBox18 = trouve.Offset(0, 17)
TextBox19 = trouve.Offset(0, 18)
TextBox20 = trouve.Offset(0, 19)
TextBox21 = trouve.Offset(0, 20)
TextBox22 = trouve.Offset(0, 21)
If trouve.Offset(0, 2) = OptionButton1.Caption Then
OptionButton1.Value = 1
End If
End If
End With
End SubEffectivement il trouve bien l'option bouton 1. Seulement je n'arrive pas a formuler si il ne trouve pas l'option bouton 1, il doit chercher le 2. Et s'il ne trouve pas le 2 il doit chercher le 3 ext.
Peut-être essayer comme ceci, après c'est à améliorer mais en solution immédiate ça fonctionne
If trouve.Offset(0, 2) = OptionButton1.Caption Then
OptionButton1.Value = 1
optionbutton2.value = 0
optionbutton3.value = 0
etc...
End If
If trouve.Offset(0, 2) = OptionButton2.Caption Then
OptionButton2.Value = 1
optionbutton1.value = 0
etc
End IfSinon si vraiment cela ne fonctionne pas, vu que vous connaissez les combobox vous en plantez une à la place des radiobutton
Bonsoir,
Du coup j'ai réussi à faire ce code-ci qui me permet donc de récupérer les informations :
Private Sub Combobox1_Click()
Dim quoi As Variant
Dim trouve As Range
quoi = ComboBox1
With Sheets("feuil1").Range("c15:c65536")
Set trouve = .Find(quoi, lookat:=xlWhole)
If Not trouve Is Nothing Then
TextBox1 = trouve.Offset(0, -2)
TextBox2 = trouve.Offset(0, -1)
TextBox3 = trouve.Offset(0, 1)
TextBox4 = trouve.Offset(0, 3)
TextBox5 = trouve.Offset(0, 4)
TextBox6 = trouve.Offset(0, 5)
TextBox7 = trouve.Offset(0, 6)
TextBox8 = trouve.Offset(0, 7)
TextBox9 = trouve.Offset(0, 8)
TextBox10 = trouve.Offset(0, 9)
TextBox11 = trouve.Offset(0, 10)
TextBox12 = trouve.Offset(0, 11)
TextBox13 = trouve.Offset(0, 12)
TextBox14 = trouve.Offset(0, 13)
TextBox15 = trouve.Offset(0, 14)
TextBox16 = trouve.Offset(0, 15)
TextBox17 = trouve.Offset(0, 16)
TextBox18 = trouve.Offset(0, 17)
TextBox19 = trouve.Offset(0, 18)
TextBox20 = trouve.Offset(0, 19)
TextBox21 = trouve.Offset(0, 20)
TextBox22 = trouve.Offset(0, 21)
If trouve.Offset(0, 2) = OptionButton1.Caption Then
OptionButton1.Value = 1
ElseIf trouve.Offset(0, 2) = OptionButton2.Caption Then
OptionButton2.Value = 1
ElseIf trouve.Offset(0, 2) = OptionButton3.Caption Then
OptionButton3.Value = 1
ElseIf trouve.Offset(0, 2) = OptionButton4.Caption Then
OptionButton4.Value = 1
ElseIf trouve.Offset(0, 2) = OptionButton5.Caption Then
OptionButton5.Value = 1
ElseIf trouve.Offset(0, 2) = OptionButton6.Caption Then
OptionButton6.Value = 1
End If
End If
End With
End Sub
Le problème et que j'ai refait ce code à l'envers pour faire une modification d'optionbutton mais ça ne marche pas... et je ne vois pas pourquoi ... si vous avez une idée ?
Private Sub CommandButton1_Click()
Dim quoi As Variant
Dim trouve As Range
quoi = ComboBox1
With Sheets("feuil1").Range("c15:c65536")
Set trouve = .Find(quoi)
If Not trouve Is Nothing Then
trouve.Offset(0, -2) = TextBox1
trouve.Offset(0, -1) = TextBox2
trouve.Offset(0, 1) = TextBox3
trouve.Offset(0, 3) = TextBox4
trouve.Offset(0, 4) = TextBox4
trouve.Offset(0, 5) = TextBox6
trouve.Offset(0, 6) = TextBox7
trouve.Offset(0, 7) = TextBox8
trouve.Offset(0, 8) = TextBox9
trouve.Offset(0, 9) = TextBox10
trouve.Offset(0, 10) = TextBox11
trouve.Offset(0, 11) = TextBox12
trouve.Offset(0, 12) = TextBox13
trouve.Offset(0, 13) = TextBox14
trouve.Offset(0, 14) = TextBox15
trouve.Offset(0, 15) = TextBox16
trouve.Offset(0, 16) = TextBox17
trouve.Offset(0, 17) = TextBox18
trouve.Offset(0, 18) = TextBox19
trouve.Offset(0, 19) = TextBox20
trouve.Offset(0, 20) = TextBox21
trouve.Offset(0, 21) = TextBox22
If OptionButton1.Value = 1 Then
trouve.Offset(0, 2) = OptionButton1.Caption
ElseIf OptionButton2.Value = 1 Then
trouve.Offset(0, 2) = OptionButton2.Caption
ElseIf OptionButton3.Value = 1 Then
trouve.Offset(0, 2) = OptionButton3.Caption
ElseIf OptionButton4.Value = 1 Then
trouve.Offset(0, 2) = OptionButton4.Caption
ElseIf OptionButton5.Value = 1 Then
trouve.Offset(0, 2) = OptionButton5.Caption
ElseIf OptionButton6.Value = 1 Then
trouve.Offset(0, 2) = OptionButton6.Caption
End If
MsgBox "Vous venez de modifier un QMOS dans la base de données"
response = MsgBox("Voulez vous modifier un autre QMOS ?", _
vbYesNo)
If response = vbYes Then
ComboBox1 = ""
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox9.Text = ""
TextBox10.Text = ""
TextBox11.Text = ""
TextBox12.Text = ""
TextBox13.Text = ""
TextBox14.Text = ""
TextBox15.Text = ""
TextBox16.Text = ""
TextBox17.Text = ""
TextBox18.Text = ""
TextBox19.Text = ""
TextBox20.Text = ""
TextBox21.Text = ""
TextBox22.Text = ""
Else
Unload Me
End If
End If
End With
End Sub
Apparement il fallait mettre "true" à la place de 1 dans OptionButton.Value = 1. J'ai modifié et testé le code c'est fonctionnel
Private Sub CommandButton1_Click()
Dim quoi As Variant
Dim trouve As Range
quoi = ComboBox1
With Sheets("feuil1").Range("c15:c65536")
Set trouve = .Find(quoi, lookat:=xlWhole)
If Not trouve Is Nothing Then
trouve.Offset(0, -2) = TextBox1
trouve.Offset(0, -1) = TextBox2
trouve.Offset(0, 1) = TextBox3
trouve.Offset(0, 3) = TextBox4
trouve.Offset(0, 4) = TextBox4
trouve.Offset(0, 5) = TextBox6
trouve.Offset(0, 6) = TextBox7
trouve.Offset(0, 7) = TextBox8
trouve.Offset(0, 8) = TextBox9
trouve.Offset(0, 9) = TextBox10
trouve.Offset(0, 10) = TextBox11
trouve.Offset(0, 11) = TextBox12
trouve.Offset(0, 12) = TextBox13
trouve.Offset(0, 13) = TextBox14
trouve.Offset(0, 14) = TextBox15
trouve.Offset(0, 15) = TextBox16
trouve.Offset(0, 16) = TextBox17
trouve.Offset(0, 17) = TextBox18
trouve.Offset(0, 18) = TextBox19
trouve.Offset(0, 19) = TextBox20
trouve.Offset(0, 20) = TextBox21
trouve.Offset(0, 21) = TextBox22
If OptionButton1.Value = True Then
trouve.Offset(0, 2) = OptionButton1.Caption
ElseIf OptionButton2.Value = True Then
trouve.Offset(0, 2) = OptionButton2.Caption
ElseIf OptionButton3.Value= True Then
trouve.Offset(0, 2) = OptionButton3.Caption
ElseIf OptionButton4.Value = True Then
trouve.Offset(0, 2) = OptionButton4.Caption
ElseIf OptionButton5.Value = True Then
trouve.Offset(0, 2) = OptionButton5.Caption
ElseIf OptionButton6.Value = True Then
trouve.Offset(0, 2) = OptionButton6.Caption
End If
MsgBox "Vous venez de modifier un QMOS dans la base de données"
response = MsgBox("Voulez vous modifier un autre QMOS ?", vbYesNo)
If response = vbYes Then
ComboBox1 = ""
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox9.Text = ""
TextBox10.Text = ""
TextBox11.Text = ""
TextBox12.Text = ""
TextBox13.Text = ""
TextBox14.Text = ""
TextBox15.Text = ""
TextBox16.Text = ""
TextBox17.Text = ""
TextBox18.Text = ""
TextBox19.Text = ""
TextBox20.Text = ""
TextBox21.Text = trouve.Offset(0, 3) = TextBox4
trouve.Offset(0, 4) = TextBox4""
TextBox22.Text = ""
Else
Unload Me
End If
End If
End With
End SubSinon dans la première partie il y a deux textbox4 (?)
trouve.Offset(0, 3) = TextBox4
trouve.Offset(0, 4) = TextBox4Les deux TextBoxs 4 sont une erreur de ma part, merci de l'avoir vu et effectivement le True Then permet de faire marcher la macro.
Merci en tout cas d'avoir consacrer un peu de temps à ce sujet.
Cdlt
merci à vous également, bonne continuation