Recuperer le contenu des textbox

Recuperer le contenu des textbox - VB/VBA/VBS - Programmation

Marsh Posté le 13-02-2006 à 16:00:56    

Bonjour alors voila j'ai 21 texbox présent dans un Userform
j'arrive à récupérer le contenu d'un textbox mais j'aimerai ne pas a avoir à écrir mon code 22 fois  :non:  
 
voici mon code (valable juste pour le TextBox1 qui rempli la case B16)

Code :
  1. Jour = Day(Now)
  2. 'si l'utilisateur ne met rien dans la case opération 1
  3. If TextBox1.Value = "" Then
  4.     Range("B" & Jour + 3) = Range("B" & Jour + 3) 'le total reste le même
  5. Else
  6.     Range("B" & Jour + 3) = Range("B" & Jour + 3) + TextBox1.Value 'sinon on additionne l'ancien total avec la valeur que l'utilisateur viens de mettre dans le textbox
  7. End If
  8. End Sub


 
 
 
j'ai remarqué que le contenu de la textbox1 va en B12 (16 correspond à mon Jour +3 car aujourd'hui on est le 13)  
le textbox2 va en C16, le textbox3 en D16 ...  
donc comment changer mon code et faire une boucle et ainsi récupérer le contenu des 22 textbox (le contenu du 21 ieme est en V16)

Reply

Marsh Posté le 13-02-2006 à 16:00:56   

Reply

Marsh Posté le 13-02-2006 à 17:40:15    

Tu fais une fonction qui accepte en paramètre, soit un objet Textbox, soit le nom de ta textbox.
Dans ta fonction tu utiliseras l'objet tel quel ( objTxt.Value ) ou via la collection Controls( nomTextBox ).Value
 
Pour la lettre des coordonnées de ta cellule, tu peux jongler avec le code ASCII des caractères par rapport au n° de ta textbox.


Message édité par tegu le 13-02-2006 à 17:40:33
Reply

Marsh Posté le 14-02-2006 à 16:06:58    

j'ai essayé de faire ce que tu m'a proposé mais je bloque (par contre j'ai pas fais de fonction)
 

Code :
  1. Jour = Day(Now)
  2. 'si l 'utilisateur ne met rien dans la case opération 1
  3. For lettre = Asc("B" ) To Asc("V" )
  4.     NoColonne = lettre - 65
  5.     MsgBox TextBox & NoColonne
  6.     MsgBox NoColonne
  7.     If Controls(TextBox & NoColonne).Value = "" Then
  8.         Range(lettre & Jour + 3) = Range(lettre & Jour + 3) 'le total reste le même
  9.     Else
  10.         Range(lettre & Jour + 3) = Range(lettre & Jour + 3) + Controls(TextBox & NoColonne).Value 'sinon on additionne l'ancien total avec la valeur que l'utilisateur viens de mettre dans opération1
  11.     End If
  12.     'Next
  13. Next


 
Il me dis qu'il trouve pas l'objet au niveau du if Control...

Reply

Marsh Posté le 14-02-2006 à 16:31:25    

1/ vérifie que les valeurs de tes variables textbox et NoColonne donnent bien un nom de champ valable (je vois un MsgBox donc je suppose que c'est bon, mais on n'est jamais trop sûr)
2/ préfixe Controls par le nom de ton userform et un point
frmMonUserForm.Controls(...)
3/ passe par une variable objet
dim oTxt As TextBox
set oTxt = userform.controls(...)
if oTxt.value Then...
 
Si rien ne marche alors quelque chose m'échappe
 

Reply

Marsh Posté le 14-02-2006 à 16:38:39    

Salut angelo,
Pour utiliser controls pour appeler le textbox il ne faut pas oublier les guillemets
 
Par ailleurs pour éviter de passer par des Asc() utilise plutôt la fonction cells(N° ligne, N° colone) que range.
Si ton textbox est vide tu ne fais rien, si tu défini uniquement ce que tu as à faire si le textbox à une valeur ça simplifie les choses.
Voilà ce que pourrait donner ton code une fois simplifié :

Code :
  1. ligne = day(now) +3
  2. For i = 1 To 22
  3.     If Controls("TextBox" & i).Value <> "" Then
  4.     Sheets(1).Cells(ligne, i + 1).Value = Sheets(1).Cells(ligne, i + 1).Value + Controls("TextBox" & i).Value
  5.     Else
  6.     End If
  7. Next i


il y a surement mieux :) mais c'est déjà ça
 
@+ et bon courage


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

Marsh Posté le 14-02-2006 à 16:41:48    

Pffff j'avais cru que TextBox était une variable contenant le début du nom des textbox à exploiter.
Mais watashi a clairement mieux vu que moi l'erreur. Effectivement avec les guillemets ça devrait focnitonner.

Reply

Marsh Posté le 14-02-2006 à 16:54:08    

alors j'ai fais un copier coller scrupuleu du code de watashi mais il me met toujours la même chose : objet sécifié introuvable au niveau du if  
c'est peut être que ce code est sur l'évenement click d'un bouton alors que les textbox sont sur le userforms non?

Reply

Marsh Posté le 14-02-2006 à 17:00:01    

Si ton code n'est pas directement dans le userform alors il faut préfixer Controls par le nom de ton userform comme je t'ai indiqué en 2/
 
Sinon ben attend les bonnes lumières de watashi :)

Reply

Marsh Posté le 14-02-2006 à 17:07:44    

c'ets que définitivement il reconnait pas le nom de ton textbox
 
vérifies voir si les noms des contrôles sont bien textbox1 à textbox22...
ton bouton est sur le même userform ? sinon il faut mentioner le nom du userform également...
 
@+


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

Marsh Posté le 14-02-2006 à 17:13:58    

lol tegu on a répondu en même temps ;)
 
;)


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

Marsh Posté le 14-02-2006 à 17:13:58   

Reply

Marsh Posté le 14-02-2006 à 17:30:35    

Autant pour moi je viens de relire l'ennoncé et il y a 21 textbox donc de textbox 1 à textbox21 change le for i= 1 to 22 en i= 1 to 21 et ça devrait rouler ;)
@+


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

Marsh Posté le 15-02-2006 à 11:08:50    

les textbox sont sur le même userform que le bouton toutefois j'ai modifier quand même le code
 
 

Code :
  1. Private Sub Valider_Opération_Click()
  2. ligne = Day(Now) + 3
  3. For i = 1 To 21
  4.     If frmOpération.Controls("TextBox" & i).Value <> "" Then
  5.         Sheets(1).Cells(ligne, i + 1).Value = Sheets(1).Cells(ligne, i + 1).Value + frmOpération.Controls("TextBox" & i).Value
  6.     Else
  7.     End If
  8. Next i
  9. ActiveWorkbook.Save 'sauvegarde
  10. 'ActiveWorkbook.Close
  11. End Sub


 
et toujour pareil objet requis au niveau du if  
 
j'ai vérifier le nom de mes TextBox et c'est bien TextBox1, TextBox2 ...
 
la preuve en image :
http://angelo7891.skyblog.com/
désolé la foto est flou mais en agrandissant on peut se rendre compte que le userform s'appel Opération et le textbox TextBox1

Reply

Marsh Posté le 15-02-2006 à 11:23:27    

si tu veux je regardes ton fichier.
Regarde ton pm je t'y mets mon mail.
Donnes moi aussi ta version d'excel.
@+


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

Marsh Posté le 16-02-2006 à 06:55:56    

Bonjour,  
Si le UserForm s'appelle  Opération, il faut changer frmOpération en Opération :
 
If Opération.Controls("TextBox" & i).Value <> "" Then
 
Epéna

Reply

Marsh Posté le 16-02-2006 à 09:36:28    

Exact, frm n'est pas un préfixe implicite du langage VB mais une convention personnelle de nommage.
Décidemment il faut faire gaffe à ce qu'on écrit pour être interprété correctement.

Reply

Marsh Posté le 16-02-2006 à 09:41:18    

en fait le problème étais ailleur (du a mon manque de vigilence et mon étourderie  :heink:  )
 

Code :
  1. ligne = day(now) +3
  2. For i = 1 To 21
  3.    If Controls("TextBox" & i).Value <> "" Then
  4.    Sheets(1).Cells(ligne, i + 1).Value = Sheets(1).Cells(ligne, i + 1).Value + Controls("TextBox" & i).Value 
  5. Else
  6. End If
  7. Next i


 
le probleme étais que ma derniere textbox était appelé textbox21 et non 22 donc il trouvait pas le dernier forcément !
sinon le donné est bon vu que les textbox sont sur le userform Opération inutile de mettre Opération.Controls


Message édité par Angelo38 le 16-02-2006 à 09:42:17
Reply

Sujets relatifs:

Leave a Replay

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