• Initiateur de la discussion Initiateur de la discussion paul87
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

paul87

XLDnaute Impliqué
Bonjour à tous, bonjour le Forum
dans le programme test joint,
j'ai un masque de saisie qui me sert à relever des valeurs numériques.
Pour lancer le UF il faut double click dans la colonne A, à la ligne choisie.
Tout fonctionne bien, pour l'ouverture, le remplissage, et le tranfert des données dans la Feuil1.
Mais je ne comprends pas, il y a des erreurs dans les formats de nombre, les moyennes sont fausses ou pas calculées...
ou les moyennes disparaissent lorsqu'on ré-ouvre le UF sur une ligne déja saisie..
Si quelqu'un pouvait me donner une piste...svp
 

Pièces jointes

Re : Nombres et moyennes

Hello,

voici les étapes.

Au chargement du userform on charge le tableau des contrôles 'GrpTb'
Code:
 For Each Ctl In Me.Controls
        If Ctl.Name Like "TextBox*" Then
            ReDim Preserve GrpTb(0 To i)
            Set GrpTb(i) = New clsTbNum
            Set GrpTb(i).LeTextBox = Ctl
            i = i + 1
            If IsNumeric(Ctl.Tag) Then Ctl.Value = Cells(Ligne, Val(Ctl.Tag))
        End If
    Next
Si un Tag contient un numérique c'est qu'il fait référence à un numéro de colonne-> la valeur du textbox prendra la valeur de la cellule(Ligne, Val(Ctl.Tag)) OK?

Ensuite pour faire le chemin inverse (des textbox vers les cellules), il n'est plus nécéssaire de recharger GrpTb. Tu as le choix entre deux options:

1 - parcourir tous les controles du formulaire pour en traiter que ceux qui sont des textbox et dont le .tag est numérique:

Code:
Dim ctl As Control
For Each ctl In Me.Controls
   If TypeOf ctl Is MSForms.TextBox And IsNumeric(ctl.Tag) Then
     Cells(Ligne, [COLOR=red]Clng[/COLOR](ctl.Tag)) = cdbl(ctl.Value)
   End If
Next ctl
parcourir le tableau GrpTb dont on sait déjà qu'ils sont des textbox et que leur tag contient un numéro de colonne.

Code:
Dim ctl As Control
Dim i As Integer
For i = 0 To UBound(GrpTb)
    Set ctl = GrpTb(i).LeTextBox
    If Trim(ctl.Text) <> "" Then Cells(Ligne,[COLOR=red]Clng[/COLOR](ctl.Tag)) = CDbl(ctl.Value)
Next

Ne pas oublier les fonctions de conversion dont Clng(ctl.Tag) en effet un .tag est toujours une valeur String et Cells attend un long

Si tu fais ceci sur tous tes textBox, cela réduira considérablement les lignes d'écritures et permettra un débogage utlérieur plus rapide.

A+

2 -
 
Dernière modification par un modérateur:
Re : Nombres et moyennes

Bonjour,

Dans l'Initialize du UF, j'ai bien placé le chargement du tableau des controles 'GrpTb'...pas de pb, ça fonctionne, les valeurs sont bien récupérées dans le UF...si l'on a bien affecté le tag correspondant à la colonne au textbox. (je me suis arrêté à la Tbox10)

Ensuite, pour faire le chemin inverse textbox vers cellules, j'ai logiquement..je crois..mis le code dans l'évènement click du bouton...(en ayant supprimé toutes les anciennes lignes d'affectation)...mais là..ça bogue..au click sur valider..."incompatibilité de type"....
j'ai essayé les 2 techniques : parcourir tous les contrôles ou parcourir le tableau GrpTb, j'ai la même erreur dans les 2 cas.
je ne comprends pas..
?
 

Pièces jointes

Re : Nombres et moyennes

Bonjour Paul,

Pour gérer les textbox numériques nous avons créer un module de classe (clsTbNum) qui contrôle les entrées utilisateur (remplacement du . par la virgule, interdiction d'entrer au chose que des chiffres et la virgule.

Dans le tableau GrpTb() des textbox il ne faut donc mettre que des textbox dont on attend qu'ils soient gérés par notre classe. Tu y avais mis le textbox11 qui contient le n° du patient(n° sous forme de chaine de caractère '00 - 000') donc qui échappe à notre classe. C'est pour cela que tu avais une erreur 13 - incompatibilité de type.

Dans le fichier joint tu verras que j'ai renommé le TextBox11 (n°patient) en TbNum et le TextBox48 (la date) en TbDate de façon à ce qu'il ne soient plus inclus dans le GrpTB() par la boucle for de Initialize. Seuls les TextBox dont les noms commencent par 'TextBox' sont pris en compte par la boucle. Si tu rajoute des textbox sur ton usf et dont la valeur attendue est autre que numeric, donne leur un nom qui ne commence pas par 'TextBox' (dans la grille des propriétés)

Tu verras également comment j'ai écrit les instructions de coloration de cellules sur click du bouton valider.

Le code est commenté.

Bonne journée
 
Re : Nombres et moyennes

Bonjour,
effectivement, je n'avais pas intégré qu'il fallait modifier le nom des TextBox qu'uon ne voulait pas gérer par la classe.!! et comme ils n'attendent qu'une valeur numérique...c'est normal

Oui, 1 seule ligne de programme avec "resize", plutôt que qu'une boucle de 5x avec .Font.ColorIndex à chaque fois pour chaque ligne...c'est l'exemple type du fait que je ne connais pas assez bien toutes les possibilités..ou les commandes !!!
Je vais me mettre au travail pour affecter la valeur Tab à chaque Textbox concernées.
Je te remercie vivement pour ton soutien dans ce programme.

au fait, à quoi sert
Code:
Sub truc()
    Dim a: a = True
    Dim b: b = 5
    Debug.Print a * b
End Sub
dans le module1...?
 
Re : Nombres et moyennes

Bonsoir,

c'est l'exemple type du fait que je ne connais pas assez bien toutes les possibilités..ou les commandes !!!

C'est la pratique qui permet de s'inventer ses propres formes.

Le sub Truc tu peux le jeter à la poubelle. C'est un oubli, le début d'un macro test que j'ai laissé tombé pour ne pas te perdre dans des détails qui n'apporteraient rien.

A+
 
Re : Nombres et moyennes

Re..
bien compris le message...
la pratique...la pratique !!
ok pour détruire la maro "truc"..
encore merci..!!
si tu veux je te ferais passer (par mp) le produit fini..et te donnerais + d'infos sur sa finalité.!!!
@+
Paul
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour