Bouton option renvoi message sur celllule si click et TextBox renseignées
Bonjour
J'ai un USF que j'ai fait il y a quelque temps qui me renseigne trois cellules par ligne et retour a la ligne après validation avec sécurité via message box si doublon sur colonne A. feuille 1
Sur le même principe je souhaite en faire un autre usage en ajoutant deux boutons le premier Entrée , le Deuxième Sortie (voir feuille 2 sur le fichier joint) que si l'un de deux est activé renvoi soit ENT ou SOR en colonne D après validation bien entendu sur une première saisie seul Ent autorisé.
Au niveau des doublons sur colonne A ça ce complique car deux foix la même donnée sur colonne A n'est pas forcement un doublon voir ci dessous (il faut imaginer un concaténer sur cellule A et D )
colis cde Emp Ent/Sor
124 azf arm01 Ent
124 azf arm01 Sor
En espérant d'avoir été clair dans mes explications j'en suis pas convaincu
merci de votre aide
Cdlt
Bonjour,
en supposant que les boutons rajoutés sont des optionbutton
Dans Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
récupérer si entrée ou sortie
Mouv = Iif(optionbutton1 , "ENT" , "SOR")
après
If Not x Is Nothing Then
rajouter le test :
If x.Offset(0, 3) = Mouv Then 'rejet car doublon
Pour l'écriture dans la feuille, dans Private Sub CommandButton1_Click()
On sait déterminer si Entrée ou Sortie , on connait les N° de ligne et de colonne
Il n'y a plus qu'à écrire la ligne...de code
A+
bonjour et merci pour votre retour
J'ai ajouté comme indiqué les lignes de codes sans résultat forcement je suis novice en la matière et tenté un code dans optionbouton également aussi sans résultat, je joint à nouveau le fichier avec les OptionButton1 et 2 .Néanmoins J'aime comprendre les choses pour le cas présent si j'ai bien compris il faut mettre en relation la condition qui se trouve dans Private Sub TextBox1 avec Optionbutton1 donc je me pose la question un seul bouton et nécessaire ? si clické renvoi ENT si on clické renvoi SOR
Merci pour votre aide
Effectivement , puisqu'on n'a que deux valeurs à traiter on peut utiliser 1 seul optionbutton.
les modifications suivantes prennent en compte un seul optionbutton . cliqué= ENT, non cliqué = SOR
Le code modifié pour vérification des doublons
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim x As Range
If TextBox1 = "" Then 'vérifier qu'on a bien saisi quelque chose
MsgBox "saisir...."
Cancel = True
Exit Sub
End If
Mouv = IIf(OptionButton1, "ENT", "SOR") 'si cliqué ENT sinon SOR
Set x = Sheets("Feuil1").Range("A1:A1000000").Find(TextBox1, , xlValues, xlWhole, , , False) '
If Not x Is Nothing Then 's'il existe une ligne avec la valeur de textbox1
If x.Offset(0, 3) = Mouv Then 'si la cellule en colonne D = au mouvement saisi
MsgBox "La référence est déjà sasie : " & x.Address & vbLf & "Recommencez !"
TextBox1 = ""
Cancel = True
End If
End If
End Sub
Les modifs pour l'écriture dans Private Sub CommandButton1_Click() :
Juste après le Next, rajouter :
.Cells(derligne, 4) = IIf(OptionButton1, "ENT", "SOR") 'écriture
Il y a plein de tuto sur le net ( et sur ce site) pour "tout" connaitre sur le codage des UserForm....
A+
bj je suis d'accord avec vous il existe plein de tuto, mais comme un novice comme moi c'est compliqué dans cette jungle d'informations de trouver bonheur à ses recherches et apprendre sur le tas .
Sur votre dernier message vous me dites ou placer dans OptionButton1 "".Cells(derligne, 4) = IIf(OptionButton1, "ENT", "SOR") juste après le NEXT , je ne vois pas ce qui correspond à "Next"
mon code est t'il correcte sur le fichier saisie1
rivate Sub OptionButton1_Click()
Select Case OptionButton1.Value = "IIf"
Case True: Range("D:D").Value = "ENT"
Case False: Range("D:D").Value = "SOR"
End Select
End Sub
merci de votre compréhension
Sur votre dernier message vous me dites ou placer dans OptionButton1 ....
la ligne de code :
.Cells(derligne, 4) = IIf(OptionButton1, "ENT", "SOR") 'écriture
est à mettre, comme dit précédemment, dans la procédure Private Sub CommandButton1_Click()
Dans cette procédure vous trouverez du code dont une boucle For Each... Next. La ligne de code est à copier juste après le Next.
Cette boucle For Each ...écrit la saisie des textbox dans la feuille.
La ligne proposée va écrire en colonne D de la ligne en cours ENT ou SOR (suivant le cas)
Par ailleurs,
mon code est t'il correcte sur le fichier saisie1
Select Case OptionButton1.Value = "IIf"
Case True: Range("D:D").Value = "ENT"
Case False: Range("D:D").Value = "SOR"
End Select
Ce code n'est plus utile puisque l'écriture se fait par le bouton Validation.
Et, vous avez bien vu que ce code ne fonctionne pas vraiment bien. S'il pouvait fonctionner, il aurait comme conséquence d'écrire dans toute la colonne D, et donc d'écraser ce qui y aura été écrit précédemment .
Select Case évalue une variable et non un test il aurait fallu écrire:
Select Case OptionButton1.Value
Bonne suite
Bonjour
ok il faut que je trouve un code qui Teste une valeur dans un OptionButton1 et dans une boucle, un peu comme dans ce code qui ne fonctionne pas
Private Sub OptionButton1_Click()
Dim ctrl As Control
For Each ctrl In Me.Controls
If ctrl.Value = True Then
Next
.Cells(derligne, 4) = IIf(OptionButton1, "ENT", "SOR") 'écriture
End Sub
Suis je sur la bonne voie ou carrément à côté
Merci
Suis je sur la bonne voie ou carrément à côté
Ben ... heu ... à coté pour plusieurs raisons:
L'écriture dans la feuille ne doit pas se faire au moment du clic sur l'optionbutton (OptionButton1_Click), mais lors du clic sur le bouton Validation ( CommandButton1_Click) comme les autres données saisies.
Puisqu'il n'y a qu'un seul optionbutton, pas besoin de boucle !
Le test If ... Then doit se terminer par une "action" (sinon ça ne sert à rien) et éventuellement par un End If.
Dans .Cells(derligne, 4) = IIf(OptionButton1, "ENT", "SOR") la variable derligne n'est pas initialisée.
et l'utilisation .Cells(derligne, 4) (avec le point devant) n'est valable que si on trouve avant cette ligne l'instruction With Worksheets("Feuil1") (par exemple) et après cette ligne l'instruction End With
Par ailleurs, décodage de .Cells(derligne, 4) = IIf(OptionButton1, "ENT", "SOR"):
la cellule prend la valeur ENT si OptionButton est vrai, sinon la valeur SOR.
Il faut vraiment faire l'effort d'apprendre un minimum VBA, ne serait ce que par l'aide fourni dans Excel.
Bonjour désolé de mon retour tardif je suis me suis aperçu de mon erreur dans la nuit de samedi à dimanche , et oui ça me travail !
Et voila mon erreur, j'ai obstinément voulu inscrire votre code .Cells(derligne, 4) = IIf(OptionButton1, "ENT", "SOR") 'écriture dans Private Sub OptionButton1_Click() alors que vous m'aviez indiqué noir sur blanc dans Private Sub CommandButton1_Click() je suis...
Bref j'ai remis le bon code au bon endroit et ça marche mais pas comme je voudrais comme énoncé .
Ma question êtes vous prêts a continuer a m'épauler sur ce sujet ?
si oui merci, si non merci aussi pour votre patience et votre temps passé et je clôture le sujet.
merci de votre compréhension
Cordialement
Larryco
Bref j'ai remis le bon code au bon endroit et ça marche mais pas comme je voudrais comme énoncé .
je ne vois pas ce qui diffère entre la demande et le résultat du code.
Je vais tenter de vous aider sur ce point, mais il faudra plus de précision que ça!
A+
bj je viens juste de rentré chez moi (déplacement professionnel)
Voila pour plus d'explications par rapport au sujet de ma demande
vous m'avez indiqué les changements a faire sur le USF initial il le code fonctionne mais a moitié pour l'usage que je veux en faire.
Le verrou qui vérifie les doublons via message box pour textbox 1 colonne A feuille 1 ne fonctionne pas pour l'usage que je veux en faire
la règle est la suivante : une donnée saisie en cellule colonne A (n° de colis ) feuille 1 ne peut avoir que deux ligne une avec le choix ENT et l'autre SOR après le colis n' exsiste plus .
Le soucis avec votre code et le ("verrou) n'autorise qu'une seule saisie alors qu'il m' en faut deux 1 ENT 1 SOR par donnée saisie en colonne A
Néanmoins cette sécurité pour les deux mouvements ent et sor par donnée saisie en colonne A m'est indispensable.
J'ai tenté en ajoutant deux textbox supplémentaires, une m'indiquant le choix du bouton sois ENT ou SOR (textbox4) et en textbox5 le résultat du concatener Textbox 1 et 4 qui aurai du ce retrouvé en colonne E feuille1, en modifiant également dans le code "Set x = Sheets("Feuil1").Range("A1:A1000000").Find(TextBox1, , xlValues, xlWhole, , , False) ' par la colonne E
forcément avec mes maigres connaissances en VBA cela ne fonctionne pas mais c'est l'idée
Voila en espérant me faire comprendre
Cdlt
Re,
Il s'est écoulés quelques jours depuis la dernière fois et je n'ai plus d'éléments (code et fichier) pour vérifier, mais il me semble bien que le code ne permettait d'écrire qu'un Ent et qu'un Sor par identifiant puisque c'était la demande.
Joignez votre classeur avec mes codes, je ragarderai.
A la semaine prochaine
Finalement l'idée d'un optionbutton est absurde.
Quand il y en a deux le fait d'en activer un désactive l'autre; mais comme il n'y en a qu'un, un fois coché, on ne peut plus le décoché!
Il vaut mieux utiliser une checkbox. et remplacer dans le code optiobutton1 par le nom de la checkbox
Par ailleurs, au lancement de la userform, le curseur se positionne en textbox1. Si on veut d'abord cliquer sur la checkbox pour une entrée ou une sortie, le code vérifie que la textbox1 est bien renseignée, et si non, refuse de quitter la textbox1: on ne peut plus choisir ENT ou SOR
il vaut mieux déporter le code de Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
au début (après les déclarations) de Private Sub CommandButton1_Click().
et rajouter en fin de test If TextBox1 = "" Then, l'instruction : Exit Sub
A+
Bonjour j'ai placé vos corrections aux endroits voulus ça fonctionne parfaitement merci beaucoup, par contre pour vraiment en terminer avec ma demande j'ai une question qui soit nécessite un autre post car ce n'est plus le sujet du départ mais toujours lié à l'USERFORM.
Voila j'ai ajouté une macro sur la feuille 1 ( bouton mise à jour) qui permet de supprimer les lignes identiques sur cette feuille faisant référence avec les colonne A et B donc une mise à jour manuelle via le bouton, est il possible de l'intégrer directement dans l'USF au moment du click dans Private Sub CommandButton1_Click().
J'ai testé le code de cette macro en le mettant directement dans Private Sub CommandButton1_Click() juste après UserForm1.Show ça fonctionne mais pas en live, la mise à jour de la feuille 1 s'effectue au moment de la fermeture du USF par la Croix, la cerise sur le gäteau pour moi serait idéalement que tout se fasse à chaque click (validation).
Merci
Je joint le fichier modifié
Merci dans tout les cas de votre aide.
Cdlt
Il est préférable de créer une nouvelle discussion.
A+
ok ça marche merci à bientôt j'espère