Excel 2010 - VBA - userform pour mettre à jour cellule

Bonjour,

J'ai un userform que j'utilise pour entrer de nouvelles donnees dans une feuille de calcul. Ca marche parfaitement (ca trouve la prochaine ligne vide et insere les info du userform dans la worksheet. Il me permet aussi de visualizer les donnees deja presents dans la feuille...

J'ai cree un autre bouton "save" sur le userform pour mettre a jour (inserer si cellule est vide ou overwrite ce qui est deja dans la cellule) la feuille. Mais quand je clique sur ce bouton après une quelconque mise a jour d'un des champs, le tableau flashe mais rien ne se passe et le userform remplace automatiquement la nouvelle donnee par la precedente avant modif.....

qu'est-ce qui est faux dans mon code.....?

Private Sub SAVECMD_Click()
Dim IROW As Long
Dim Irow1 As Long
Dim WSH As Worksheet
Dim WSH1 As Worksheet
Set WSH = ThisWorkbook.Worksheets("RECAP")
Set WSH1 = ThisWorkbook.Worksheets("PRICING FINAL")

IROW = WSH.Cells.Find(Me.REF.Value, LookIn:=xlValues, searchorder:=xlRows, searchdirection:=xlPrevious).row
Irow1 = WSH1.Cells.Find(Me.REF.Value, LookIn:=xlValues, searchorder:=xlRows, searchdirection:=xlPrevious).row

'COPY THE DATA TO worksheet

With ThisWorkbook.Worksheets("RECAP")
.Cells(IROW, "A").Value = Me.MONTH.Value
.Cells(IROW, "D").Value = Me.OIC.Value
.Cells(IROW, "E").Value = Me.VSL.Value
.Cells(IROW, "F").Value = Me.GRADE.Value
.Cells(IROW, "G").Value = Me.LP.Value
.Cells(IROW, "I").Value = Me.CT_QTY.Value
.Cells(IROW, "J").Value = Me.TOLERANCE.Value
.Cells(IROW, "L").Value = Me.SUPPLIER.Value
.Cells(IROW, "M").Value = Me.TERM_P.Value
.Cells(IROW, "N").Value = Me.CT_DATES_TERM.Value
.Cells(IROW, "O").Value = Me.CT_DATES.Value
.Cells(IROW, "R").Value = Me.LP_INSP.Value
.Cells(IROW, "S").Value = Me.LP_INSP_SHARING.Value
.Cells(IROW, "U").Value = Me.LP_AGT.Value
.Cells(IROW, "V").Value = Me.LP_AGT_CATEGORY.Value
.Cells(IROW, "W").Value = Me.RCVRS.Value
.Cells(IROW, "X").Value = Me.TERMS_S.Value
.Cells(IROW, "Y").Value = Me.DP.Value
.Cells(IROW, "Z").Value = Me.REQ_MIN_QTY.Value
.Cells(IROW, "AA").Value = Me.REQ_MAX_QTY.Value
.Cells(IROW, "AD").Value = Me.DP_INSP.Value
.Cells(IROW, "AE").Value = Me.DP_INSP_SHARING.Value
.Cells(IROW, "AG").Value = Me.DP_AGT.Value
.Cells(IROW, "AH").Value = Me.DP_AGT_CATEGORY.Value
.Cells(IROW, "AI").Value = Me.BL_DATE.Value
.Cells(IROW, "AJ").Value = Me.COD_DATE.Value
.Cells(IROW, "AK").Value = Me.BL_GROSS_QTY_MTS.Value
.Cells(IROW, "AL").Value = Me.BL_GROSS_QTY_BBLS.Value
.Cells(IROW, "AM").Value = Me.BL_NET_QTY_BBLS.Value
.Cells(IROW, "AN").Value = Me.BL_NET_QTY_MTS.Value
.Cells(IROW, "AO").Value = Me.OT_NET_QTY_BBLS.Value
.Cells(IROW, "AP").Value = Me.OT_NET_QTY_MTS.Value
End With

With ThisWorkbook.Worksheets("PRICING FINAL")
WSH1.Cells(Irow1, "M").Value = Me.INV_QTY_P.Value
WSH1.Cells(Irow1, "O").Value = Me.PRICING_P.Value
WSH1.Cells(Irow1, "P").Value = Me.PMT_P.Value
WSH1.Cells(Irow1, "R").Value = Me.OSP_P.Value
WSH1.Cells(Irow1, "S").Value = Me.PREM_P.Value
WSH1.Cells(Irow1, "AE").Value = Me.INV_QTY_S.Value
WSH1.Cells(Irow1, "AG").Value = Me.PRICING_S.Value
WSH1.Cells(Irow1, "AH").Value = Me.PMT_S.Value
WSH1.Cells(Irow1, "AJ").Value = Me.OSP_S.Value
WSH1.Cells(Irow1, "AK").Value = Me.PREM_S.Value
WSH1.Cells(Irow1, "AW").Value = Me.MIN_FRT_QTY.Value
WSH1.Cells(Irow1, "AX").Value = Me.WS.Value
End With

End Sub

Bonjour,

Tu dois pouvoir déterminer l'origine du défaut en effectuant une exécution pas à pas.

Place un point d'arrêt sur la ligne With ThisWorkbook.Worksheets("RECAP")

puis contrôle la valeur de Me.REF, IROW et Irow1.

A+

Ok donc des le debut il me dit "invalid use of ME keyword" dans la formule "me.ref".value

IROW = WSH.Cells.Find(Me.REF.Value, LookIn:=xlValues, searchorder:=xlRows, searchdirection:=xlPrevious).row

formule qui fonctionne pourtant pour afficher les donnees de la feuille dans le formulaire...

Comment je dois referrer au formulaire....je veux dire par ex que la value de la boite "REF" du formulaire doit etre ce qu'il doit chercher dans la feuille.....

j'utilise exactement cette formule pour afficher les donnees d'une ref en question dans le formulaire....

Dans l'éditeur VBA.

Dans la marge de ton programme, tu cliques au niveau de la ligne où tu veux placer le point d'arrêt :

With ThisWorkbook.Worksheets("RECAP")

Un point va apparaitre et la ligne sera surlignée en marron.

Tu lances la procédure en appuyant sur F5,

Le programme va s'exécuter jusqu'au point d'arrêt (la ligne est alors surlignée en jaune),

En survolant les variables avec la souris, tu vas voir leur valeur.

Pour poursuivre le programme en pas à pas, tu appuies sur F8.

A+

Euh ! si tu poses une question, attends la réponse sans quoi on n'est pas prêt d'y arriver


Peux-tu joindre un exemple ?

A+

j'espere que tu peux accede au formulaire....

Attention ! La taille maximale autorisée est de 300ko

A+

oups

29example.xlsm (277.96 Ko)

Je ne parviens pas à reproduire l'erreur.

J'ai fait un grand ménage dans ton classeur pour ne garder que la partie utile (Userform avec procédure SAVECMD_Click).

Je lance la procédure, je sélectionne la référence 2016CT001, je clique sur SAVE et j'obtiens bien :

IROW = 2

Irow1 = 2

A+

je sais la meme formule marche pour "get data" ....

en fait c comme si la "commande" du formulaire n'etait pas activee..... que quand on clique dessus rien ne se passe

Apparement la ligne est bonne mais quand on modifie une info ca ne met pas a jour la ligne du tout, le tableau flashe et rien ne se passé et le formulaire reaffiche la precedente value

Rechercher des sujets similaires à "2010 vba userform mettre jour"