Modification ligne Excel par USERFORM

Bonsoir,

Je ne suis pas très calé en VBA aussi je "pompe" beaucoup de séquences de programme sur votre forum

J'ai pu créer l'appli jointe.

Seulement j'ai plusieurs pb en modif

1° les données chargées depuis la feuille provoquent des bugs quand elles sont à vide dans ma feuille

1° qd je valide ma modification les lignes s'ajoutent dans la feuille au lieu d'écraser les données précédentes

2° les contrôles que j'ai mis en place ne semblent pas être au bon endroit et provoque des msg au mauvais moment

Merci de votre aide

Bonjour

les données chargées depuis la feuille provoquent des bugs quand elles sont à vide dans ma feuille

Depuis quelle feuille ??. Donne un exemple afin de reproduire ce qui se passe

Crdlt

Bonjour Dan et merci de m'avoir lu et répondu!

Donc pour le cas 1, je vais dans "accueil" puis "création/modif" puis dans la liste déroulante "Modification TI040" je choisis "affaire 16" ...ou 21 ...ou 30 et là j'ai un bug --> lié je pense à "blanc" ou "vide" (mais je ne sais pas traiter)

Pour le cas 2 je fais pareil, mais je choisis "affaire 15", là je modifie un k et je valide la modification. Résultat ça me crée une nouvelle ligne au lieu de modifier celle traitée --> lié je suppose à Row (mais je ne sais pas faire)

Merci de ton aide


Dan,

J'ai regardé cela semble venir de la colonne H de ma feuille qui ne transfert pas la donnée dans le combo ??

Re,

Déso du retard.

Les feuilles sont protégées par mot de passe....

Crdlt

re

....lié je pense à "blanc" ou "vide" (mais je ne sais pas traiter)

dans la feuille CODES, colonne PRODUIT, il y a un espace après le mot RINET. Supprime simplement cet espace

Pour ce point, tu parles de K, c'est de la colonne K ou autre chose. Si je comprends, tu veux que si l'affaire ou la ref en colonne A existe on modifie l'affaire en question. En gros pas de doublons

Le code associé au bouton modification crée chaque fois une ligne nouvelle. C'est de là que vient le problème.

A te relire

Re

Pour le point 2, dans ton userform1, code Private Sub CommandButton3_Click(), remplace

D2 = .Range("A65536").End(xlUp).Row + 1   

par

D2 = .Range("A:A").Find(TextBox1, LookIn:=xlValues).Row

Par contre un truc qui serait intéressant est de ne pas pouvoir modifier, la textbox 1 si tu es en modification. Le cas contraire te renverra une erreur. A penser donc

A te relire

Bonjour,

Pour RINET, merci j'ai trouvé entre temps (de plus K n'était pas un nom de colonne mais l'abréviation de caractère : je ferai attention la prochaine fois)

Pour la modif génial Dan ça marche ! si tu savais le temps que j'ai passé sur cette seule séquence. Pour en finir avec la modif, tu as raison, je vais empêcher la modif. J'ai essayé en tentant de caser

TextBox1.Enabled = True

TextBox1.AutoTab = True

dans les séquences de modif mais ça marche pas. As-tu une idée STP ?

Pour la saisie nouvelle sans doublon, OUI c'est bien sur la colonne A qu'il faut vérifier... mais j'ai toujours pas trouvé ! J'ai passé des heures en lisant le forum... mais j'y arrive pas

Enfin, peux-tu zieuter ma séquences de contrôles STP, je l'ai placée au début et j'ai l'impression qu'elle n'est pas au bon endroit : des messages arrivent parfois après la fermeture du USERFORM

Je t'envoie par mail ma toute dernière version (oui, j'ai bossé entre temps)

Cdlt

Dan,

Pour

[surligner]"Pour en finir avec la modif, tu as raison, je vais empêcher la modif. J'ai essayé en tentant de caser

TextBox1.Enabled = True

TextBox1.AutoTab = True

dans les séquences de modif mais ça marche pas. As-tu une idée STP ?"[/surligner]

J'ai trouvé

A+

Re

Pour en finir avec la modif, tu as raison, je vais empêcher la modif. J'ai essayé en tentant de caser

TextBox1.Enabled = True

TextBox1.AutoTab = True

dans les séquences de modif mais ça marche pas. As-tu une idée STP ?

fais ceci :

Dans la Private Sub ComboBox1_Click(), - Validation modification, remplace

Me.TextBox1.Value = .Range("A" & Lig)
....
Me.TextBox3.Value = .Range("C" & Lig)

Par

Me.TextBox1.Value = .Range("A" & Lig): Me.TextBox1.Enabled = False
...
Me.TextBox3.Value = .Range("C" & Lig): Me.TextBox3.Enabled = False

Dans la Private Sub CommandButton4_Click() - Annulation Modification, remplace

Controls("TextBox1") = ""
....
Controls("TextBox3") = ""

par

Controls("TextBox1") = "": TextBox1.Enabled = True: TextBox1.SetFocus
...
Controls("TextBox3") = "": TextBox3.Enabled = True

Comme tu verras j'ai aussi bloquer la textbox3 qui contient le Nom de l'affaire

Je reviens pour la saisie sans doublons

Crdlt

Vu Dan, t'es un champion !

j'ai bien noté le False en modif et le True en annul de modif et ça marche merci ! (je ne fais le blocage que sur le Textbox1)

As-tu pu regarder le problème de doublon en création sur la textbox1 STP ?

Bien a toi

re

As-tu pu regarder le problème de doublon en création sur la textbox1 STP ?

le début de la Private Sub CommandButton1_Click() doit être celle ci

Dim Dl As Long, lg As Long
With Sheets("TI040")
    .Activate
    If TextBox1.Value = "" Then MsgBox "veuillez compléter la rubrique N° TI1040": Exit Sub

'Vérifie la présence d'un doublon dans la base

    If Me.TextBox1.Value > 0 Then
    On Error Resume Next
    lg = .Range("A2:A" & .Range("A" & .Rows.Count).End(xlUp).Row).Find(Me.TextBox1.Value, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True).Row
    If lg <> 0 Then MsgBox "Ce n° de TI040 existe déjà dans la base!", vbOKOnly + vbCritical + vbApplicationModal, "N° TI040": Me.TextBox1 = "": Exit Sub
    End If
    On Error GoTo 0
...

Pour le reste voici ce que tu dois faire :

Juste avant cette ligne --> Const entrees_entieres_permises = "0123456789" & vbCr & vbBack

Mets ceci:

Dim stpevt As Boolean

Plus bas, remplace la sub Private Sub CommandButton2_Click() par celle-ci

Private Sub CommandButton2_Click()
stpevt = True
Unload Me
stpevt = False
End Sub

Ensuite juste la ligne en dessous de Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean), ajoute ceci

If stpevt = True Then Exit Sub

A la fin des macros USERFORM, ajoute cette macro pour t'éviter de sortir via la croix de l'userform

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode <> 1 Then MsgBox "Vous ne pouvez pas fermer par cette action. Veuillez cliquer sur le bouton Quitter": Cancel = True
End Sub

Dis moi si souci

Amicalement

Rechercher des sujets similaires à "modification ligne userform"