[VBA-EXCEL 2003] argument non facultatif pour textbox

argument non facultatif pour textbox [VBA-EXCEL 2003] - VB/VBA/VBS - Programmation

Marsh Posté le 22-11-2005 à 10:55:39    

bonjour,
 
je voudrais additionner les nombres contenus ds les textbox pour les afficher ds une derniere nommée TextBoxMontantTotal
 

Code :
  1. TotalAcompte = 0
  2. TotalAcompte = (TextBoxMontant1.Value + TextBoxMontant2.Value + TextBoxMontant3.Value + TextBoxMontant4.Value + TextBoxMontant5.Value + TextBoxMontant6.Value + TextBoxMontant7.Value)
  3. TextBoxMontantTotal.Value = TotalAcompte

 
 
merci d'avance


Message édité par sakuraba le 22-11-2005 à 16:36:06
Reply

Marsh Posté le 22-11-2005 à 10:55:39   

Reply

Marsh Posté le 22-11-2005 à 11:28:08    

Et qu'est-ce qui ne marche pas dans ta formule ?
 


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 22-11-2005 à 11:53:37    

il additionne pas il concatene :)

Reply

Marsh Posté le 22-11-2005 à 12:33:02    

Oki il faut que tu utilise val(expression) :
 
TotalAcompte = val(TextboxMontant1)+Val(TextBoxMontant2)....
 
@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 22-11-2005 à 14:05:27    

et comment je pourrais faire une boucle pour que ça soit moins long  
genre :

Code :
  1. Sub MontatTotal()
  2. Dim i
  3. TotalAcompte = 0
  4. For i = 1 To 7
  5. TotalAcompte = TotalAcompte + Val(TextBoxMontant(i).Value)
  6. next i
  7. TextBoxMontantTotal.Value = TotalAcompte
  8. End Sub


Message édité par sakuraba le 22-11-2005 à 14:18:27
Reply

Marsh Posté le 22-11-2005 à 15:11:04    

Oui tu peux faire une macro comme celle-ci :

Code :
  1. Sub MonTotal()
  2. With UserForm1
  3.      Dim i As Integer
  4.      MontantTotal = 0
  5.      For i = 1 To 7
  6.           MontantTotal = MontantTotal + Val(.Controls("TextBoxMontant" & i).Value)
  7.      Next i
  8.      .TextBoxMontantTotal.Value = MontantTotal
  9. End With
  10. End Sub


Et l'appeler quand tu la souhaites pour mettre à jour ton total (dans les procèdures textbox_change ou textbox_afterupdate par exemple).
 
@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 22-11-2005 à 16:31:45    

pourquoi ça marche pas  
 
 

Code :
  1. Private Sub CommandButton1_Click()
  2. With UserForm1
  3. Dim i As interger
  4.     For i = 1 To 7
  5.         If IsNumeric(Val.Controls("TextBoxMontant" & i).Value) = true Then
  6.             Range("A4" & i).Value = Val.Controls("TextBoxMontant" & i).Value
  7.         Else
  8.             Msg = MsgBox("l'acompte N° " & i & " n'est pas un nombre" )
  9.         End If
  10.     Next i
  11. End With
  12. End Sub


 
le message d'erreur  :heink:  
 
argument non facultatif => Val

Message cité 1 fois
Message édité par sakuraba le 22-11-2005 à 16:35:18
Reply

Marsh Posté le 22-11-2005 à 16:46:36    

sakuraba a écrit :

pourquoi ça marche pas

Parce que tu as enlevé les parenthèses là :
Range("A4" & i).Value = Val(.Controls("TextBoxMontant" & i).Value).
 
 
Edit : et également là :If IsNumeric(Val(.Controls("TextBoxMontant" & i).Value)) = true Then  
et ici : Range("A4" & i).Value = Val(.Controls("TextBoxMontant" & i).Value)
@+


Message édité par watashi le 22-11-2005 à 16:54:04

---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 22-11-2005 à 16:50:59    

nan c est pas celui là  
 
http://img396.imageshack.us/img396/5642/sanstitre26gn.th.jpg

Reply

Marsh Posté le 22-11-2005 à 16:55:24    

sakuraba a écrit :

nan c est pas celui là


Ben et avec les 3 ?


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 22-11-2005 à 16:55:24   

Reply

Marsh Posté le 22-11-2005 à 17:10:47    

ça marche mais il ne fait toujours pas la difference entre un nombre et un caractere :)
 
le else ne  sert à rien

Reply

Marsh Posté le 22-11-2005 à 17:29:33    

sakuraba a écrit :

ça marche mais il ne fait toujours pas la difference entre un nombre et un caractere :)
 
le else ne  sert à rien


C'est parce que val() sur des lettres renvois toujours 0. il faut enlever le val de ton isnumeric :)

Reply

Marsh Posté le 22-11-2005 à 17:39:09    

OK j essaye demain bonne soirée

Reply

Marsh Posté le 23-11-2005 à 09:08:37    

merci watashi  
au faite ça veut dire quoi watashi ?

Reply

Marsh Posté le 23-11-2005 à 11:11:21    

Ca veut dire moi ou je en japonnais, mon pseudo remonte à une certaine crise d'identité ;)
Et sakuraba ?

Reply

Marsh Posté le 23-11-2005 à 11:48:14    

heu etant fan et pratiquant de sport de combat  
je me suis approprié le prenom d'un combattant Kazushi Sakuraba japonais aussi ;)

Reply

Marsh Posté le 23-11-2005 à 11:49:55    

sakuraba a écrit :

heu etant fan et pratiquant de sport de combat  
je me suis approprié le prenom d'un combattant Kazushi Sakuraba japonais aussi ;)


C'est po bien de voler  :o  :non:  
 
 
 
lollll :lol:  :D  :whistle:

Reply

Marsh Posté le 23-11-2005 à 14:04:37    

lol  
 
sinon j'ai changé isnumeric par isnumber car les nombres à virgule ne marchaient pas  
 
http://img505.imageshack.us/img505/1122/sanstitre24di.th.jpg

Reply

Marsh Posté le 23-11-2005 à 14:43:19    

Je connaissais pas isnumber merci pour l'info :D


Message édité par watashi le 23-11-2005 à 14:43:55

---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 23-11-2005 à 14:53:03    

et ça marche toujours pa s

Reply

Marsh Posté le 23-11-2005 à 15:12:52    

Redonnes ton code tel que tu l'as modifier et cequi marche pas exacteemnt. C'est toujours le else qui se fait pas ?


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 23-11-2005 à 17:07:08    

Code :
  1. Sub TotalAcompte()
  2. With UserForm1
  3.      Dim i As Integer
  4.      MontantTotal = 0
  5.      For i = 1 To 7
  6.           MontantTotal = MontantTotal + .Controls("TextBoxMontant" & i).Value
  7.      Next i
  8.      .TextBoxMontantTotal.Value = MontantTotal
  9. End With
  10. End Sub
  11. --------------------------------------------------
  12. Sub VerifAcompte()
  13. Sheets("Feuil1" ).Unprotect
  14. With UserForm1
  15. Dim i As Integer
  16.     For i = 1 To 7
  17.         If .Controls("TextBoxDate" & i).Value = "" And .Controls("TextBoxMontant" & i).Value = "0" Then
  18.        
  19.         Else
  20.             If IsDate(.Controls("TextBoxDate" & i).Value) And .Controls("TextBoxMontant" & i).Value <> "0" And IsNumeric(.Controls("TextBoxMontant" & i).Value) Then
  21.                         Sheets("Feuil1" ).Range("D4" & i + 1).Value = .Controls("TextBoxDate" & i).Value
  22.             Else
  23.                         Msg = MsgBox("La ligne d'acompte N° " & i & " n'est pas valide", vbCritical)
  24.             End If
  25.         End If
  26.     Next i
  27. End With
  28. End Sub


 
donc je voudrais faire
 
si j'ai pas eut de msgbox ouverte ds VerifAcompte j execute TotalAcompte


Message édité par sakuraba le 23-11-2005 à 17:07:51
Reply

Marsh Posté le 23-11-2005 à 17:14:15    

à la fin de Msg = MsgBox("La ligne d'acompte N° " & i & " n'est pas valide", vbCritical) j'ai mit exit sub
 
comme ça je vais pas à la fonction TotalAcompte

Reply

Marsh Posté le 23-11-2005 à 17:15:01    

Ok je vois ce que tu veux faire.
 
Bon voilà ta fonction corrigée :

Code :
  1. Sub TotalAcompte()
  2. With UserForm1
  3.      Dim i As Integer
  4.      MontantTotal = 0
  5.      For i = 1 To 7
  6.           MontantTotal = MontantTotal + .Controls("TextBoxMontant" & i).Value
  7.      Next i
  8.      .TextBoxMontantTotal.Value = CCur(MontantTotal)
  9. End With
  10. End Sub


Mais elle marche seulement si tu mets en place pour tous tes textbox sauf montanttotal ceci :

Code :
  1. Private Sub TextBoxMontant1_afterupdate()
  2.      If Not IsNumeric(CCur(Val(TextBoxMontant1.Value))) Then
  3.           MsgBox ("Cette valeur doit être numérique" )
  4.           TextBoxMontant2.Value = 0
  5.      Else
  6.      TextBoxMontant1.Value = CCur(Val(TextBoxMontant1.Value))
  7.      End If
  8.      Call TotalAcompte
  9. End Sub


Celà te fait : le contrôle de saisie numérique (isnumber désolée n'existe pas chez moi...) , le remplacement du "." saisi par la "," qui rend compréhensible, Ton montant total est mis à jour à chaque fin de saise dans un textbox.
 
bon courage  


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 23-11-2005 à 17:18:27    

oups j'ai lu et répondu sans lire ton edit faut que je regarde ton histoire de verif accompte.
 
demain par contre ;)
 
Edit : il te manque pleins de bout sur ta sub verif accmpte ... je comprends pas bien... tu lances quand chacune des macros ?


Message édité par watashi le 23-11-2005 à 17:23:02

---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 23-11-2005 à 17:22:27    

merci trop sympa de m aider à finir cette bombe de prog lol

Reply

Marsh Posté le 23-11-2005 à 17:24:28    

sakuraba a écrit :

merci trop sympa de m aider à finir cette bombe de prog lol


 
Je t'aide pas à faire des explosifs aumoins :o  ni a enregistrer le paiement de leur accompte  :o  
 
lol  :lol:  :whistle:


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 23-11-2005 à 17:46:49    

lol

Reply

Marsh Posté le 24-11-2005 à 10:18:13    

Code :
  1. Private Sub verifier_Click()
  2. ' enleve la protection de la feuille pour rentrer les infos
  3. Sheets("Feuil1" ).Unprotect
  4. 'verification de societe à ref
  5. Call SupprCell
  6. Call VerifInfo
  7. Call VerifAcompte
  8. Call FabricationEnTete
  9. 'protege la feuille
  10. Sheets("Feuil1" ).Protect
  11. End Sub


Code :
  1. Sub VerifAcompte()
  2. Sheets("Feuil1" ).Unprotect
  3. With UserForm1
  4. Dim i As Integer
  5.     For i = 1 To 7
  6.         If .Controls("TextBoxDate" & i).Value = "" And .Controls("TextBoxMontant" & i).Value = "0" Then
  7.        
  8.         Else
  9.             If IsDate(.Controls("TextBoxDate" & i).Value) And .Controls("TextBoxMontant" & i).Value <> "0" And IsNumeric(.Controls("TextBoxMontant" & i).Value) Then
  10.                         Sheets("Feuil1" ).Range("A4" & i + 1).Value = CCur(.Controls("TextBoxMontant" & i).Value)
  11.                         Sheets("Feuil1" ).Range("D4" & i + 1).Value = .Controls("TextBoxDate" & i).Value
  12.                         Call TotalAcompte
  13.             Else
  14.                        Msg = MsgBox("La ligne d'acompte N° " & i & " n'est pas valide", vbCritical): Exit Sub
  15.                    
  16.             End If
  17.         End If
  18.     Next i
  19. End With
  20. End Sub


 
dans les fonctions j'ai des msgbox qui s'affiche s'il y a des erreurs donc je voudrais que s'il n'y a aucune msgbox qui se lance ( donc pas d erreur ds mon formulaire ) que ça deverrouille le bouton creation  
 
http://img291.imageshack.us/img291/3518/sanstitre26qc.th.jpg
 


---------------
Newsletter RCZ : inscriptions compliquées ou réceptions tardives ? Mon blog la partage sans délai. C est ici que ça se passe : https://gravelparis.com/
Reply

Marsh Posté le 24-11-2005 à 10:53:00    

Salut
Le mieux pour ça est de créer une variable booléenne (vrai ou faux). Tu lui donne un état de base, tu exécutes ton code. En cas d'erreur (donc dans le else), tu changes l'état de ta variable. A la fin, il te suffit d'activer ou non le bouton si la valeur de ta variable est ou non identique à celui du début.
C 'est clair ??? Sinon j'écrirais ça vite fais...

Reply

Marsh Posté le 24-11-2005 à 10:55:58    

Au temps pour moi ça sert à rien vu le Exit SUb...  
t'as cas désactiver le bouton au début (comme ça si tu sort de ta boucle il sera désactivé), et de le réactiver à la fin (si le programmes arrive jusque là c'est que tout c'est bien passé...).
Voilà j'espère que ça t'iras.

Reply

Marsh Posté le 24-11-2005 à 11:42:00    

j'ai utilisé comme tu me l'as conseillé UserForm1.Creation.Enabled = False


---------------
Newsletter RCZ : inscriptions compliquées ou réceptions tardives ? Mon blog la partage sans délai. C est ici que ça se passe : https://gravelparis.com/
Reply

Marsh Posté le 24-11-2005 à 12:59:00    

C ce que tu voulais ou bien ???

Reply

Marsh Posté le 24-11-2005 à 14:22:32    

oui


---------------
Newsletter RCZ : inscriptions compliquées ou réceptions tardives ? Mon blog la partage sans délai. C est ici que ça se passe : https://gravelparis.com/
Reply

Marsh Posté le 24-11-2005 à 14:26:47    

Code :
  1. With UserForm1
  2.      Dim i As Integer
  3.      MontantTotal = 0
  4.      For i = 1 To 7
  5.           MontantTotal = MontantTotal + .Controls("TextBoxMontant" & i).Value
  6.      Next i
  7.      .TextBoxMontantTotal.Value = MontantTotal
  8. End With


 
OBJET INTROUVABLE ??


Message édité par sakuraba le 24-11-2005 à 14:27:19

---------------
Newsletter RCZ : inscriptions compliquées ou réceptions tardives ? Mon blog la partage sans délai. C est ici que ça se passe : https://gravelparis.com/
Reply

Marsh Posté le 24-11-2005 à 14:28:23    

trouvé j'avais supprimé une textbox ;)


---------------
Newsletter RCZ : inscriptions compliquées ou réceptions tardives ? Mon blog la partage sans délai. C est ici que ça se passe : https://gravelparis.com/
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed