Macro de débutant à corriger...

Shinichi

XLDnaute Junior
Bonjour à tous

J'ai 15 TextBoxes à sommer dans une 16eme...
Mais ce que je fais ne marche pas.. pourquoi? Les textboxes a sommer sont les textbox de 261 à 276

TextBox151 = 0
For I = 61 To 76
TextBox151 = Val(TextBox151) + Val(textbox2 & I)
Next I
End Sub
 
2

2passage

Guest
bonjour,

Dans ton code, tu ne peux pas faire d'opération directement sur le nom des objets (il cherche une textbox2, ton code je pense, là)

je suis d'accord qu'une boucle serait plus jolie, mais dans ton cas, je passerais quand meme par un bien laid :

textbox151.value = textbox161.value + textbox162.value + textbox163.value....+ textbox176.value


On peut aussi boucler sur les objets du formulaire, mais bon.. pour 15 boiboites, c'est peut etre un peu excessif ;)


++
 

Shinichi

XLDnaute Junior
Bonjour à tous et merci pour l'aide

J'ai un peu modifié ton code, car cela posait problème si les textboxes n'étaient pas remplies... Mais cette porte de sortie ne marche qu'une fois.. Pourquoi? Comment améliorer le truc?


Dim somme As Double
Dim i As Integer
TextBox151 = ''
For i = 261 To 276
On Error GoTo out
somme = somme + Controls('TextBox' & i)
out:
Next i
TextBox151 = somme

A bientot
 

Hervé

XLDnaute Barbatruc
Bonjour tout le monde

Dans ton code tu lui dis : si tu rencontres une erreur rend toi à la balise out: mais après la macro se termine sans etre retourné dans la boucle for next.

A la limite tu pourrais utilisé on error resume next à la place de on error goto.

Mais je pense que ce type de macro à grand renfort de gestionnaire d'erreur est dangereux, en effet si tu à un autre problème plus loin dans ta procédure celui-ci ne sera pas non plus détecté car annulé par le on error.

Je crois qu'il vaut mieux blindé le code de la boucle en testant les valeurs des textbox avant de sommer leur contenus :

Ce code, vérifie avant que le textbox n'est pas vide, qu'il contient bien du numérique, et remplace le séparateur de décimal . par ,

Dim i As Integer
Dim somme As Double
For i = 261 To 276
    Controls('TextBox' & i) = Replace(Controls('TextBox' & i), '.', ',')
   
If Controls('TextBox' & i) <> '' And IsNumeric(Controls('TextBox' & i)) Then
&nbsp; &nbsp; &nbsp; &nbsp; somme = Controls('TextBox' & i) + somme
&nbsp; &nbsp;
End If
Next i

TextBox151 = somme

End Sub


En espérant que ceci te dépannera.

Salut
 

Discussions similaires

Réponses
4
Affichages
234
Réponses
6
Affichages
295

Statistiques des forums

Discussions
312 527
Messages
2 089 361
Membres
104 138
dernier inscrit
Ber