Formulaire de saisie et résultat en liste

Fermé
Cassivellaunos Messages postés 23 Date d'inscription samedi 25 juillet 2009 Statut Membre Dernière intervention 25 août 2010 - 7 août 2010 à 09:21
Cassivellaunos Messages postés 23 Date d'inscription samedi 25 juillet 2009 Statut Membre Dernière intervention 25 août 2010 - 8 août 2010 à 20:27
Bonjour,

Je pense m'être trompé de forum. J'ai posé ma question dans le Forum Bureautique à cause d'Excel... Enfin je pense... je la repose ici en programmation.

J'aurai besoin de la lumière de "ceux qui savent" pour réaliser un formulaire de saisie qui enverrai les données dans une liste.
Dans un premier temps j'ai réalisé (en partie merci internet !) ceci :

Sub DerniereLigneVide()
'
' Sub DerniereLigneVide Macro
' Macro enregistrée le 28/07/2010 par Cassivellaunos
'
Dim Ligne As Integer
Application.ScreenUpdating = False
Range("A5:c5").Copy
Sheets("Feuil2").Select
Ligne = ActiveSheet.Range("A65536").End(xlUp).Row + 1
Range("A" & Ligne).Activate
ActiveSheet.Paste
Sheets("Feuil1").Select
Application.CutCopyMode = False

End Sub

Ca marche mais la liste est créée dans le même classeur que les formulaires. Je voudrai (pour plus de souplesse) que la liste soit dans un autre classeur. En VBA j'ai compris que "ActiveSheet.Paste" colle dans le classeur actif dans la feuil2 le résultat de la saisie dans la feuil1. Par contre j'ai besoin de conserver (sous forme de feuilles) l'historique des saisies. Je suis donc limité à 256 feuilles (excel 2000).
J'ai réalisé cette autre macro - qui créee des feuilles avec les noms saisis dans une liste :
Sub NommerFeuilles()
'
' NommerFeuilles Macro
' Macro enregistrée le 29/07/2010 par Cassivellaunos
'
'Selection de la 1er cellule de la colonne A
Range("A1").Select
Dim cpt As Integer
cpt = 1
Do
DoEvents
SendKeys "{Down}", True
A = A + 1
Sheets(A).Name = ActiveCell
'Si A = 12,
If A = 13 Then
cpt = cpt - 1
End If
Loop Until cpt = 0
On Error GoTo 1
1 MsgBox "Il est impossible de nommer la feuille" & A & ". Vérifier que le contenu de la cellule n' est pas nul."

End Sub

Comment pourrai-je intégrer ces 2 macros ?
Comment gérer plusieurs classeurs de formulaires (à cause de l'historisarion des données) ?

Je ne connais pas grand chose en VBA - mes macros sont perfectibles - si quelqu'un voudrai bien m'aider je l'en remercie par avance.

Cassivellaunos

A voir également:

6 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
Modifié par lermite222 le 7/08/2010 à 12:27
Bonjour,
Avant de voir pour le code, ça me semble bien lourd de créer une feuille à chaque fois pour un tableau de 3 cellules ?
Je verrais plutôt ça sur une seule feuille, la date en colonne A et les données en colonne B et C.
Tu pourais alors archiver 65536 tableaux.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
Modifié par lermite222 le 7/08/2010 à 12:36
Ta 1ère macro peut-être optimisée par..
Sub DerniereLigneVide() 
Dim Ligne As Long 
    Ligne = Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1 
    ActiveSheet.Range("A5:C5").Copy Sheets("Feuil2").Cells(Ligne, 1) 
End Sub

ou, en suprimant la variable
Sub DerniereLigneVide() 
    ActiveSheet.Range("A5:C5").Copy _ 
    Sheets("Feuil2").Cells(Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1, 1) 
End Sub 


A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
0
Cassivellaunos Messages postés 23 Date d'inscription samedi 25 juillet 2009 Statut Membre Dernière intervention 25 août 2010
7 août 2010 à 14:54
Merci lermitte222,
je savais bien que mes macros pouvaient être optimisées !
Petite précision : mon exemple porte en effet sur des colonnes simplifiées. La réalité en comporte une trentaine ; donc plus justifiable que les trois de mon exemple.
Par contre, si tu pouvais m'aider sur l'autre partie de ma 1ère question concernant la liste dans un autre classeur et savoir si je peux les agréger ... sachant que les deux macros seront exécutées par un bouton (enfin j'espère savoir le faire).
Je t'en remercie.
Cassivellaunos
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
7 août 2010 à 15:02
Reprenons...
D'accord pour 30 colonnes mais combien de ligne pour chaque tableau ?
Fréquence de l'archivage ?
Les données à sauver sont toujours sur la même ligne ?
Comment ces données sont entrées ?
Explique un peu le but
0
Cassivellaunos Messages postés 23 Date d'inscription samedi 25 juillet 2009 Statut Membre Dernière intervention 25 août 2010
7 août 2010 à 15:52
Je vais commencer par ta dernière question à savoir : quel est le but.
J'ai besoin (pour ma soeur docteur dans un CHU) de lui créer une mini application lui permettant de renseigner, outres les habituelles coordonnées d'un patient, un certain nombre de champs spécifiques (codes statistiques en autres).
Je pars du principe qu'elle a 257 patients (donc 1 de plus que les 256 onglets de feuilles d'excel 2000) - oui je sais Acces serait plus logique mais Pb de licence dans l'hôpital et Excel 2007 à plus de 256 feuilles - oui mais bon c'est pas possible.
J'ai donc pensé créer une feuille par patient dans un premier classeur, puis en créer un second pour les suivants (dans mon exemple un seul - le 257ème - puis de créer une macro qui reprendrai pour chaque feuille (que j'appelle Formulaire) tous les champs (renseignés ou non) sous forme de liste. Cette liste sera utilisée en vue de fournir des stats à des labos ou à des organismes, en interne ou pour ma soeur.
Ce que je ne sais pas faire (ou que je n'ai pas trouvé sur le net) c'est :
Gérer différents classeur (ici seulement 2) pour que ma macro génère une liste de 257 lignes dans un troisième classeur. Quoiqu'en réfléchissant si je nomme définitivement mes classeurs "en dur" et que je mets leur nom dans la macro (?)... mais je ne sais pas à quel endroit...
Gérer + de 256 feuilles dans un même classeur (je sais que c'est bloqué à 256 dans Excel mais est quasiment infini dans VBA. Me trompe-je ?
J'ai donc aussi prévu une seconde macro qui me génère des noms de feuilles à partir d'une liste - celle que tu m'as corrigé.
Les données sont donc saisies à la main par formulaires et regroupées dans une seule liste (autre classeur).
Les données à sauver sont strictement à la même place dans les formulaires (une trentaine de champs);
L'archivage sera fait au fur et à mesure des créations ou des modifications dans les formulaires. Nouveau patient = 1 formulaire = OK
Même patient revenant une seconde, une troisième fois, etc... là j'ai un Pb car j'aurai plusieurs fois les mêmes enregistrements avec des modifs. J'ai pallier le Pb en y mettant des dates d'examen (ce qui serait plus facile dans un SgBD - oui je sais...). Au pire un tri et un filtre et hop mais ce n'est pas intellectuellement parlant très satisfaisant.
Les lignes correspondent à l'ensemble des champs des formulaires (257 Formulaires = 257 lignes + les doublons des lignes des champs modifiés.
Je pense avoir été exhaustif et t'avoir donné tous les renseignements utiles.
Merci pour ton aide.
Cassivellaunos
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 191
7 août 2010 à 16:13
Il n'est pas possible, même en VBA de créer plus de 256 feuilles sur un classeur.
Je trouve que ton approche n'est pas vraiment la meilleur.
Je verrais plutôt..
Un UserForm pour saisir les coordonnées d'un nouveau Client (patient) ou possibilité de le réappeler.
et mémoriser dans la feuille Client (65536 clients possible)
Un UserForm pour saisir les données relatives à une intervention (consultation)
et mémoriser dans la feuille Interventions. (65536 interventions possibles)
Un filtre sur la feuille Client qui permettrait de trouver la/les interventions sur ce client.
Tout dans un classeur unique, plus facile à gérer.
Pour avoir une idée avec des UserForm tu peu déjà consulter cette astuce tu peu bien évidemment modifier le nombre de textBox de saisie en respectant les consignes indiquées dans le tuto.
0
Cassivellaunos Messages postés 23 Date d'inscription samedi 25 juillet 2009 Statut Membre Dernière intervention 25 août 2010
8 août 2010 à 16:58
Merci lermite222 pour ton approche et tes conseils. Seulement je débute complètement dans VBA et ta proposition de n'utiliser qu'un seul userForm est tout à fait logique mais cela dépasse - et de loin - mes possibilités... J'ai regardé "cette astuce" pour "m'imbiber" mais il faut mieux avoir plus d'expérience que moi. Merci tout de même.
Cassivellaunos
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
7 août 2010 à 16:19
Bonjour Cassivellaunos, bonjour lermite

Je viens de parcourir brièvement le topic.

Si Access n'est pas autorisé et qu'il faille passer par Excel, je pense que 2 classeurs peuvent suffire à gérer tout ça.

Un classeur organisé en "base de données" et un classeur servant de "formulaire".
L'accès au classeur "base de données" pouvant se faire par des requêtes de type SQL, ça optimise la gestion des champs, la manipulation des données et les temps d'accès et de réponses sont nettement plus rapides.

La seule "difficulté" étant l'organisation des données.

;o)
0
Cassivellaunos Messages postés 23 Date d'inscription samedi 25 juillet 2009 Statut Membre Dernière intervention 25 août 2010
8 août 2010 à 17:02
Merci Polux31 pour ta remarque;
La raison de plusieurs classeurs est imacté par le fait qu'il faut pouvoir compléter l'écran de saisie et d'avoir l'historique. Je ne sais pas faire une gestion d'un seul UserForm ...
Par contre, la gestion des données sous forme d'un SQL est bien ce que j'avais imaginé. Il ne reste qu'à organiser les données.
Merci
Cassivellaunos
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
8 août 2010 à 17:27
Bonjour,

La raison de plusieurs classeurs est imacté par le fait qu'il faut pouvoir compléter l'écran de saisie et d'avoir l'historique.

Peux-tu développer un peu plus, stp, je ne comprends pas trop.

Le but d'une base de données relationnelle est de stocker des données ayant des relations entre elles de façon organisées, pour ensuite pouvoir les manipuler. On entend par "manipulation" des données, le fait de pouvoir, par exemple, les afficher à l'écran, les classer, les modifier, effectuer des calculs etc etc. C'est pourquoi l'organisation des données est importante et qu'il ne faut pas faire n'importe et empiler des torchons avec des serviettes.

Mieux la base est organisée, plus simple seront les requêtes. La remontée et l'affichage des données ne représentent vraiment pas grand chose à faire.

Si tu as un classeur par patient, je ne vois pas l'utilité d'un Useform pour afficher les infos. Il suffit de nommer le fichier avec le nom du patient et d'ensuite aller dans le répertoire adéquat et d'ouvrir le fichier du patient. En 3 ou 4 clicks le tour est joué.

Laisse moi un peu de temps et je te ferai passé un petit exemple.

;o)
0
Cassivellaunos Messages postés 23 Date d'inscription samedi 25 juillet 2009 Statut Membre Dernière intervention 25 août 2010
8 août 2010 à 20:27
Quelle patience !
Ne cherche pas à m'expliquer le principe d'une base de données. Tu es très sympa mais je connais bien. Mon Pb se situe plutôt sur le principe d'un formulaire de saisie (identique à ceux d'Accès). J'ai bien compris que je m'expliquais mal... Je veux juste avoir un formulaire d'une trentaine de champs et générer une liste de données qui servira à des statisitiqes.
Je pensais dupliquer mon formulaire (çà je sais le faire) et utiliser la macro que j'avais joint. En lisant vos posts et topics j'ai réfléchi et je pense qu'un seul formulaire puisque identique pour tous les patients serait bien. Comme je débute sur VBA je ne sais pas comment réaliser un même formulaire (création, modifs).par exemple, comment appeler un patient déjà créé et pour lequel je voudrai avoir une fiche complète... Dans Access je n'ai aucun Pb mais je suis lié au fait que je ne peux pas l'utiliser. C'est l'unique raison pour laquelle j'orientais le principe en utilisant une feuille par patient (limité à 255 feuilles la première servant à des données utilisées dans des listes déroulantes ou à la liste des patients du classeur qui sera utilisée par ma macro de création de feuilles.
Voilà le topo rerésumé. Si tu as des conseils et une orentation vers des exemples je t'en remercie.
Cassivellaunos
0