Formulaire de saisi en VB

Fermé
kdison13 Messages postés 14 Date d'inscription mardi 15 février 2011 Statut Membre Dernière intervention 25 mars 2011 - Modifié par irongege le 15/03/2011 à 12:10
kdison13 Messages postés 14 Date d'inscription mardi 15 février 2011 Statut Membre Dernière intervention 25 mars 2011 - 16 mars 2011 à 17:12
Bonjour,

je me tourne vers vous, pros d'Excel , car j'ai un soucis depuis un moment et je commence à perdre patience ! Effectivement je suis débutante en VB et, dans le cadre de mon travail, je dois développer un formulaire de saisi pour une assistante sociale.

J'ai réussi à faire la partie 'basique', qui écrit simplement les infos saisies dans mes 17 UserForm dans des feuilles Excel. Chaque UserForm est codé de cette façon:
Private Sub CommandSuivant_Click() 
Dim newLig As Long 
  
With Sheets("patient") 
   newLig = .Cells(.Rows.Count, "A").End(xlUp).Row + 1   'Première cellule vide dans colonne A (ligne où on va ajouter les données) 
    
   .Range("A" & newLig).Value = Me.TextSUBJID.Value 
   .Range("B" & newLig).Value = UCase(Me.TextInitial.Value)   'initiales en majuscule même si elles sont écrites en minuscule 
   .Range("C" & newLig).Value = Format(Me.TextDate.Value, "dd/mm/yyyy") 
   .Range("D" & newLig).Value = UCase(Me.TextExam.Value) 
   .Range("E" & newLig).Value = Format(Me.TextNaissance.Value, "dd/mm/yyyy") 
   .Range("F" & newLig).Value = Me.TextResid.Value 
   If Me.OptionCelib.Value = True Then .Range("G" & newLig).Value = Me.OptionCelib.Caption 
   If Me.OptionMarie.Value = True Then .Range("G" & newLig).Value = Me.OptionMarie.Caption 
   If Me.OptionDivorce.Value = True Then .Range("G" & newLig).Value = Me.OptionDivorce.Caption 
   If Me.OptionVeuf.Value = True Then .Range("G" & newLig).Value = Me.OptionVeuf.Caption 
   If Me.OptionCouple.Value = True Then .Range("G" & newLig).Value = Me.OptionCouple.Caption 
   If Me.Optionnb_0.Value = True Then .Range("H" & newLig).Value = Me.Optionnb_0.Caption 
   If Me.Optionnb_1.Value = True Then .Range("H" & newLig).Value = Me.Optionnb_1.Caption 
   If Me.Optionnb_2.Value = True Then .Range("H" & newLig).Value = Me.Optionnb_2.Caption 
   If Me.Optionnb_3.Value = True Then .Range("H" & newLig).Value = Me.Optionnb_3.Caption 
   If Me.Optionnb_4.Value = True Then .Range("H" & newLig).Value = Me.Optionnb_4.Caption 
   If Me.Optionnb_5.Value = True Then .Range("H" & newLig).Value = Me.Optionnb_5.Caption 
   If Me.Optionnb_sup5.Value = True Then .Range("H" & newLig).Value = Me.Optionnb_sup5.Caption 
   .Range("I" & newLig).Value = UCase(Me.TextAge_enfants.Value) 
   .Range("J" & newLig).Value = UCase(Me.TextProf.Value) 
   .Range("K" & newLig).Value = UCase(Me.Textrev_foy.Value) 
   If Me.OptionNormal.Value = True Then .Range("L" & newLig).Value = Me.OptionNormal.Caption 
   If Me.OptionConfort.Value = True Then .Range("L" & newLig).Value = Me.OptionConfort.Caption 
   If Me.OptionConfort.Value = True Then .Range("L" & newLig).Value = Me.OptionConfort.Caption 
   If Me.OptionTUT_OUI.Value = True Then .Range("M" & newLig).Value = Me.OptionTUT_OUI.Caption 
   If Me.OptionTUT_NON.Value = True Then .Range("M" & newLig).Value = Me.OptionTUT_NON.Caption 
   .Range("N" & newLig).Value = Format(Me.TextTUT_ANNEE.Value, "dd/mm/yyyy") 
End With 
Me.Hide 
Load UserForm2 
UserForm2.TextSUBJID.Value = Me.TextSUBJID.Value 'textbox1 est le textbox de userform2 recevant le n° dossier 
UserForm2.Show 0 
Unload Me 
End Sub 
Private Sub CommandAnnuler_Click() 
Unload Me 
End Sub 


Je vous explique simplement le principe: En ouvrant le classeur Excel, l'assistante sociale tombera sur la première feuille 'patient'. Sur celle-ci, il y a deux boutons:

- 'nouveau questionnaire' : qui ouvre le 1er userform. L'assistante sociale le remplit puis clique sur le bouton 'suivant' afin de continuer la saisie, etc... Pour le moment il y a un bouton annuler, que j'aimerai remplacer par un bouton précédent de façon à revenir en arrière et ainsi changer les infos saisies auparavant ! problème:mon bouton suivant écrit automatiquement les données dans le fichier Excel et je ne sais donc pas comment faire pour pouvoir revenir sur le Userform précédent avec les infos remplies !

- 'revenir sur un formulaire' : qui ouvre un userform, où l'on saisi un numéro de dossier. Ensuite j'aimerai que l'on puisse naviguer sur les différents userforms remplit par les infos écrits sur les lignes indéxées par le numéro de dossier saisi! En effet, dans le classeur Excel, sur chaque feuille, les lignes sont répertoriées par un numéro de dossier!

Mes deux gros problèmes sont donc:
- rechercher le numéro de la ligne à laquelle le numéro de dossier (colonne A) correspond à ce qui a été saisi,
- charger un userform avec les infos saisies sur une ligne précise du classeur excel.

J'espère que j'ai été assez clair et que quelqu'un pourra m'aider!
merci d'avance !
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
16 mars 2011 à 08:34
Bonjour,
Pour le 1er souci. Lorsque tu cliques sur "suivanttu lances la procédure :
Dim newLig As Long 
  
With Sheets("patient") 
   newLig = .Cells(.Rows.Count, "A").End(xlUp).Row + 1   'Première cellule vide dans colonne A (ligne où on va ajouter les données) 
   .Range("A" & newLig).Value = Me.TextSUBJID.Value 
   .Range("B" & newLig).Value = UCase(Me.TextInitial.Value)   'initiales en majuscule même si elles sont écrites en minuscule 
   .Range("C" & newLig).Value = Format(Me.TextDate.Value, "dd/mm/yyyy") 
   .Range("D" & newLig).Value = UCase(Me.TextExam.Value)
etc ... etc...

Les données que tu entres sont donc situées dernière ligne feuille patient. Dans ton bouton "précédent", il te faut :
- chercher ces données
- les stocker dans les contrôles de l'UserForm précédent (on va l'appeler USFPréc)
- afficher l'USFPréc :
Dim derLig As Long 
  
With Sheets("patient") 
   derLig = .Cells(.Rows.Count, "A").End(xlUp).Row   'dernière cellule non vide dans colonne A (ligne où on va extraire les données) 
   USFPréc.TextSUBJID.Value = .Range("A" & derLig).Value
   USFPréc.TextInitial.Value = .Range("B" & derLig).Value 
   USFPréc.TextDate.Value = .Range("C" & derLig).Value
   USFPréc.TextExam.Value = .Range("D" & derLig).Value
etc... etc...
USFPréc.Show

Essaye déjà ceci, et reviens nous dire ce qu'il en est, je t'expliquerais alors la méthode .find pour trouver une valeur (ton numéro de dossier) dans une feuille
0
kdison13 Messages postés 14 Date d'inscription mardi 15 février 2011 Statut Membre Dernière intervention 25 mars 2011
16 mars 2011 à 17:12
merci bien!! Je regarde ça de plus près et je vous tiens au courant!! En tous cas merci de votre réponse!

Tant que j'y pense... Comment fait-on pour effacer toutes les infos qui peuvent être saisies ou cochées dans un userForm? Parce que quand je lance une nouvelle saisie, les infos de la précédentes sont encores là!

Bonne soirée! Et à bientôt je pense!! :-p
0