1 choix sur 4 propositions

Gil369 Messages postés 120 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 7 novembre 2018 - 25 mars 2008 à 18:23
Gil369 Messages postés 120 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 7 novembre 2018 - 28 mars 2008 à 12:52
Bonjour,
je fais un petit programme pour gerer les finances d un club, je bute sur une fonction de choix ! j ai dans mon formulaire 4 boutonoption ( cheque, virement, prelevemnt, especes) tout fonctionne bien dans mon formulaire mais ça coince quand je veux valider pour envoyer sur ma feuille excel
ci joint le debut de mes codes
Private Sub BTN_Valider_Click()
   
    'On teste la saisie de la date...
    If Me.TXT_Date.Text = "" Then
        MsgBox "Vous devez entrer une date"
        Me.TXT_Date.SetFocus
        Exit Sub
    End If
   
    'On teste la saisie de la pieceN°...
    If Me.TXT_PieceN°.Text = "" Then
        MsgBox "Vous devez entrer un numero de piece"
        Me.TXT_PieceN°.SetFocus
        Exit Sub
    End If
   
    'On teste la saisie de l'editeur...
    If Me.ComboBox_Editeur.Text = "" Then
        MsgBox "Vous devez entrer un editeur"
        Me.ComboBox_Editeur.SetFocus
        Exit Sub
    End If
   
             'On teste la saisie du N° de cheque...
                If Me.TXT_ChequeN°.Text = "" Then
                MsgBox "Vous devez entrer un N° de chèque"
                Me.TXT_ChequeN°.SetFocus
                Exit Sub
   
            'On teste la saisie du Prelevement...
                ElseIf Me.TXT_Prelevement.Text = "" Then
                MsgBox "Vous devez entrer Prelevement"
                Me.TXT_Prelevement.SetFocus
                Exit Sub
           
            'On teste la saisie du virement...
                ElseIf Me.TXT_Virement.Text = "" Then
                MsgBox "Vous devez entrer virement"
                Me.TXT_Virement.SetFocus
                Exit Sub
            'On teste la saisie d' especes...
                ElseIf Me.TXT_Especes.Text = "" Then
                MsgBox "Vous devez entrer Especes"
                Me.TXT_Especes.SetFocus
                Exit Sub
           
            End If
   
    Range("Comptes_2008!B65536").End(xlUp).Offset(1, 0).Value = Me.TXT_Date.Value
    Range("Comptes_2008!C65536").End(xlUp).Offset(1, 0).Value = Me.TXT_PieceN°.Value
    Range("Comptes_2008!D65536").End(xlUp).Offset(1, 0).Value = Me.TXT_ChequeN°.Value
    Range("Comptes_2008!D65536").End(xlUp).Offset(1, 0).Value = Me.TXT_Prelevement.Value
    Range("Comptes_2008!E65536").End(xlUp).Offset(1, 0).Value = Me.ComboBox_Editeur.Value
   
    Unload Me 'De cette façon, à la prochaine saisie, les TextBoxs sont vides à l'ouverture
End Sub
merci de votre aide
Gilles

37 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
26 mars 2008 à 14:00
et ce parceque tu testes sur prélèvement alors que tu as opté pour chèque.
N' appelles ta fonction Test que pour l' objet correspondant à l' option choisie


Private Sub BTN_Valider_Click()
  -testes sur la date
  -Testes sur l' éditeur
  If BTN_Especes = True Then
      If  TestText (Me.TXT_Especes.Text ,"Vous devez....") Then  Exit Sub
     
   ElseIf BTN_Virement = True Then
      If  TestText (Me.TXT_Virement.Text  ,"Vous devez....") Then Exit Sub
   
   ElseIf BTN_Cheque = True Then
      If  TestText (Me.TXT_Cheque.Text  ,"Vous devez....") Then   Exit Sub
 
  ElseIf BTN_Prelevement = True Then
      If  TestText (Me.TXT_Prelevement Text  ,"Vous devez....")   Then     Exit Sub
 
  End If
 
 tu continues le traitement...
 Range("Comptes_2008!B65536").End(xlUp).Offset(1, 0).Value = Me.TXT_Date.Value
    Range("Comptes_2008!C65536").End(xlUp).Offset(1, 0).Value = Me.TXT_PieceN°.Value
    Range("Comptes_2008!D65536").End(xlUp).Offset(1, 0).Value = Me.TXT_ChequeN°.Value
    Range("Comptes_2008!E65536").End(xlUp).Offset(1, 0).Value = Me.ComboBox_Editeur.Value


End Sub
n' oublies pas de rendre visible ou pas et enabled ou pas
les objets correspondants à l' option choisie.







<hr />

... Y'en a même qui disent qu'ils l'ont vu voler.



<hr />





/PRE>
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
26 mars 2008 à 14:05
pardon!
ajoutes Not devant la fonction

 If  Not(TestText (Me.TXT_Especes.Text ,"Vous devez...."))) Then  Exit Sub

pareil pour les autres appels

     

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
26 mars 2008 à 14:11
de mieux en mieux
enlèves les .Text

If  Not TestText (Me.TXT_Especes<strike>.Text</strike> ,"Vous devez....") Then  Exit Sub

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
Gil369 Messages postés 120 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 7 novembre 2018
26 mars 2008 à 14:39
re, apres essai sur la derniere version, j ai un message "erreur de compilation: incompatibilite de type" sur:

Private Sub BTN_Valider_Click()
   
    'On teste la saisie de la date...
   If Not TestText(TXT_Date, "une date") Then Exit Sub
  
   'On teste la saisie de la pieceN...
   If Not TestText(TXT_PieceN°, "un numéro de pièce") Then Exit Sub
 
   'On teste la saisie de l'editeur...
   If Not TestText(ComboBox_Editeur, "un éditeur") Then Exit Sub
  
   If BTN_Especes = True Then
      If Not (TestText(Me.TXT_Especes.Text, "Vous devez....")) Then Exit Sub
     
   ElseIf BTN_Virement = True Then
      If Not (TestText(Me.TXT_Virement.Text, "Vous devez....")) Then Exit Sub
   
   ElseIf BTN_Cheque = True Then
      If Not (TestText(Me.TXT_Cheque.Text, "Vous devez....")) Then Exit Sub
 
  ElseIf BTN_Prelevement = True Then
      If Not (TestText(Me.TXT_Prelevement.Text, "Vous devez....")) Then Exit Sub
 
 End If
    
   
    'On teste la saisie du N de cheque si c'est le paiement par chèque choisi
   If BTN_Cheque.Value And Not TestText(TXT_ChequeN°, "un numéro de chèque") Then Exit Sub
  
   'On teste la saisie du prélèvement si c'est le paiement par Prélèvement choisi
   If BTN_Prelevement.Value And Not TestText(TXT_Prelevement, "Prélèvement") Then Exit Sub
  
   'On teste la saisie du Virement si c'est le paiement par Virement choisi
   If BTN_Virement.Value And Not TestText(TXT_Virement, "Virement") Then Exit Sub
  
   'On teste la saisie des Especes si c'est le paiement par Especes choisi
   If BTN_Especes.Value And Not TestText(TXT_Especes, "Especes") Then Exit Sub
   


         
    Range("Comptes_2008!B65536").End(xlUp).Offset(1, 0).Value = Me.TXT_Date.Value
    Range("Comptes_2008!C65536").End(xlUp).Offset(1, 0).Value = Me.TXT_PieceN°.Value
    Range("Comptes_2008!D65536").End(xlUp).Offset(1, 0).Value = Me.TXT_ChequeN°.Value
    Range("Comptes_2008!E65536").End(xlUp).Offset(1, 0).Value = Me.ComboBox_Editeur.Value
   
    Call Unload(Me)  'De cette façon, à la prochaine saisie, les TextBoxs sont vides à l'ouverture


End Sub

ça se complique pour moi , j essaie de comprendre, mais bcp de fonctions ....
A+ Gilles
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
26 mars 2008 à 14:45
d' abord


Private Sub BTN_Valider_Click()
   
    'On teste la saisie de la date...
   If Not TestText(TXT_Date, "une date") Then Exit Sub
  
   'On teste la saisie de la pieceN...
   If Not TestText(TXT_PieceN°, "un numéro de pièce") Then Exit Sub
 
   'On teste la saisie de l'editeur...
   If Not TestText(ComboBox_Editeur, "un éditeur") Then Exit Sub
   
  'c' est de ma faute !
  If BTN_Especes.Value = True Then
      If Not (TestText(Me.TXT_Especes.Text, "Vous devez....")) Then Exit Sub
     
   ElseIf BTN_Virement .Value   = True Then
      If Not (TestText(Me.TXT_Virement.Text, "Vous devez....")) Then Exit Sub
   
   ElseIf BTN_Cheque.Value  = True Then
      If Not (TestText(Me.TXT_Cheque.Text, "Vous devez....")) Then Exit Sub
 
  ElseIf BTN_Prelevement .Value   = True Then
      If Not (TestText(Me.TXT_Prelevement.Text, "Vous devez....")) Then Exit Sub
 
 End If
    
   
   <strike> 'On teste la saisie du N de cheque si c'est le paiement par chèque choisi
   If BTN_Cheque.Value And Not TestText(TXT_ChequeN°, "un numéro de chèque") Then Exit Sub
  
   'On teste la saisie du prélèvement si c'est le paiement par Prélèvement choisi
   If BTN_Prelevement.Value And Not TestText(TXT_Prelevement, "Prélèvement") Then Exit Sub
  
   'On teste la saisie du Virement si c'est le paiement par Virement choisi
   If BTN_Virement.Value And Not TestText(TXT_Virement, "Virement") Then Exit Sub
  
   'On teste la saisie des Especes si c'est le paiement par Especes choisi
   If BTN_Especes.Value And Not TestText(TXT_Especes, "Especes") Then Exit Sub
   
</strike>tu viens de faire les testes.
Tu ne va pas les refaire ! !!

                         
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />


/P>
0
Gil369 Messages postés 120 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 7 novembre 2018
26 mars 2008 à 15:20
re et merci pour tes conseils, je plante sur

Private Sub BTN_Valider_Click()
   
    'On teste la saisie de la date...
   If Not TestText(TXT_Date, "une date") Then Exit Sub
  
   'On teste la saisie de la pieceN...
   If Not TestText(TXT_PieceN°, "un numéro de pièce") Then Exit Sub
 
   'On teste la saisie de l'editeur...
   If Not TestText(ComboBox_Editeur, "un éditeur") Then Exit Sub
  
   If BTN_Especes.Value = True Then
      If Not (TestText(Me.TXT_Especes.Text, "Vous devez....")) Then Exit Sub      (des la validation = erreur de compilation, incompatibilite de type )
      
   ElseIf BTN_Virement.Value = True Then
      If Not (TestText(Me.TXT_Virement.Text, "Vous devez....")) Then Exit Sub
   
   ElseIf BTN_Cheque.Value = True Then
      If Not (TestText(Me.TXT_Cheque.Text, "Vous devez....")) Then Exit Sub
 
  ElseIf BTN_Prelevement.Value = True Then
      If Not (TestText(Me.TXT_Prelevement.Text, "Vous devez....")) Then Exit Sub
 
 End If
    
         
    Range("Comptes_2008!B65536").End(xlUp).Offset(1, 0).Value = Me.TXT_Date.Value
    Range("Comptes_2008!C65536").End(xlUp).Offset(1, 0).Value = Me.TXT_PieceN°.Value
    Range("Comptes_2008!D65536").End(xlUp).Offset(1, 0).Value = Me.TXT_ChequeN°.Value
    Range("Comptes_2008!E65536").End(xlUp).Offset(1, 0).Value = Me.ComboBox_Editeur.Value
   
    Call Unload(Me)  'De cette façon, à la prochaine saisie, les TextBoxs sont vides à l'ouverture


End Sub

Je dois quitter, je reviens ce soir, encore merci
A+ Gilles
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
26 mars 2008 à 15:23
Re,
VIre les .TEXT  TestText attends des objets graphiques pas des variables de type String

@+: Ju£i?n
Pensez: Réponse acceptée
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
26 mars 2008 à 15:25
j' avais déjà corrigé !
 If Not (TestText(Me.TXT_Especes.<strike>Text</strike>, "Vous devez....")) Then Exit Sub     

le 1 ier paramètre est un objet Me.TXT_Especes
et non du texte  <strike>Me.TXT_Especes</strike><strike>.Text
</strike>et donc
If Not (TestText(Me.TXT_Especes, "Vous devez....")) Then Exit Sub 

pareil pour les autres.
    
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
26 mars 2008 à 15:26
 
^post croisé !

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
Gil369 Messages postés 120 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 7 novembre 2018
26 mars 2008 à 22:44
re, ça fonctionne mieux ! en relisant le tout je me suis aperçu que j avais un message d erreur parce que j avais oublie le "N°" sur TXT_Cheque N°



Private Function TestText(Obj As Object, Txt As String) As Boolean
   TestText = True
   If Obj.Text = vbNullString Then
       Call MsgBox("Vous devez entrer " & Txt)
       Obj.SetFocus
       TestText = False
   End If
End Function



Private Sub BTN_Valider_Click()
   
    'On teste la saisie de la date...
   If Not TestText(TXT_Date, "une date") Then Exit Sub
  
   'On teste la saisie de la pieceN...
   If Not TestText(TXT_PieceN°, "un numéro de pièce") Then Exit Sub
 
   'On teste la saisie de l'editeur...
   If Not TestText(ComboBox_Editeur, "un éditeur") Then Exit Sub
  
        If BTN_Cheque.Value = True Then
            If Not TestText(Me.TXT_ChequeN°, "Cheque") Then Exit Sub    = manquai le N°
  
        ElseIf BTN_Prelevement.Value = True Then
            If Not TestText(Me.TXT_Prelevement, "Prelevement") Then Exit Sub
  
        ElseIf BTN_Virement.Value = True Then
            If Not TestText(Me.TXT_Virement, "Virement") Then Exit Sub
  
        ElseIf BTN_Especes.Value = True Then
            If Not TestText(Me.TXT_Especes, "Especes") Then Exit Sub
      
 End If
     
    j ai egalement supprimer les ( ) sur :    If BTN_Cheque.Value = True Then
                                                                         If Not <strike>(</strike>
TestText(Me.TXT_ChequeN°, "Cheque") <strike>)</strike>Then Exit Sub     sans noter de modification dans le fonctionnement  

1) par contre si je valide en laissant vide  les TXT date, pieceN° ou  editeur le msgbox me le signale mais 
accepte sans msgbox si je laisse vide un des 4 TXT cheque, prelevement, virement ou especes , dois je intervenir sur le frame pour cela ? sachant que ces 4 optionbuttton sont dans ce frame
 2) Pour repondre a Julien a la question de ce matin concernant les TXT grisees quand elles sont inactives : non je n ai pas resolu ce probleme pour le moment
mais mon projet avance petit a petit grace a votre aide precieuse meme si je ne controle pas encore toutes les subtilite de l ecriture vba

A+ Gilles
 
































PS: ou en est le problème d'hier? avec les Textbox Grisé?
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
26 mars 2008 à 23:24
Bonsoir,
..."dois je intervenir sur le frame pour cela ?
Beh c' est préférable . C' est même primordiale !
Schatiquement :


Sub ETAT_INITIAL
  'Tous sont vides
  TXT_Especes.Text=""
   TXT_ChequeN.Text=""
   TXT_Prelevement.Text=""
  TXT_Virement.Text=""
 
  'Tous sont désactivés
  TXT_Especes.Enabled=False
  TXT_ChequeN.Enabled=False
  TXT_Prelevement.Enabled=False
  TXT_Virement.Enabled=False
End Sub


Au lancement, une option est par défaut à True.
Disons BTN_Espèces.
ETAT_INITIAL
TXT_Especes.Enabled=True


A chaque fois que tu cliques sur une option, tu réinitialises et tu actives le control correspondant.


Sub BTN_Cheque _Click()
 ETAT_INITIAL
 TXT_Cheque.Enabled=True
End Sub


Sub BTN_Prelevement_Click()
 ETAT_INITIAL
 TXT_Prelevement.Enabled=True
End Sub


Sub BTN_Virement _Click()
 ETAT_INITIAL
 TXT_Virement.Enabled=True
End Sub


Sub BTN_Especes _Click()
 ETAT_INITIAL
 TXT_Especes.Enabled=True
End Sub







<hr />

... Y'en a même qui disent qu'ils l'ont vu voler.



<hr />





/PRE>
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
27 mars 2008 à 08:17
Re,
Quelque chose me tracasse. est ce que au final il n'y a pas deux topic pour le même problème.
J'avoue que même après 4 Pages de discution, je n'ai pas l'impression d'avoir saisi le problème.

>[auteur/LIBREMAX/1050148.aspx LIBRE_MAX] : "Au lancement, une option est par défaut à True." ah bon????

De plus le sujet des TextBox Enabled à dejà été traité dans l'autre post et avait donnée cette procédure à appelé à chaque click sur une option

Private Sub DisableControls()
   TXT_ChequeN°.Enabled = BTN_Cheque.Value
   TXT_Prelevement.Enabled = BTN_Prelevement.Value
   TXT_Virement.Enabled = BTN_Virement.Value
   TXT_Especes.Enabled = BTN_Especes.Value
End Sub

On se disperse là non?

@+: Ju£i?n
Pensez: Réponse acceptée
0
Gil369 Messages postés 120 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 7 novembre 2018
27 mars 2008 à 10:04
Re, tout fonctionne bien avec ces codes : 1 seul optionbutton ne peut etre actif dans le frame et la txtbox correspondante est activee, les 3 autres sont verrouillees.(NICKEL)
   1)Je souhaitai seulement pouvoir griser les 3 textbox inactives
2) Activer un msgbox en cas d oubli de cocher 1 optionbutton  du frame et du remplissage du textbox correspondant avant de passer au textbox suivant ("categorie")
        PS : Les msgbox "date" "pieceN°" et "editeur" sont bien actives en cas d oubli

Private Sub DisableControls()
  
   TXT_ChequeN°.Enabled = BTN_Cheque.Value
   TXT_Prelevement.Enabled = BTN_Prelevement.Value
   TXT_Virement.Enabled = BTN_Virement.Value
   TXT_Especes.Enabled = BTN_Especes.Value
            End Sub




Private Sub BTN_Cheque_Click()
    Call DisableControls
End Sub
       
        Private Sub INT_ChequeN°_Click()
            

 End Sub
               
                Private Sub TXT_ChequeN°_Change()
                     End Sub
  
      .... Idem pour les 3 autres

Private Function TestText(Obj As Object, Txt As String) As Boolean
   TestText = True
   If Obj.Text = vbNullString Then
       Call MsgBox("Vous devez entrer " & Txt)
       Obj.SetFocus
       TestText = False
   End If
End Function




Private Sub BTN_Valider_Click()
   
    'On teste la saisie de la date...
   If Not TestText(TXT_Date, "une date") Then Exit Sub
  
   'On teste la saisie de la pieceN...
   If Not TestText(TXT_PieceN°, "un numéro de pièce") Then Exit Sub
 
   'On teste la saisie de l'editeur...
   If Not TestText(ComboBox_Editeur, "un éditeur") Then Exit Sub
  
        If BTN_Cheque.Value = True Then
            If Not TestText(Me.TXT_ChequeN°, "Cheque") Then Exit Sub
  
        ElseIf BTN_Prelevement.Value = True Then .... pour les 3 autres

      End If
     
                      Range("Comptes_2008!B65536").End(xlUp).Offset(1, 0).Value = Me.TXT_Date.Value
                       Range .......

Call Unload(Me)  'De cette façon, à la prochaine saisie, les TextBoxs sont vides à l'ouverture


End Sub

Merci A+
Gilles
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
27 mars 2008 à 11:51
Bonjour,


"Au lancement, une option est par défaut à True."
Pourquoi pas ?
ça fait partie de l' initialisation du formulaire.
Dans un même cas de figure, je choisirais la plus courante.
Cela explique le:
ETAT_INITIAL
TXT_Especes.Enabled=True


+
Dans DisableControls, il manque à mon avis la remise à "" de tous les TXT.


Si je choisi chèques et que je remplis N chèquepuis puis que je
me retracte et que je choisi Espèces,sans remettre à "" le TXT_Cheque, il va figurer dans ma feuille alors que je suis sur espèces. 


Pour le topic qui s' éternise, beh , si ça ne dépendait que de nous...!

                        
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />


/P>
0
Gil369 Messages postés 120 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 7 novembre 2018
28 mars 2008 à 12:24
bonjour a vous,
desolé de faire "durer" le topic, je ne savais pas qu il fallait faire court
merci
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
28 mars 2008 à 12:31
Bonjour,
Mais non Gil ! il ne faut pas le prendre comme ça !
Tu peut poster autant que tu veux...
Ce que voulais dire Julien, c' est que le but est que la solution soit trouvée le plus rapidement possible.
Nous on est dispo à continuer...
C' est à toi qu' on pense.Il faut que ton travail avance.

<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE>
0
Gil369 Messages postés 120 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 7 novembre 2018
28 mars 2008 à 12:52
ok, merci mais comme je suis nouveau en vbexcel et sur le site , je ne connais pas les conventions et ne veux pas abuser.
J essaie les "" dans disablecontrols
A+
gilles
0
Rejoignez-nous