Hiroshi238
Messages postés4Date d'inscriptionmercredi 15 juillet 2009StatutMembreDernière intervention24 mai 2010
-
19 mai 2010 à 22:56
Hiroshi238
Messages postés4Date d'inscriptionmercredi 15 juillet 2009StatutMembreDernière intervention24 mai 2010
-
24 mai 2010 à 21:34
Bonjour,
je suis étudiant et mon niveau en VBA n'est pas très élevé.
Je dois rédiger un programme de gestion d'absences d'un établissement scolaire.
A l'aide d'un formulaire, un enseignant rentre l'absence d'un élève en indiquant certains détails (nom, prénom, matière, date, etc). Lorsqu'il clique sur le bouton "ajouter", une nouvelle feuille excel se crée au nom de l'élève avec les détails relatifs à l'absence. Chose que j'ai codé de la façon suivante:
Mais si la feuille au nom de l'élève existe déjà, je voudrais que lorsqu'une nouvelle absence est enregistrée, celle ci soit ajoutée dans la ligne sous la dernière absences. Ainsi les absences s'ajoutent les unes en dessous des autres.
J'ai trouvé une procédure pour vérifier si la page au nom de l'élève existe déjà:
Option Explicit
Function IsExist(ByVal NameSheet As String) As Boolean
Dim oSheet As Worksheet
For Each oSheet In ThisWorkbook.Sheets
If oSheet.Name NameSheet Then IsExist True: Exit For
Next oSheet
End Function
Sub Test()
If Not IsExist(Frmabsence.txtnom.Value + Frmabsence.txtprenom.Value) Then Sheets.Add.Move After:=Sheets(Sheets.Count): ActiveSheet.Name = Frmabsence.txtnom.Value + Frmabsence.txtprenom.Value
End Sub
Je ne sais malheureusement pas comment ajouter une nouvelle absence sous une ancienne.
Je remercie par avance toute personne qui pourrait m'apporter de l'aide.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 20 mai 2010 à 00:17
Salut
En supposant que les infos définissant une absence/retard soient mis en ligne, il te suffit de détecter quelle est la prochaine ligne vide.
Première ligne vide = Dernière ligne pleine + 1
Enregistre une macro pendant que tu fais un Ctrl-FlècheBas : Tu auras le code pour aller sur cette ligne.
Tu n'auras plus qu'à ajouter 1 à la ActiveCell.Row pour insérer tes nouvelles donénes
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Hiroshi238
Messages postés4Date d'inscriptionmercredi 15 juillet 2009StatutMembreDernière intervention24 mai 2010 24 mai 2010 à 21:34
Bonjour
désolé de répondre si tard
Tout d'abord merci jack pour ton aide
J'ai donc tapé le code suivant:
Private Sub btnajouter_Click()
If Not IsExist(Frmabsence.txtnom.Value + Frmabsence.txtprenom.Value) Then
Sheets.Add.Move After:=Sheets(Sheets.Count): ActiveSheet.Name = Frmabsence.txtnom.Value + Frmabsence.txtprenom.Value
Nomfeuille = Frmabsence.txtnom.Value + Frmabsence.txtprenom.Value
Sheets(Nomfeuille).Cells(1, 1).Value = "Nom:"
Sheets(Nomfeuille).Cells(2, 1).Value = "Prénom:"
Sheets(Nomfeuille).Cells(3, 1).Value = "Classe:"
Sheets(Nomfeuille).Cells(5, 1).Value = "Abs/Retard"
Sheets(Nomfeuille).Cells(5, 2).Value = "Matière"
Sheets(Nomfeuille).Cells(5, 3).Value = "Type"
Sheets(Nomfeuille).Cells(5, 4).Value = "Date"
Sheets(Nomfeuille).Cells(1, 2).Value = Frmabsence.txtnom.Value
Sheets(Nomfeuille).Cells(2, 2).Value = Frmabsence.txtprenom.Value
Sheets(Nomfeuille).Cells(3, 2).Value = Frmabsence.listclasse.Value
Sheets(Nomfeuille).Cells(6, 2).Value = Frmabsence.listmatiere.Value
Sheets(Nomfeuille).Cells(6, 3).Value = Frmabsence.listtype.Value
Sheets(Nomfeuille).Cells(6, 4).Value = Frmabsence.txtdate.Value
If Frmabsence.rdretard.Value = True Then
Sheets(Nomfeuille).Cells(6, 1).Value = "Retard"
Else
Sheets(Nomfeuille).Cells(6, 1).Value = "Absence"
End If
Else
Nomfeuille = Frmabsence.txtnom.Value + Frmabsence.txtprenom.Value
Sheets(Nomfeuille).Activate
Selection.End(xlDown).Select
Sheets(Nomfeuille).Cells(ActiveCell.Row + 1, 3).Value = Frmabsence.listmatiere.Value
Sheets(Nomfeuille).Cells(ActiveCell.Row + 1, 4).Value = Frmabsence.listtype.Value
Sheets(Nomfeuille).Cells(ActiveCell.Row + 1, 5).Value = Frmabsence.txtdate.Value
If Frmabsence.rdretard.Value = True Then
Sheets(Nomfeuille).Cells(ActiveCell.Row + 1, 2).Value = "Retard"
Else
Sheets(Nomfeuille).Cells(ActiveCell.Row + 1, 2).Value = "Absence"
End If
End If
End Sub
Mais à chaque fois il y a une erreur, notamment pour activer la page de l'élève si celle ci existe déjà ( au niveau du Sheets(Nomfeuille).Activate ).
J'ai beau essayer différents changements, je ne parvient pas à régler ce problème.