Correction de Codes d'un formulaire de saisie Uerform

Webperegrino

XLDnaute Impliqué
Supporter XLD
Bonjour,
Je débute dans le VBA, Codes, Formulaire de saisie dans une base de données.
J'en appelle à la pédagogie et la précision de spécialistes dans ce domaine pour m'aider à corriger et mettre en place les codes selon la liste ci-jiointe.

En page 1 : mon formulaire de saisies, ses fenêtres, les relations de codes dans VBa, leurs positionnements souhaités dans la base BD.

En page 2 : le résultat de mon fastidieux travail de mise en place de la codification. Deux mois de recherche, d'erreurs cumulées et à chaque fois des messages d'erreurs...

En plus, mes six déroulants de formulaire ne me donnent même pas le contenu préparé dans la base, en feuille 'paramètres' ! le codification m'est encore totalement inconnue.

Merci de m'aider à mettre tout cela "en ordre". Pour l'ordre j'a fait de mon mieux.
Mon but : y voir plus clair, repartir sur de nouvelles bases pour mieux comprendre ce langage VBA qui ne m'est pas commun encore dans Excel.
Webperegrino
 

Pièces jointes

  • Liste codes VBA Formulaire-Transfert dans Base 'BD'.xls
    49 KB · Affichages: 140

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Userform

Robert, Le Forum,
Les corrections fonctionnent très bien !
Youppi !!!!

J'ai aussi essayé de perfectionner mon formulaire.
En effet, une fiche manuelle est remplie pour chaque saisie, mise dans un classeur et doit permettre d'accéder à la base (contrôle éventuel ultérieur)...

J'ai donc ajouté un cadre TexNumero et un cadre TxtPos qui indiqueraient sur le formulaire (si c'était la première saisie dans la base) :
"Cette saisie n° " 1 "ira dans la base en ligne n°" 14

Pour la deuxième saisie validée dans le formulaire ça donnerait :
"Cette saisie n° " 2 "ira dans la base en ligne n° 15

... et ainsi de suite jusqu'à la ligne maximale de la base : la ligne 300.
Ce n'est qu'une information sur le formulaire avant la validation, le formulaire incrémenterait automatiquement pour la saisie suivante, etc
Donc, indications :
- du nombre de saisies faites à partir de la ligne 14 comprise,
- de la prochaine ligne disponible
soit [1-14], [2-15],... [10-23], [20-33], [25-38], etc dans les deux petites fenêtres que j'ai préparées.

J'ai essayé avec les codes en rouge suivants mais ces formules ne fonctionnent pas :
à chaque validation de formulaire complété, j'ai 400 (!) invariable pour le n° de saisie et rien dans la petite fenêtre devant indiquer le n° de ligne utilisée dans ma base "BD" si je valide par la suite.

Auriez-vous une idée de correction ?
Ci-après la composition des codes.
Merci

(Pour les saisies en TB1, TB3, TB5 et TB7 du type 25,35 (ça fonctionne en saisie simple) et puis du type =25,35+56.48+26,23 -comme une mini calculette - je vais chercher de mon côté, mais je ne vois pas encore le principe pour le moment : j'aurai donc une calculette près de mon clavier en cas de multi comptage sur une cellule...)

_________________
Essai de codification
_________________

Private Sub UserForm_Initialize() 'initialisation de l'UserForm
TxtNumero = Application.Max(Sheets("BD").Range("A14:A300")) + 1 'Cette saisie n° :
TxtPos = Application.Max(Sheets("BD").Range("A14:A65536")) + 1 'ira dans la base en ligne n°
Dim cel As Range 'déclare la variable cel
Dim x As Byte 'déclare la variable x

With Sheets("Paramètres") 'prend en compte l'onglet "Paramètres"
Me.ComboBox1.List = .Range("A3:A17").Value 'remplissage de la ComboBox1 (dates)
'remplissage de la ComboBox2 (lieu)
For Each cel In .Range("C4:C" & .Range("C65536").End(xlUp).Row)
If Left(cel.Value, 1) <> ":" And cel.Value <> "" Then Me.ComboBox2.AddItem cel.Value
Next cel
'remplissage des comboboxes 3 à 6
For x = 3 To 6
Me.Controls("ComboBox" & x).List = .Range("R3:R12").Value
Next x
End With 'fin de la pris een compte de l'onglet "Paramètres"
End Sub
.../...
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Uerform

Robert, Le Forum,
Voici :

Objet 1 : « Cette saisie n° » 3 « ira dans la base en ligne » n° 16, etc...
Objet 1 : voir sur la troisième feuille mon approche à une solution multi-saisies sur une valeur TB à classer dans la base (feuille protégée pouvant être déprotégée car sans mot de passe).

Objet 1 :
Voici dans l’UserForm la partie inférieure ajoutée et pour laquelle les deux données d’information ne s’affichent pas en relation avec l’état de l’avancée des saisies dans la base « BD » et de la codification commencée à mettre en place.

Objet 2 :
J’ai réfléchi. Je crois que je vais revoir toute ma philosophie d’approche à la formulation des saisies puisque la codification des données à enregistrer du style = 28,45 + 38,85 est complexe.

- Soit, selon le modèle visible en feuille 3 du présent fichier : Solution SAISIE en MULTIPLE, le formulaire précédent, retravaillé, jouerait aussi le rôle d’une calculette et resterait lié à la codification générale déjà en place.
Robert, le principe d’enregistrement resterait conforme à tes corrections dans la codification ;
à moi ensuite de trouver sur le Forum le moyen et la solution pour que dans la valeur 64,2 s’affiche d’elle-même en cellule D24 (Cumul) et ses voisines selon la formule somme (D10 :D20).
Ce serait cette valeur qui irait dans la base.
Pour le moment je reste avec l'optique du formulaire de saisie actuel mais remanié avec n° de saisie et n° ligne base.

- soit dans cette troisième feuille j'y mets des image "Annuler" et "Valider sur les cellules correspondantes, pour action de deux macros :
* 1 - de vidange du formulaire car non enregistré dans la base et attente d'une nouvelle saisie,
* 2 - de validation pour que la macro correspondante positionne correctement les résultats des cellules remplies dans les bonnes cellules de la Base, toujours sur la première ligne disponible (peut-être que le transferts des données serait plus rapide dans cette condition. En tout cas, les formules de totaux, et même des combobox seraient aussi placées dans cette 3ème feuille (Trois pesées dans la colonne Gratuits ? Valeur poids sacs vidés = nbre de saisies dans cette colonne du ""formulaire feuille 3"" x poids du sac vide ; je n'aurais plus besoin de déroulants dans la cellule "Sacs vides" !)

Ton idée sur cette approche m'intéresse :
-Ça alourdit séieusement la manière de saisir les données,
- mais c'est aussi plus clair
- je pourrais même placer en base une mémoire du détail des éventuelles 1 à 6 saisies par catégorie,
- enfin, et il y a moins de risque de se tromper de valeur dans le déroulant "Sacs vidés" car une formule d'excel ferait le travail.
- Peut-être même plus simple car on ne s'occupe plus que de saisir le ou les sacs pleins de chaque catégorie. Excel et sa macro ferait le reste...

Merci pour ta précieuse collaboration d'expert.
Webperegrino


Je ne comprends pas pourquoi ça boque pour une validation d’une saisie du formulaire actuel (codification ligne bloquante TB3 devant aller en colonne 8 de la base), ici, car dans mon fichier original, tes corrections ne provoquent pas ce blocage et ça passe bien dans la base.
 

Pièces jointes

  • Approche PESÉE.zip
    169.7 KB · Affichages: 37
  • Approche PESÉE.zip
    169.7 KB · Affichages: 34
  • Approche PESÉE.zip
    169.7 KB · Affichages: 33

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Uerform

Un miracle !
J'ai réussi à avancer , un peu !

J'ai réussi à trouver la dernière la première ligne disponible, et à afficher son n° dans le formulaire !
Donc, dans mon formulaie, le bas à droite a affiché 16, la ligne où la saisie se positionnera si elle est validée.

Voici, ci-après, ce que j'ai ajouté depuis, et ça fonctionne.
Je l'indique ici pour toue personne intéressée par le même souci.

Il me reste donc à trouver le bon résultat dans la fenêtre de gauche. Peut-être m'aideriez-vous. Bonne soirée. La mienne est réussie, carj'avance, bien sûr par votreaide à vous tous sur le Forum, mais aussi par mes propres moyens, les deux méthodes sont motivantes !

Codification rectifiée :

Private Sub UserForm_Initialize() 'initialisation de l'UserForm

'TxtNumero = Application.Max(Sheets("BD").Range("A14:A300")) + 1 'Cette saisie n° :
TextPos = Cells(Cells.Rows.Count, 1).End(xlUp).Row + 1 'ira dans la base en ligne n°Dim cel As Range 'déclare la variable cel
Dim x As Byte 'déclare la variable x
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Uerform

ET LE TOUR EST JOUÉ !
Avec :

Private Sub UserForm_Initialize() 'initialisation de l'UserForm
TxtNumero = Cells(Cells.Rows.Count, 1).End(xlUp).Row - 12 'Cette saisie n° :
TextPos = Cells(Cells.Rows.Count, 1).End(xlUp).Row + 1 'ira dans la base en ligne n°
Dim cel As Range 'déclare la variable cel
Dim x As Byte 'déclare la variable x

Le reste de mon message #19 du début de l'après-midi reste toutefois à résoudre, si ce n'est pas trop demandé de vous demander encore de l'aide pour cela.
Meric et très bonne soirée à vous tous.
Webperegrino
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Correction de Codes d'un formulaire de saisie Uerform

Bonsoir Webperegrino, bonsoir le forum,

Mais pourquoi tu ne mets pas directement l'UserForm pour éviter d'avoir à le créer ? C'est la seconde fois déjà que tu fais le même plan... Evoie un fichier avec l'UserForm multi opérations et on adaptera les codes. Non ?
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Uerform

Robert,
Excuse-moi, je pensais avoir joint un zip de mes dernières évolutions.
Le voici donc.
Une nouvelle feuille : "solution saisie en multiple"

J'ai :
- créé ma calculette (bien pratique, je l'aime bien) de laquelle les fenêtes 'Cumul' et 'sacs vidés'...
- peuvent être reportées dans le formulaire (que l'on peut faire paraître si on clique sur le bouton 'Formulaire' placé sur la calculette).

Mon dernier problème :
Autant ça fonctionne dans la feuille BD avec l'appel du Formulaire : il me donne les bons n° de saisie (5) et la ligne disponible de transfert dans BD (18),
autant dans la feuille de "Solution Saisie en multiple" ces valeurs sont fausses sur le Formulaire que j'y ai recopié (respectivement 'saisie n°' (- 11) et ligne BD libre (2).
En plus, des valeurs reportées en formulaire sur cette feuille, à la validation, ne se reportent pas dans BD. Là, je ne comprends plus.

De toutes façons, à cette heure-ci, je dois aller dormir, sinon je vais 'casser' toute cette belle programmation pratiquement achevée (du moins que je trouve belle, ce n'est pas l'avis des spécalistes je suppose...)
A bientôt
Webperegrino
 

Pièces jointes

  • Approche PESÉE.zip
    170.4 KB · Affichages: 61
  • Approche PESÉE.zip
    170.4 KB · Affichages: 64
  • Approche PESÉE.zip
    170.4 KB · Affichages: 63

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Uerform

En simplifié :
Comment rendre le formulaire aussi opérationnel tant au niveau de la feuille "BD et Formulaire" qu'au niveau de la feuille "Calculette et Formulaire" pour, quel que soit le lieu où il activé :
- les deux infos 'n°' en bas de formulaire soient conformes
- qu'à la validation la 1ère ligne disponible de BD soit alimentée.
Merci
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Correction de Codes d'un formulaire de saisie Uerform

Bonjour Webperegrino, bonjour le forum,

En pièce jointe une version 3. Il manquait, dans ton fichier, la macro pour vider la calculette ? Pense à la récupérer dans ton ficier original.
Il est inutile de recopier la macro qui affiche l'UserForm AfficheUserForm1 dans le composant UserForm1 puisqu'elle existe dans le Module1.
Si tu lances à partir de la calculette, les données sont récupérées...
 

Pièces jointes

  • Webperegrino_v03.zip
    172.1 KB · Affichages: 50

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Uerform

Robert, Le Forum,
Cela relève presque du miracle, tout fonctionne à merveille !

Puis-je te déranger une toute dernière fois ?
Nous arrivons au stade de l'excellence dans le fonctionnement de ton fichier puis dans mon fichier original.

Dernier souhit, dans la feuille avec la Calculette et le Formulaire :

Dans la codification à achever, si cela est possible, où et que doit-on mettre comme lignes de codes nécessaires pour :

1 - quand la calculette multi-saisies a été complétée par des valeurs,
2 - que l'appui du bouton 'Formulaire de saisie' a fait paraître celui-ci près de la calculette avec les valeurs miraculeusement reportées grâce à toi !
3 - qu'une validation est faite pour report de ces données sur la ligne de la base "BD" indiquée précédemment en bas du formulaire -et pourquoi pas en bas de la calculette ? (tu me vois venir...)-,

Objectif :

4 - seulement et parce que le transfert total a bien été effectué dans la base (on voit que ça mouline, le temps que le pointeur se mette à re-clignoter dans une cellule du formulaire qui reste à l'écran),
5 - que les valeurs dans le formulaire s'effacent et que le Formulaire s'efface aussi de lécran...
6 - pour libérer la calculette pour une prochaine saisie, car, justement, les valeurs de la précédente saisie s'effacent aussi dans la calculette,
7 - et enfin, la cerise sur le gâteau : en bas de la calculette, les deux cellules grisens affichent les n° relatifs à la nouvelle disponibilité dans la base "BD".
Et là, je te l'écris, ce sera le feu d'artifice pour moi !


C'est promis, après cela, Robert, tu me fais sauter de joie, et je clôture cette discussion -en fait comment fait-on ? ou on laisse la discussion comme cela sur le Forum ?), discussion extrêmement enrichissante pour moi, et je t'en remercie à nouveau.
Bonne soirée,
Wembperegrino
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Uerform

Robert et Le Forum,
Voyez comment vous m'avez motivé !

En bas de la calculette !

Cellule D36 "vous allez faire la aisie n°"

=NBVAL(BD!A14:A29)+1

Cellule J36 "Vous allez positionner la validation de cette saisie dans la base à la ligne n°"

{=MAX(SI(NON(ESTVIDE(BD!A14:A29));LIGNE(BD!A14:A29)))+1}

Cette dernière formule qui a une architecture de contrefort de cathédrale gothique : MERCI ET BISOUS POUR CELA A BRIGITTE DISCUSSION DU 01/05/2006 A 20 H 53 !

Vous êtes tous formidables sur ce Forum.
Merci

(pour les actions du message ci-avant, là, je pêche...)
Webperegino
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Uerform

...
J'ai ajouté Date et Lieu pour le transfert de la Calculette vers le Formulaire intermédiaire, et ça marche tout aussi bien (Formulaire ainsi complet).

Et si sur cette feuille-là le Formulaire était superflu ?
A la place du bouton 'Formulaire', un bouton 'VALIDER', et hop !
1 - transfert direct vers la ligne de la Base
2 - confirmation du transfert
3 - vidange de la Calculette
4 - disponibilité pour prochaine saisie (ligne (+1) de la base déjà indiquée en bas en cellule grise droite, ça fonctionne bien maintenant).

A mon avis, ce serait plus simple pour les manip, à l'usage. Et là, je crois que je rejoins l'idée du départ de Robert.

C'est possible ? Sinon on reste avec ce qu'il y a , c'est déjà superbe pour moi.
On garderait toutefois le Formulaire sur la feuille de la Base.
Bonne nuit.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Correction de Codes d'un formulaire de saisie Uerform

Bonjour Webperegrino, bonjour le forum,

Oui tu as tout à fait raison. Le passage par le formulaire n'est pas nécessaire et alourdi la procédure. Il faut changer le bouton Formulaire par un bouton Valider comme tu les dis et refaire la macro de ce bouton. Au lieu de placer les données saisies dans le formulaire tu les envoies directement dans l'onglet. Je regarde ça...
 
Dernière édition:

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Correction de Codes d'un formulaire de saisie Uerform

Bonjour Robert,
Je regarde cela aussi dans la journée.
Ça y est !
Je commence à y voir plus clair dans toute cette programmation qui est nouvelle pour moi.
Tu m'as donné le virus de celui qui cogitte pour perfectionner la chose !

J'ai déjà ma petite idée pour la codification transfert données Calculette ->> ligne de la Base.
Je vais aussi essayer de créer un message temporaire à l'écran :
- en milieu d'écran
- éventuellement en cligotant pour l'esthétique - ça ferait encore plus 'professionnel' -
- pendant 3,5 secondes à 4 secondes avant disparition
- pour laisser ensuite la calculette vidée et à nouveau libérée... dans le style "la saisie a été faite en ligne n° **** dans la base ; prêt pour la suite", ...

Je m'investis, je m'implique, c'est génial, je deviens un peu fier de moi-même, plutôt que d'attendre 'le cadeau'.

Meric pour toute cette aide.

Bnne journée
 

Discussions similaires

Réponses
17
Affichages
657

Statistiques des forums

Discussions
312 241
Messages
2 086 519
Membres
103 241
dernier inscrit
Peyo33