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

52qmos-final-2.xlsm (172.44 Ko)

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 Sub

Voici 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à

56qmos-final-4.xlsm (188.88 Ko)

Pour les optionbutton, vous pouvez le faire comme ceci

If trouve.Offset(0, 2) = OptionButton1.Caption Then
OptionButton1.Value = 1
End If

Qui 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 Sub

Effectivement 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 If

Sinon 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 Sub

Sinon dans la première partie il y a deux textbox4 (?)

trouve.Offset(0, 3) = TextBox4
            trouve.Offset(0, 4) = TextBox4

Les 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

Rechercher des sujets similaires à "modifier ligne userform"