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 pour autant

merci de votre aide

Cdlt

11saisie.xlsm (67.11 Ko)

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

8saisie1.xlsm (69.92 Ko)

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... de vous faire perdre du temps d'ou votre retour "il faut un minimum de connaissance ... oui je suis d'accord

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

Bj

Voici le fichier comme convenu

cdlt Bon Week

9saisie1.xlsm (68.14 Ko)

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

17saisieiv.xlsm (39.81 Ko)

Il est préférable de créer une nouvelle discussion.

A+

ok ça marche merci à bientôt j'espère

Rechercher des sujets similaires à "bouton option renvoi message celllule click textbox renseignees"