Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
J' ai essayé de construire cet userform avec une programmation assez hasardeuse et je l' avoue, étant un petit débutant
j' ai deux soucis pour cette programmation je ne sais pas modifier les données et si je fais une recherche sa ne m' affiche pas les totaux.
Bonsoir
utilise l’événement change plutot que update.
Mais je pense que tu n'est pas sur la meilleure piste.
Tu va très vite être débordé par ton code qui sera difficile à modifier
Dans ton cas il est peut -être interessant de disposer d"un feuille de paramètres qui va définir tes champs les calculs et les calculs qui leur sont associés.
Il faut voir l'ensemble du projet et son objectif final.
Si je n'ai pas bien compris le premier point, je te propose une solution pour résoudre le problème des totaux.
Sur la copie ci-jointe, tu constateras que j'ai traité les 5 premières lignes de la classe Salon. Je te laisse le soin de compléter pour les autres postes.
Voici comment j'ai procédé:
Dans la propriété Tag de chaque TextBox de rang pair (correspondant au total), j'ai inscrit le volume mentionné dans la désignation correspondante. Le séparateur décimal, s'il y a lieu, doit être un point (voir TextBox10).
Vu la longueur de la tâche, je te laisse vérifier que les zones Quantité sont bien toutes impaires et qu la zone Montant correspondante est bien incrémentée d'une unité.
Bon courage.
A +
Cordialement.
Edit: bonsoir sousou, ce que tu dis n'est pas faux. Un traitement des données par tableaux me semblerait plus "technique" mais comme notre ami débute, je me suis contenté de répondre sur la base de son code initial.
Bonjour
J'ai essayé dans le fichier joint de te montrer une piste pour continuer dans ton projet.
Une feuille para à été crée et elle comporte le descriptif de tes champs
C'est à partir de ces données qu'ils sont rensignés
Je n'ai pas repris toutes les valeurs de calcul de ton projet, il suffit de les positionner dans la feuille para.
Je vous remercie à vous deux pour votre aide, je n' aurai jamais trouvé seul, comme quoi j' ai encore beaucoup à apprendre
je renvoie le fichier complété par rapport à la demande de Papou-net qui fonctionne bien
Par contre le fichier de sousou a permis de réduire le code pour un même résultat, il faut que je travaille sur ce code !.
Mais comme l' explique si bien Papou-net je débute vraiment au plus bas donc j' essaye d' aller doucement.
Pour ma première question j' aurai aimé une fois validé les données et qu' on rappelle le client qu' on puisse modifier les quantités et revalider pour avoir les dernières informations, donc par la même occasion éviter les doublons.
Pas sur d'avoir tout compris,
Mais dans ma version si tu appels un devis, que tu modifies les quantités et que tu utilises le bouton recalculer. ca modifie tes valeurs par contre tu n'as pas un transferet de ton userform, vars les lignes de ta base et cela me semble obligatoire
Voici une version avec utilisation des modules de classe.
Je sais bien que tu débutes en VBA,mais je tenais tout de même à te laisser entrevoir comment on peut optimiser et simplifier un code. Pour parvenir à ce résultat, j'ai dû renommer l'ensemble de tes TextBox dans les Frames (à part le N°152-Total) en respectant la logique suivante:
Sur la première ligne, le Label est renommé "L1", le TextBox Quantité s'intitule "Q1" et le TextBox Total devient "T1". Cette organisation permet de faire correspondre les contrôles appartenant à la même ligne.
J'ai également créé une variable tableau nommée "Vol" et une boucle extrait le volume dans le label correspondant:
Code:
'Création de la table de volumes des différents éléments
With Me
For i = 1 To 70
Vol(i) = CDbl(Replace(Trim(Replace(Mid(.Controls("L" & i).Caption, InStr(.Controls("L" & i).Caption, ":") + 1), "m³", "")), ".", ","))
.Controls("Q" & i) = ""
.Controls("T" & i) = ""
Next
End With
Ainsi, si tu modifies un Label, sa mise-à-jour sera assurée automatiquement dans le formulaire. La seule contrainte est que le Label.Caption contienne bien des ":" et que "m" et "³" soient bien attachés (j'ai trouvé ce genre de défaut dans quelques contrôles et je les ai corrigés).
Concernant les modules de classe, c'est un peu complexe à t'expliquer, du moins pour le moment. Saches simplement que tu peux ajouter ou supprimer des lignes dans tes Frames, le code s'adaptera automatiquement. En plus, j'ai pu programmer facilement un contrôle des touches frappées avec message d'erreur si saisie non numérique.
Enfin, j'ai mis la propriété Locked des TextBox de totaux à True afin de ne pas fausser les calculs par un effacement accidentel.
Je te souhaite bon courage.
J'allais oublier: du fait du renommage des contrôles, la procédure b_validation est à revoir mais je te laisse le soin de le faire si ce fichier te convient.
Papou-net c' est fou ce qu' on peut faire pour minimiser le code mais c' est bien compliqué moi mais je ne désespère pas je vais regarder çà de plus prêt
Sousou, en effet il faut que le transfert se fasse pour pouvoir actualiser les donnees dans le tableau.
Peux tu me donner une voie à suivre ?
Je continu avec ma solution, même si la Class c'est plus classe et c'est sans doute la meilleur solution, mais je te montre comment moi je gère souvant mes bases de données avec une ou ou plusieurs bases dans le même classeur
J'ai essayé de faire au plus simple en ajoutant une feuille fonctions
En effet je vois bien qu' avec le module de classe sa diminue grandement le script, je pense que je vais travailler dans ce sens car il fait économiser beaucoup de temps et d' erreurs.
Je suppose que la liste des éléments va continuer de s’enrichir. Donc une autre idée de présentation sans chambouler* le formulaire à chaque ajout. Ici - premier jet- on ne fait apparaître que les cas qui nous intéressent.
Je n’ai pas fait intervenir d’autres fonctions que la saisie ni les contrôles de format. Cela peut se faire assez facilement.
Si... ton script n' est pas mal du tout ainsi que la présentation du fait des rajouts qui peuvent avoir lieu (moins de galères avec les textboxs).
l' idée est très bonne. A cela il faudra rajouter les totaux et les modifications ainsi que l' impression de la feuille et sa c' est quelque chose que je ne pourrais pas faire car mes connaissances sont limités.
Je vaudrais revenir sur le fichier de laetitia90. Le total général s' actualise seulement si on rentre un "0" dans la quantité et si on laisse vide le total général textbox147 ne s' actualise pas. Comment faire ?
Private Sub txt_Change()
On Error Resume Next
With UserForm3
.Controls("T" & Right(txt.Name, Len(txt.Name) - 1) + 70).Value = ""
.Controls("T" & Right(txt.Name, Len(txt.Name) - 1) + 70).Value = CDbl(txt.Value) * CDbl(txt.Tag)
x = 0
For i = 77 To 146
If .Controls("T" & i) <> "" Then x = x + CDbl(.Controls("T" & i))
Next i
.T147 = x
End With
End Sub
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.