UserForm + Bouton Enregistrer les modifications

Bonjour ou Bonsoir à tous

J'ai un probleme avec un UserForm qui me permet de rechercher les informations dans une feuille excel ou de l'enrichier avec d'autres...

Sur celui ci j'ai donc deux boutons...

le premier qui me permet d'enregistrer les nouvelles entrées sur la derniere ligne de mon tableau de sorte que les données ne soient pas écrasés... grace au code ci-dessous

Private Sub CommandButton3_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Impaye")

'Trouve la premiere ligne vide
iRow = ws.Cells(Rows.Count, 1) _
  .End(xlUp).Offset(1, 0).Row

'check for a part number
If Trim(Me.TxtCtt.Value) = "" Then
  Me.TxtCtt.SetFocus
  MsgBox "Entrer un numéro de contrat"
  Exit Sub
End If

'copy the data to the database
ws.Cells(iRow, 1).Value = Me.TxtCtt.Value
ws.Cells(iRow, 2).Value = Me.TxtCiv.Value
ws.Cells(iRow, 3).Value = Me.TxtNom.Value
ws.Cells(iRow, 4).Value = Me.TxtPrn.Value
ws.Cells(iRow, 5).Value = Me.TxtPerio.Value
ws.Cells(iRow, 6).Value = Me.TxtPaie.Value
ws.Cells(iRow, 7).Value = Me.TxtRjt.Value
ws.Cells(iRow, 8).Value = Me.TxtImp.Value
ws.Cells(iRow, 9).Value = Me.TxtTel.Value
ws.Cells(iRow, 10).Value = Me.TxtPrt.Value
ws.Cells(iRow, 11).Value = Me.TxtcPdt.Value
ws.Cells(iRow, 12).Value = Me.TxtPdt.Value
ws.Cells(iRow, 13).Value = Me.ComboApp.Value
ws.Cells(iRow, 14).Value = Me.ComboClt.Value
ws.Cells(iRow, 15).Value = Me.ComboPdt.Value
ws.Cells(iRow, 16).Value = Me.TxtCom.Value

'clear the data
Me.TxtCtt.Value = ""
Me.TxtCiv.Value = ""
Me.TxtNom.Value = ""
Me.TxtPrn.Value = ""
Me.TxtPerio.Value = ""
Me.TxtPaie.Value = ""
Me.TxtRjt.Value = ""
Me.TxtImp.Value = ""
Me.TxtTel.Value = ""
Me.TxtPrt.Value = ""
Me.TxtcPdt.Value = ""
Me.TxtPdt.Value = ""
Me.ComboApp.Value = ""
Me.ComboClt.Value = ""
Me.ComboPdt.Value = ""
Me.TxtCom.Value = ""

Unload UserForm1

End Sub

Le deuxieme qui devrait me permettre aprés avoir rechercher un élement, de modifier les informations dans mon UserForm et d'écraser les données recherché par les nouvelles c'est donc ce bouton que je n'arrive pas à faire

Est ce que quelqu'un à une idée... merci de votre aide

Bonsoir aptagud

je vous joint ce fichier a adapter selon vos besoin

je l'ai fais en pensant que le numéro de contrat est unique dans la colonne A

sinon je modifierais en fonction

j'espère que cela vous conviendra

BOB

552modifs.zip (15.30 Ko)

Bonjour Bob71Au et tout d'abord merci de ton aide

Ton code marche trés bien dans ton fichier mais dans le mien il me donne une erreure et j'auimerai comprendre pourquoi si tu peux m'expliquer...

Un moment donné tu marques pour le bouton enregistrer :

'recherche du n° de contrat dans la colonne A
    With Sheets("Impaye").Range("a1:a65500")
        Set c = .Find(UserForm1.TxtCtt, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do

et l'erreur me dit variable non définit sur le le Set c = si tu pouvais m'expliquer à quoi sa sert et pourquoi il me donne une erreure à cet endroit la ca serait sympa

Encore merci de ton aide

bonjour,

probablement une histoire d' Option Eplicit

Met un Dim c au début de

Private Sub CommandButton2_Click()
Dim c

...la suite sans changement

A+

Bonsoir galopin merci de ta réponse ca marche bien mais il me sort maintenant une autre erreur

Private Sub CommandButton2_Click()
Dim c
'ceci n'est valable que si le numero de contrat n'a pas changé
' sinon lors de la recherche precedente il faudra mettre en memoire
' quelque part le numero de contrat a rechercher et a modifier

If Trim(Me.TxtCtt.Value) = "" Then
  Me.TxtCtt.SetFocus
  Err = MsgBox("Entrer un numéro de contrat", vbOKOnly + vbQuestion, "Enregistrement refusé")
  Exit Sub
End If

'recherche du n° de contrat dans la colonne A
    With Sheets("Impaye").Range("a1:a65500")
        Set c = .Find(UserForm1.TxtCtt, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            firstAddress = c.firstAddress
            Do

 Range(firstAddress) = Me.TxtCtt.Value
 Range(firstAddress).Offset(0, 1) = UserForm1.TxtCiv.Value
 Range(firstAddress).Offset(0, 2).Value = Me.TxtNom.Value
 Range(firstAddress).Offset(0, 3).Value = Me.TxtPrn.Value
 Range(firstAddress).Offset(0, 4).Value = Me.TxtPerio.Value
 Range(firstAddress).Offset(0, 5).Value = Me.TxtPaie.Value
 Range(firstAddress).Offset(0, 6).Value = Me.TxtRjt.Value
 Range(firstAddress).Offset(0, 7).Value = Me.TxtImp.Value
 Range(firstAddress).Offset(0, 8).Value = Me.TxtTel.Value
 Range(firstAddress).Offset(0, 9).Value = Me.TxtPrt.Value
 Range(firstAddress).Offset(0, 10).Value = Me.TxtcPdt.Value
 Range(firstAddress).Offset(0, 11).Value = Me.TxtPdt.Value
 Range(firstAddress).Offset(0, 12).Value = Me.ComboApp.Value
 Range(firstAddress).Offset(0, 13).Value = Me.ComboClt.Value
 Range(firstAddress).Offset(0, 14).Value = Me.ComboPdt.Value
 Range(firstAddress).Offset(0, 15).Value = Me.TxtCom.Value
    Loop While Not c Is Nothing And c.Address <> firstAddress

  Else
  's'il ne trouve pas
    Err = MsgBox("Numéro de contrat non trouvé", vbOKOnly + vbQuestion, "Enregistrement refusé")

 End If
End With

End Sub

A ce niveau la :

   firstAddress = c.firstAddress

Merci encore de votre aide

Bonsoir aptagud

merci galopin

j'ai completement oublié de déclarer les variables

donc

Dim c,firstAddress

a vous relire

BOB

Bonjour BOB j'espere que tu as passé un bon Week End

Merci de ta réponse de vendredi j'ai éffectué les modifications que tu m'as indiqué mais il me donne encore une erreure quand je clique sur le bouton qui doit enregistrer les modifications une fenetre VB me dit

Erreur d'execution 438 / Propriété ou méthode non gérée par cet objet

et dans le code

Private Sub CommandButton2_Click()
Dim c, firstAddress
'ceci n'est valable que si le numero de contrat n'a pas changé
' sinon lors de la recherche precedente il faudra mettre en memoire
' quelque part le numero de contrat a rechercher et a modifier

If Trim(Me.TxtCtt.Value) = "" Then
  Me.TxtCtt.SetFocus
  Err = MsgBox("Entrer un numéro de contrat", vbOKOnly + vbQuestion, "Enregistrement refusé")
  Exit Sub
End If

'recherche du n° de contrat dans la colonne A
    With Sheets("Impaye").Range("a1:a65500")
        Set c = .Find(UserForm1.TxtCtt, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            firstAddress = c.firstAddress
            Do

 Range(firstAddress) = Me.TxtCtt.Value
 Range(firstAddress).Offset(0, 1) = UserForm1.TxtCiv.Value
 Range(firstAddress).Offset(0, 2).Value = Me.TxtNom.Value
 Range(firstAddress).Offset(0, 3).Value = Me.TxtPrn.Value
 Range(firstAddress).Offset(0, 4).Value = Me.TxtPerio.Value
 Range(firstAddress).Offset(0, 5).Value = Me.TxtPaie.Value
 Range(firstAddress).Offset(0, 6).Value = Me.TxtRjt.Value
 Range(firstAddress).Offset(0, 7).Value = Me.TxtImp.Value
 Range(firstAddress).Offset(0, 8).Value = Me.TxtTel.Value
 Range(firstAddress).Offset(0, 9).Value = Me.TxtPrt.Value
 Range(firstAddress).Offset(0, 10).Value = Me.TxtcPdt.Value
 Range(firstAddress).Offset(0, 11).Value = Me.TxtPdt.Value
 Range(firstAddress).Offset(0, 12).Value = Me.ComboApp.Value
 Range(firstAddress).Offset(0, 13).Value = Me.ComboClt.Value
 Range(firstAddress).Offset(0, 14).Value = Me.ComboPdt.Value
 Range(firstAddress).Offset(0, 15).Value = Me.TxtCom.Value
    Loop While Not c Is Nothing And c.Address <> firstAddress

  Else
  's'il ne trouve pas
    Err = MsgBox("Numéro de contrat non trouvé", vbOKOnly + vbQuestion, "Enregistrement refusé")

 End If
End With

End Sub

l'erreur se situe à ce niveau

 firstAddress = c.firstAddress

Merci 1000 fois de ton aide

354modifs-2.zip (33.28 Ko)

Bonjour aptagud,

C'est normal, la propriété firstAdrress n'existe pas.

Remplace par :

firstAddress = c.Address

Merci beaucoup b=vba-new pour cet info il me reste une question...

Quand je clique sur mon bouton "Enregistrer les modifications" normalement il est censé m'écrasé les données stocké dans ma feuille "Impaye"... Au lieu de me faire ça il m'enregistre les modifications sur la feuille active page de mon classeur.

Comment faire pour lui dire tu enregistre uniquement sur ma feuille "Impaye"

Private Sub CommandButton2_Click()
Dim c, firstAddress
'ceci n'est valable que si le numero de contrat n'a pas changé
'sinon lors de la recherche precedente il faudra mettre en memoire
'quelque part le numero de contrat a rechercher et a modifier

If Trim(Me.TxtCtt.Value) = "" Then
  Me.TxtCtt.SetFocus
  Err = MsgBox("Entrer un numéro de contrat", vbOKOnly + vbQuestion, "Enregistrement refusé")
  Exit Sub
End If

'recherche du n° de contrat dans la colonne A
    With Sheets("Impaye").Range("a1:a65500")
        Set c = .Find(UserForm1.TxtCtt, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do

 Range(firstAddress) = Me.TxtCtt.Value
 Range(firstAddress).Offset(0, 1) = UserForm1.TxtCiv.Value
 Range(firstAddress).Offset(0, 2).Value = Me.TxtNom.Value
 Range(firstAddress).Offset(0, 3).Value = Me.TxtPrn.Value
 Range(firstAddress).Offset(0, 4).Value = Me.TxtPerio.Value
 Range(firstAddress).Offset(0, 5).Value = Me.TxtPaie.Value
 Range(firstAddress).Offset(0, 6).Value = Me.TxtRjt.Value
 Range(firstAddress).Offset(0, 7).Value = Me.TxtImp.Value
 Range(firstAddress).Offset(0, 8).Value = Me.TxtTel.Value
 Range(firstAddress).Offset(0, 9).Value = Me.TxtPrt.Value
 Range(firstAddress).Offset(0, 10).Value = Me.TxtcPdt.Value
 Range(firstAddress).Offset(0, 11).Value = Me.TxtPdt.Value
 Range(firstAddress).Offset(0, 12).Value = Me.ComboApp.Value
 Range(firstAddress).Offset(0, 13).Value = Me.ComboClt.Value
 Range(firstAddress).Offset(0, 14).Value = Me.ComboPdt.Value
 Range(firstAddress).Offset(0, 15).Value = Me.TxtCom.Value
    Loop While Not c Is Nothing And c.Address <> firstAddress

  Else
  's'il ne trouve pas
    Err = MsgBox("Numéro de contrat non trouvé", vbOKOnly + vbQuestion, "Enregistrement refusé")

 End If
End With

End Sub

Re,

Il y a plusieurs solutions à ton problème. En voici une. Rajoute la ligne :

Sheets("Impaye").Activate

Comme cela :

.
.
.
'recherche du n° de contrat dans la colonne A
Sheets("Impaye").Activate
    With Sheets("Impaye").Range("a1:a65500")
.
.
.

Super merci beaucoup ca marche nickel

Merci encore pour ton aide

Rechercher des sujets similaires à "userform bouton enregistrer modifications"