Incrémentation numéro de ligne Visual Basic

Fermé
kdison13 Messages postés 14 Date d'inscription mardi 15 février 2011 Statut Membre Dernière intervention 25 mars 2011 - 15 févr. 2011 à 15:17
 Jean-Marie - 16 févr. 2011 à 11:17
Bonjour,

Je poste ce message car j'ai un problème de programmation!
Je fais actuellement un masque de saisie pour une enquête de façon à ce que ce soit plus simple pour la personne qui va saisir les données, mais aussi que je récupère une table 'propre' pour analyser (je suis statisticienne).

Il s'agit d'un formulaire simple qui demande de renseigner les initiales, le n°de dossier, la date de naissance, etc Et deux boutons: l'un qui permet d'annuler ce qui a été saisi et l'autre qui permet de poursuivre la saisie avec un autre userform et d'enregistrer.

Ce que je voudrais c'est que lorsque le userform1 est ouvert :
1. un numéro de ligne soit incrémenté automatiquement
2. que la saisie se fasse sur la première ligne vide

J'ai codé une partie, mais là je sèche! Lorsque je rentre un numéro de dossier, par exemple 123, alors je me retrouve avec trois lignes ayant: 1, 12, 123. Je ne comprends pas car les autres champs texte ne me font pas ça!

Voilà ce que j'ai écris:
'initialement
Private Sub UserForm_Initialize()
'met sous format français la date du jour dans le textbox date.
TextDate.Value = Format(Now(), "dd/mm/yyyy")
TextNaissance.Value = Format("dd/mm/yyyy")
TextTUT_ANNEE.Value = Format("dd/mm/yyyy")
End Sub

'n°de dossier
Private Sub TextSUBJID_Change()
Sheets("patient").Range("A" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextSUBJID.Value
'Sheets("aidant").Range("A" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextSUBJID.Value
'Sheets("votre santé").Range("A" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextSUBJID.Value
End Sub
'date
Private Sub TextDate_Change()
Sheets("patient").Activate
Sheets("patient").Range("C" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextDate.Value
End Sub
'examen effectué par
Private Sub TextExam_Change()
Sheets("patient").Activate
Sheets("patient").Range("D" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextExam.Value
End Sub
'initiales du patient
Private Sub TextInitial_Change()
Sheets("patient").Activate
Sheets("patient").Range("B" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextInitial.Value
End Sub
'date de naissance
Private Sub TextNaissance_Change()
Sheets("patient").Activate
Sheets("patient").Range("E" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextNaissance.Value
End Sub
'lieu de résidence
Private Sub TextResid_Change()
Sheets("patient").Activate
Sheets("patient").Range("F" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextResid.Value
End Sub
'statut famo
    'célibataire
    Private Sub OptionCelib_Click()
    If OptionCelib.Value = True Then
    Sheets("patient").Range("G" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = OptionCelib.Caption
    End If
    End Sub
    'marié
    Private Sub OptionMarie_Click()
    If OptionMarie.Value = True Then
    Sheets("patient").Range("G" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = OptionMarie.Caption
    End If
    End Sub
    'divorcé
    Private Sub OptionDivorce_Click()
    If OptionDivorce.Value = True Then
    Sheets("patient").Range("G" & Range("A6|").End(xlUp).Offset(1, 0).Row).Value = OptionDivorce.Caption
    End If
    End Sub
    ' v|
    Private Sub OptionVeuf_Click()
    If OptionVeuf.Value = True Then
    Sheets("patient").Range("G" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = OptionVeuf.Caption
    End If
    End Sub
    'vit en couple
    Private Sub OptionCouple_Click()
    If OptionCouple.Value = True Then
    Sheets("patient").Range("G" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = OptionCouple.Caption
    End If
    End Sub
    

'nombre d'enfants
    '0
    Private Sub Optionnb_0_Click()
    If Optionnb_0.Value = True Then
    Sheets("patient").Range("H" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = Optionnb_0.Caption
    End If
    End Sub
    '1
    Private Sub Optionnb_1_Click()
    If Optionnb_1.Value = True Then
    Sheets("patient").Range("H" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = Optionnb_1.Caption
    End If
    End Sub
    '2
    Private Sub Optionnb_2_Click()
    If Optionnb_2.Value = True Then
    Sheets("patient").Range("H" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = Optionnb_2.Caption
    End If
    End Sub
    '3
    Private Sub Optionnb_3_Click()
    If Optionnb_3.Value = True Then
    Sheets("patient").Range("H" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = Optionnb_3.Caption
    End If
    End Sub
    '4
    Private Sub Optionnb_4_Click()
    If Optionnb_4.Value = True Then
    Sheets("patient").Range("H" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = Optionnb_4.Caption
    End If
    End Sub
    '5
    Private Sub Optionnb_5_Click()
    If Optionnb_5.Value = True Then
    Sheets("patient").Range("H" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = Optionnb_5.Caption
    End If
    End Sub
    'plus de 5
    Private Sub Optionnb_sup5_Click()
    If Optionnb_sup5.Value = True Then
    Sheets("patient").Range("H" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = Optionnb_sup5.Caption
    End If
    End Sub

'age des enfants
Private Sub TextAge_enfants_Change()
Sheets("patient").Activate
Sheets("patient").Range("I" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextAge_enfants.Value
End Sub
'ancienne profession
Private Sub TextProf_Change()
Sheets("patient").Activate
Sheets("patient").Range("J" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextProf.Value
End Sub
'revenus du foyer
Private Sub Textrev_foy_Change()
Sheets("patient").Activate
Sheets("patient").Range("K" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = Textrev_foy.Value
End Sub
'estimez-vous que vos revenus vous permettent de vivre
    'Normalement
    Private Sub OptionNormal_Click()
    If OptionNormal.Value = True Then
    Sheets("patient").Range("L" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = OptionNormal.Caption
    End If
    End Sub
    'confortablement
    Private Sub OptionConfort_Click()
    If OptionConfort.Value = True Then
    Sheets("patient").Range("L" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = OptionConfort.Caption
    End If
    End Sub
    'difficilement
    Private Sub OptionDifficult_Click()
    If OptionConfort.Value = True Then
    Sheets("patient").Range("L" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = OptionConfort.Caption
    End If
    End Sub
'existe-t-il une mesure sous tutelle?
Private Sub FrameTutelle_Click()
    'oui
    Private Sub OptionTUT_OUI_Click()
    If OptionTUT_OUI.Value = True Then
    Sheets("patient").Range("M" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = OptionTUT_OUI.Caption
    End If
    End Sub
    'non
    Private Sub OptionTUT_NON_Click()
    If OptionTUT_NON.Value = True Then
    Sheets("patient").Range("M" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = OptionTUT_NON.Caption
    End If
    End Sub
End Sub
'si oui, depuis quelle date?
Private Sub TextTUT_ANNEE_Change()
Sheets("patient").Activate
Sheets("patient").Range("N" & Range("A65536").End(xlUp).Offset(1, 0).Row).Value = TextTUT_ANNEE.Value
End Sub




'bouton Annuler
Private Sub CommandAnnuler_Click()
Unload UserForm1
End Sub
'bouton suivant
Private Sub CommandSuivant_Click()
Load UserForm1
UserForm2.Show
End Sub


Je n'ai pas de grande notion de Visual Basic donc si quelqu'un peut m'aider, je serai comblée !
Merci d'avance!!
A voir également:

3 réponses

Salut,

1- quelle version d'excel tu utilise ?

2- si tu saisi comme dossier 1234, tu obtient 4 lignes ?
1
12
123
1234 ?

auquel cas c'est ta fonction TextSUBJID_Change() qui est "appelée" trop souvent, en l'occurence dès que tu saisi un chiffre dans ton champs.

a+
0
kdison13 Messages postés 14 Date d'inscription mardi 15 février 2011 Statut Membre Dernière intervention 25 mars 2011
16 févr. 2011 à 10:04
Salut!

1- J'utilise Excel 2003

2- C'est bien ça ! Je suis d'accord avec toi: ça doit être la fonction qui est appelée trop souvent, mais j'ai codé exactement de la même façon les autres champs et je n'ai pas ce problème! Bizarre ...

A+
0
si effectivement la fonction _change est systematiquement appellée des qu'on saisis quelque chose, je vois 2 solutions :

- remplacer la zone de saisie par une liste deroulante
ou
- ne pas affecter de macro sur la zone de saisie mais creer un bouton sur lequel tu cliques quand tu as fini ta saisie.

a+
0