Voir valeur cellule dans textbox

Bonjour le Forum, et bon 1er Mai

Je recherche depuis un moment le moyen de faire apparaître la valeur d'une cellule dans un textbox et d'autre part un problème de format de date entre userform et le retour dans la cellule de ma feuille excel.

je vous joins un bout simplifié de mon fichier, avec une brève explication.

D'avance merci

bonne après midi

Clt

GG

96fichier-test.zip (133.20 Ko)

Bonjour VSP31 le forum

bah ton userform1 il sert a quoi?? il y a un bouton rechercher mais il sert a quoi???

tu as une liste et tu cherches une date?? mais une date peut contenir plusieurs lignes

bref tes codes sont bons à être jetés et tous refait, quand on saura ce que tu veux obtenir exactement, car rechercher sur seulement une date c'est pas du sérieux, explique dans la fichier et renvoie le fichier.

Pour les dates

Private Sub ComboBox1_Click()

ComboBox1 = CDate(ComboBox1)

End Sub

et aussi

If IsDate(ComboBox1) Then Cells(derligne, 1) = CDate(ComboBox1)

a+

Papou

Bonjour,

Ce qui me laisse dubitatif, c'est que tu as un fichier simple, prégarni de formules et tout à fait apte à fonctionner parfaitement sans utilisation de Userform. En l'état travailler avec ce fichier sans Userform s'avèrera plus rapide qu'avec...

Ceci étant dit, des développements ultérieurs peuvent justifier l'usage d'un Userform destiné à fiabiliser la saisie... Dans ce cadre pour ma part, j'éliminerais les formules du tableau (pour n'en conserver que la ligne Total), les calculs pour chaque location étant réalisés au niveau de la saisie dans le Userform.

Les défauts de conception en l'état du dispositif de saisie résident dans l'alimentation de la Combo à partir de sa propriété RowSource, paramétrée en plage fixe, ce qui déjà introduit dans la liste un bon nombre de valeurs vides (parasites) et d'autre part renvoie les valeurs dans le format tel que mis en forme par le format de cellule de la colonne.

Les valeurs des listes des contrôles ComboBox, de même que les valeurs insérées dans des TextBox, étant par définition de type texte (String) et leur mise en forme ne permettant pas leur conversion en date, cela entraîne quelques difficultés pour identifier des dates... Cela n'a rien de fatal dans la mesure où l'utilisation de l'index de liste permet de se passer de l'identification de la date pour retrouver la ligne. Le dispositif de modification peut donc se passer de date pour fonctionner, mais par contre si l'on utilise le userform pour la saisie initiale il faut pouvoir saisir une date, ou bien préservir toutes les dates du mois dans le tableau : dans ce dernier cas, on peut utiliser RowSource, sans avoir de valeur vide dans la liste et se passer de toute identification de dates (ce problème disparaît alors de fait...).

Dans ce dernier cas, on a toujours affaire à une "modification", pas de distinction justifiant 2 boutons, Valider et Modifier (elle ne serait d'ailleurs pas justifiée non plus en distinguant saisie initiale et modification, car la validation en est identique et ne diffère que par la ligne (1re ligne non servie dans le cas de saisie initiale) qui peut être déterminée automatiquement. De même le bouton Rechercher peut être abandonné dans la mesure où l'on peut lancer l'alimentation des contrôles à partir de la sélection dans la ComboBox...

Ne resterait plus qu'à introduire le calcul du Total dans le Userform (mise à jour à saisie ou modification des valeurs des textBox)...

Je t'illustrerai ça après repas car il est l'heure que je m'en occupe en priorité .

A+

Cordialement.

bonjour,

une solution

229location.xlsm (176.34 Ko)

Bonjour,

J'ai modifié un peu certaines choses très peu.

J'ai initialisé ton champ date afin de n'avoir que les lignes avec une date dans ton formulaire et créé une fonction pour le calcul

et enfin j'ai testé le changement de valeur de tes champs rembt.

Tu peux allez plus loin dans ton code si tu veux l'optimiser

Private Sub UserForm_Initialize()

Dim FL1 As Worksheet, Cell As Range, NoCol As Integer
Dim NoLig As Long, DerLig As Long, Var As Variant

    Set Sheet = Worksheets("Recap_Recette")

    LastRow = Split(Sheet.UsedRange.Address, "$")(4)

    For NoLig = 5 To LastRow
        Var = Sheet.Cells(NoLig, 1)
        ComboBox1.AddItem Var
    Next
    Set FL1 = Nothing

End Sub

Function calcul()
Dim loc(0 To 2) As Double
    loc(0) = Worksheets("Recap_Recette").Range("D3")
    loc(1) = Worksheets("Recap_Recette").Range("G3")
    loc(2) = Worksheets("Recap_Recette").Range("J3")

    Total = 0
    rang = 0
        For I = 2 To 7 Step 2
                If Controls("TextBox" & I).Value <> "" Then
                    Total = Total + ((Controls("TextBox" & I).Value - Controls("TextBox" & I + 1).Value) * loc(rang))
                End If
            rang = rang + 1
        Next I
        calcul = Total
End Function

Private Sub TextBox3_Change()
    TextBox40 = calcul
End Sub

Private Sub TextBox5_Change()
    TextBox40 = calcul
End Sub

Private Sub TextBox7_Change()
    TextBox40 = calcul
End Sub
85fichier-test.zip (140.97 Ko)

Bonsoir le Forum Paritec, Ferrand, Gullaud, Stephdu13,

Déjà merci à vous 4, pour l’intérêt que vous avez porté à mon post.

Vous avez dû vous rendre compte que ce sont mes premières lignes de code récupérées de ci de là sur le net.

Pour répondre à paritec :

J’ai pensé à un Userform pour m’aider à la saisie de 41 données que j’ai résumé en 9 colonnes

Le bouton recherche me permet de retrouver une ligne de saisie par rapport à une date dans l’hypothèse d’une erreur de frappe ou d’une modification des données, d’ailleurs dans absolu il faudrait qu’il n’y est pas 2 fois la même date (une date = 1 journée donc 1 ligne sur la feuille)

Pour Ferrand

Il est vrai que la feuille fonctionne bien comme cela, mais pour éviter les erreurs de saisie je me suis lancé dans cette idée et au lire de tes explications j’ai peur de ne pas avoir les compétences pour un travail très abouti.

Gullaud et Stephdu13

Vos solutions sont intéressantes si ce n’est le problème des dates qui ne correspondent pas entre la saisie et la feuille excel d’ailleurs s’il y avait la possibilité d’éviter les doublons dans les dates cela serait top.

Encore merci

Bonne Soirée

Ctl

GG

Bonsoir,

Comme annoncé, l'illustration de mes propos précédents. J'ai maintenu tes formules sur l'ensemble du tableau. En fait je les ai un peu modifiées pour éviter d'afficher des 0 partout...

J'ai aussi rendu le calendrier adaptable : en A1 le numéro de mois (restant non visible), en A3 l'année (visible), en A2 la date du 1er du mois, calculée à partir de A1 et A2, et n'affichant que le mois, en A4 une formule qui calcule le nombre de jours du mois. en A5 une formule étendue jusqu'en A35 calcule la date, à partir de A2, la formule est modifiée pour être mise sous condition sur les 3 dernières cellules pour n'afficher la date que si elle existe dans le mois, la condition utilise le nombre de jours calculés en A4.

En modifiant la valeur en A1 (mois) et A3 (année), les dates en colonne A sont mises à jour...

Dernier élément concernant la feuille, la plage de dates A5:A (32 à 35 selon mois) est nommée de façon dynamique, ce qui facilitera son utilisation, et plus largement l'adressage dans le tableau (en utilisant un adressage relatif par rapport à cette plage nommée).

Pour le formulaire, l'adaptation passe par la suppression des boutons Rechercher et Modifier (on ne conserve que Valider, le formulaire est un outil de saisie et il n'y a besoin que de valider la saisie concernant une date). Les TextBox sont renommés : je n'ai pas renommé les autres contrôles mais note qu'il est toujours judicieux de leur donner à la fois un nom qui peut s'avérer plus explicite, et qui permette le cas échéant une utilisation en boucle plus facilement. En ce qui les concerne je n'ai fait que les renommer tb1 à tb7, cela facilite leur réinitialisation (effacement) et laisse possible leur parcours au moyen de boucles sans avoir à opérer individuellement par une énumération fastidieuse à chaque fois...

Du point de vue fonctionnel, une procédure Initialize constitue la liste de la Combo au chargement du Userform.

Contrairement à ce que j'avais annoncé au départ, soit le maintien de la propriété RowSource, d'une part il aurait fallu y compris en utilisant RowSource de définir la propriété lors de l'ouverture, la plage pouvant varier... mais d'autre part le problème avec RowSource est qu'un lien est créé entre la plage et la liste diu contrôle, la liste s'affiche donc telle qu'elle s'affiche dans la cellule (selon format de cellule), mais lorsqu'on sélectionne une date, celle-ci s'affiche alors en reprenant la valeur stockée dans la cellule, soit sous sa forme numérique, ce qui n'est guère convivial à l'utilisation.

On constitue donc un tableau reprenant les valeurs de la plage dates sous leur forme textuelle (en données texte donc), tableau affecté ensuite à la propriété List de la Combo.

On aura donc un affichage de la liste identique à la colonne dates et qui ne varie pas. La Combo ne sert qu'à la sélection de dates que l'on n'a pas à utiliser en tant que données Date. Les problèmes que peuvent poser l'affectation de dates sont donc éliminés d'emblée dans ce cas.

L'initialisation récupère également les valeurs unitaires de locations figurant en D3, G3 et J3 de la feuille dans une variable tableau à 3 éléments (loc) de niveau module. Ces indications serviront à calculer le Total au niveau du formulaire.

Une autre variable est définie au niveau module (ld) pour recueillir la ligne sélectionnée lors d'une sélection de date dans la Combo.

Une procédure de réinitialisation des TextBox les efface et réinitialise également la variable ld à 0. Elle est exécutée lors d'un changement dans la Combo, ainsi qu'à l'issue d'une validation après inscription des valeurs dans la feuille.

Lors d'un changement dans la Combo, si une date est sélectionnée, la variable ld est alimentée par la valeur de la propriété ListIndex +1 (les items de la liste étant numérotés à partir de 0, en ajoutant 1 on obtient le rang de la ligne dans la plage de dates nommée [pas dans la feuille]), que l'on utilise pour la récupération des valeurs de la ligne dans la feuille ou pour l'affectation des valeurs validées.

La proc. Change de la Combo alimente ensuite les TextBox à partir de la feuille.

Pour ce qui est du Total, une procédure le calcule à partir des TextBox et des prix unitaires stockés pour l'afficher dans la TextBox correspondante. Chaque fois qu'une valeur de TextBox est modifiée, elle lance cette procédure qui met à jour le Total.

Le code se trouve donc pas mal réduit et la structure fonctionnelle est tout à fait simpliste, on pourra d'autant plus facilement y ajouter des éléments répondant aux besoins générés éventuellement par les orientations et développements ultérieurs...

Cordialement.

Bonjour à tous,

oui alors si tu as une ligne par jour là ok, moi je partais sur beaucoup plus compliqué

je n'ai pas lu le roman de MFerrand mais je vais le faire de suite, mais dans ce cas simplement chargé la combobox1 avec la liste complète A2:K&fin

bonne journée

Papou

Bonjour à tous,

MFERRAND quel boulot et d’une rapidité, fichier trop top, je vais tenter de l’adapter avec le vrai fichier qui comporte pas moins de 49 Textbox , je vais suivre tes recommandations de renommés les Tb et suivre au mieux ton code, si j’ai des soucis ce qui va être sûr, je me rapprocherais de toi pour les corrections si tu es d’accord.

Merci pour tout

Bonne journée

Clt

Bonjour,

Je me suis efforcé de simplifier, de façon à faire bien apparaître la structure de mise en place et faciliter ainsi la prise en compte d'autres éléments et donc les adaptations et compléments à opérer...

Maintenant, 49 TextBox, c'est beaucoup... et cela justifierait une gestion au moyen d'un module de classe.

Je ne suis pas encore très rodé sur cette technique et j'évite de faire de propositions que je ne suis pas sûr de maîtriser, mais d'autres intervenants sont en mesure de faire des propositions fonctionnelles dans ce type de configuration...

Bonne journée et @+

Re MFerrand le forum

Franchement avec ton niveau tu n'as aucun problème a créer des modules de classe et à les utiliser

il faut juste essayer c'est tout , moi j'ai essayé et franchement je m'en sert souvent maintenant.

a+

papou

Salut paritec !

Merci de ton appréciation ! Tu as certainement raison et dès lors que je trouverai un peu de temps à consacrer à la chose pour que cela me devienne familier je m'en servirai sans doute souvent...

Bonne journée.

Bonsoir le forum,

Je relance mon fichier avec les 49 textbox renommés sur les conseils de MFERRAND, j’ai rajouté dans le code quelques ligne suivant toujours l’exemple,(le plus facile) mais sur les variables je suis perdu le fichier joint correspond au fichier final sachant que je dois pouvoir le remplir sur 7 mois ; soit Avril, mai, Juin, Juillet, Août, Septembre Octobre.

Merci de votre aide

ctl

Bonjour VSP31 le forum

bon alors il semble que tu n'aies pas bien compris !!!

Tu passes en premier une feuille avec un pas de 2 pour tes colonnes et là, dans ton dernier fichier, après la colonne 10 bah c'est fini, il n'y a plus de colonne remb donc plus de pas !!!!

Une macro c'est logique et pour que cela fonctionne parfaitement il faut un minimum de cohérence dans le fichier.

48 ou 200 textbox c'est pas le souci, mais si tu as un fichier comme le tien, il faudrait au minimum que tes textboxs tu les appelles Tb et le numéro de la colonne correspondante dans la feuille que tu veux remplir.

Ou alors tu mets des tags dans tes textboxs correspondant à tes colonnes?

a+

Papou

Bonjour, Salut paritec !

Ou alors tu mets des tags dans tes textboxs correspondant à tes colonnes?

J'ai l'impression que cela risque d'être la meilleure solution dans le contexte... Pas le temps de regarder de près pour l'instant...

@+

Re Mferrand le forum

Mais franchement avec son fichier il n'y a rien de résonné, il a un besoin c'est sur mais débutant de chez débutant

Oui pour les tags et le module de classe pas de soucis , par contre j'ai pas encore vu ni compris d'ailleurs c'est quoi les colonnes rmbt??

C'est bien l'abréviation de remboursement mais après ??

Si j'ai le temps demain je vire tout et je recommence à zéro en conservant seulement l'userform

a+

Papou

En fait il y a plusieurs type de TextBox :

  • d'abord des couples dont l'un est pour Nombre et l'autre Remboursement (comprendre nb à rembourser), on déduit Rmbt de Nb pour calculer le montant à partir du prix unitaire,
  • puis des Nombre sans Rmbt accouplé, on calcule le montant à partir du prix unitaire,
  • enfin des Montant dans lesquels le montant est saisi directemen sans passer par une valorisation de nombre.

Pour faire apparaître le total en cours de saisie, ça va un peu compliquer les choses...

Re Mferrand le forum

je verraui bien demain en tout cas merci pour l'explication comme cela je n'ai plus à chercher

Mais ta macro pour calculer il suffit de la modifier en tenant compte du fait que au dela de la Tb je ne sais plus il n'y a plus de Rbmt non?

a+

Papou

Bonsoir VSP31 MFerrand le forum

bon alors voilà le fichier avec tous les textboxs opérationnels, au chargement on crée la liste .

Lorsque tu choisis une ligne de la combobox1, tu charges dans les textboxs toutes les valeurs correspondantes de la ligne!!!!

Quel merdier, enfin c'est fait, maintenant, je ne savais pas ce que vous vouliez alors dans les textboxs si tu changes une valeur, systématiquement, je met à jour la ligne dans la feuille, je pense que c'est ce que tu voulais

à tester donc, comme je l'avais plus ou moins prévu j'ai tout viré et je suis reparti de zéro.

Le commandbouton1 je n'ai pas fait le code je voudrais que tu testes avant si cela marche comme tu souhaites

a+

Papou

49vsp31-v3.zip (33.85 Ko)

Bonsoir paritec, MFerrand, le forum

MFerrant a tout à fait compris, voilà je récupère divers montants provenant de différentes caisses enregistreuses avec différentes activités, certaines ont des remboursements

1) Ex : location de tennis ; au moment de la réservation il fait beau et au moment de jouer il pleut, donc il peut y avoir un remboursement

2) Autre cas de remboursement ;les leçons de natation, l’enfant peut être malade le jour de sa leçon, et ainsi de suite,

Pour d’autre activité il n’est pas prévu de remboursement (ex les clubs enfants)

Et puis il y a les tickets Internet, les timbres (ceux sont des montants que je récupère sans quantités).

Merci pour le mal que vous vous donnez, si vous avez une autre approche !!! , qui faciliterait la mise en place du formulaire de saisie pourquoi pas…

Au départ, j’avais réussi à remplir les cellules et avec une recherche j’arrivais à modifier, mais là, j’avais un problème, c’était avec la date de saisie sur le formulaire, elle ne correspondait pas sur la feuille excel et le 2éme problème était de remplir le textbox avec la somme total.

Je vous joins mon fichier de départ qui peut être vous servira à rien, mais vous aurez une idée, il me semblait n’être pas très loin du but recherché.

Un grand merci à vous deux, désolé je suis débutant de chez débutant.

Bonne soirée

Clt

Rechercher des sujets similaires à "voir valeur textbox"