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 SubLe 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
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
Doet 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 SubA ce niveau la :
firstAddress = c.firstAddressMerci 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 Subl'erreur se situe à ce niveau
firstAddress = c.firstAddressMerci 1000 fois de ton aide
Bonjour aptagud,
C'est normal, la propriété firstAdrress n'existe pas.
Remplace par :
firstAddress = c.AddressMerci 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 SubRe,
Il y a plusieurs solutions à ton problème. En voici une. Rajoute la ligne :
Sheets("Impaye").ActivateComme 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