Gestion base de donnée VBA

Bonjour,

je compte sur vous pour m'aider dans mon projet, je dois en effet faire sous VBA un projet de gestion de base de donnée d'étudiant. Je dois programmer un menu dans lequel je pourrais ajouter un étudiant avec un userform dans une base de donnée avec un identifiant unique qui s'ajoutera automatiquement, le problème c'est que je n'arrive pas à trouver le moyen d'ajouter cette identifiant, pouvez vous me dire quelle est la meilleur façon possible?

En espérant que quelqu'un puisse me venir en aide.

merci

Bonjour et bienvenue

Merci de joindre un fichier avec ta base de données telle qu'elle doit être (tu inscrits manuellement 2/3 étudiants)

Amicalement

Nad

bonjour Nad,

ci joint la base de donnée avec quelques explications sur le premier onglet!

amicalement

Tom

Re

Une proposition :

Amicalement

Nad

Bonjour Nad,

c'est exactement ca que je cherchais merci beaucoup!!! mais ce qui est bizarre c'est que quand je suprime toutes les donnée du tableau de ma base et qu'il n'y a plus que les intitulés des colonnes donc que ma base de données est de nouveau vierge, le code ne marche plus et il m'indique : "erreur d'execution "13": incompatibilité de type.", est ce que vous sauriez d'ou cela vient?

par ailleurs j'aimerais pouvoir créer un diplome avec un bouton et que cela crée un onglet du nom de ce diplome, et ainsi lorsque l'on crée un étudiant ses données aillent directement dans l'onglet base de données et dans l'onglet du diplôme, mais est ce que pour cela je dois créer une nouvelle base de donnée pour les diplômes me permettant ensuite de faire une liste déroulante(avec les diplom crée) dans le userform?

cordialement

Tom

Bonsoir

Effectivement ; modifie le code :

Private Sub CommandButton1_Click()
Dim Dl As Integer
Dim x As Byte
With Feuil2
    .Activate
    Dl = .Range("A65536").End(xlUp).Row + 1
    If Dl = 2 Then
    Range("A" & Dl) = 1
    Else:
    Range("A" & Dl) = Range("A" & Dl - 1) + 1
    End If
    For x = 2 To 9
        .Cells(Dl, x).Value = Me.Controls("TextBox" & x - 1).Value
    Next x
Unload Me
Range("J" & Dl).FormulaR1C1 = "=AVERAGE(RC5:RC9)"
End With
End Sub

Amicalement

Nad

GENIAL!!! merci beaucoup, garce à vous j'ai pu avancer et réussi à creer des diplomes et des nouveaux onglets mais est-il possible que dans ces nouveaux onglets il y ai déjà un "masque" comme celui de ma "base de donnée", c'est à dire avec les intitulé des colonnes?

amicalement

Tom

Bonjour

Pour copier la ligne de titres de la base de données, tu ajoutes une ligne dans le code

Private Sub CommandButton2_Click()

Sheets.Add

ActiveSheet.Name = TextBox1

Feuil2.Range("A1:J1").Copy Range("A1")

Amicalement

Nad

Bonjour nad,

merci encore pour ton aide, je pensais réussir avec l'aide de ton code précédent mais je bloque sur quelque chose, quand je crée un étudiant j'aimerais qu'il rentre dans la base de donnée principale et dans l'onglet correspondant à son diplôme mais avec l'identifiant de la base de donnée générale, en fait une copie... et en plus de cela je voudrais limiter le nombre d'inscrit dans chaque diplôme que je rentre dans le formulaire userform3 avec par exemple un msgbox disant que le nombre est atteint, peux-tu m'indiquer la façon de faire?

amicalement

Tom

Bonjour

magictomus a écrit :

quand je crée un étudiant j'aimerais qu'il rentre dans la base de donnée principale et dans l'onglet correspondant à son diplôme

Il n'y a aucun onglet avec un nom de diplôme et rien dans la feuille diplôme

Merci de renvoyer un fichier complet

Nad

et voila


et voila

je ne sais pas si je me suis bien fait comprendre, je vais essayer de l'expliquer peut-être plus clairement:

  • L'utilisateur peut ajouter des étudiants à sa base de données. L'étudiant est associé à un diplôme choisi par l'utilisateur(combobox), le programme créé alors une nouvelle ligne dans la feuille de calcul correspondante pour ce nouvel étudiant et dans la base de donnée.
  • la possibilité de définir un nombre maximal d'étudiants pouvant s'inscrire lors de la création d'un nouveau diplôme.

j'espere que cela est un peu plus claire.

Re

Teste ce fichier et dis-moi si c'est ce que tu attends :

Nad

c'est ca, mais là l'étudiant s'inscrit uniquement dans la base de donnée du diplôme et j'aurais aimé qu'il s'inscrivent dans la base de donnée général, là où il récupèrent son identifiant unique et qu'ensuite il soit copié dans la base du diplôme.

Et est ce qu'il est possible d'ajouter peut-être un bouton pour pouvoir supprimer un diplôme, c'est à dire sa base de donnée et aussi le bouton qui a été crée précédemment?

magictomus a écrit :

c'est ca, mais là l'étudiant s'inscrit uniquement dans la base de donnée du diplôme et j'aurais aimé qu'il s'inscrivent dans la base de donnée général,

Il s'inscrit dans les 2 !!!

Tu peux essayer à nouveau ?

En effet ca fonctionne bien. En revanche j'ai regardé un peu le code et le fait que les boutons apparaissent pour aller sur les diplômes me parait trop compliqué je ne le comprend pas, j'ai préféré l'enlever et je me déplacerais uniquement sur les onglets...

Est ce que tu peux m'expliquer ce code, il correspond bien au fait de chercher la dernière ligne de notre nouvel onglet et d'y copier le nouvel étudiant, avec la condition que le nombre max d'eleve ne soit pas atteint, c'est bien ca?

Dl2 = Sheets(ComboBox1.Value).Range("A65536").End(xlUp).Row + 1

Max = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("diplôme").Range("A1:B500"), 2, False)

If Dl2 = Max + 2 Then

MsgBox "Le nombre maxi d'étudiants (" & Max & ") est déjà atteint"

Range(Cells(Dl, 1), Cells(Dl, 10)).ClearContents

End If

Range(Cells(Dl, 1), Cells(Dl, 10)).Copy Sheets(ComboBox1.Value).Range("A" & Dl2)

UserForm1.Hide

End Sub

de plus est-il possible de creer un bouton pour changer le nom d'un diplome ou le supprimer?

amicalement

Tom


J'ai travaillé sur ta demande de suppression de feuille avant que tu postes ta nouvelle demande

Je regarde pour le changement de nom.

Nad

Voici le nouveau fichier :

magictomus a écrit :

En effet Est ce que tu peux m'expliquer ce code, il correspond bien au fait de chercher la dernière ligne de notre nouvel onglet et d'y copier le nouvel étudiant, avec la condition que le nombre max d'eleve ne soit pas atteint, c'est bien ca?

C'est bien ça.

On détermine la 1ère ligne vide de la feuille correspondant à la valeur de la Combobox 1

Dl2 = Sheets(ComboBox1.Value).Range("A65536").End(xlUp).Row + 1

On récupère le nombre d'élève à l'aide de la fonction RECHERCHEV (VLookup)

Max = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("diplôme").Range("A1:B500"), 2, False)

Si la 1ère ligne vide + 2 (1 pour la ligne de titre + 1 pour la ligne vide) = le nombre Max d'èleves

If Dl2 = Max + 2 Then

On affiche un message d'alerte

MsgBox "Le nombre maxi d'étudiants (" & Max & ") est déjà atteint"

On efface ce qui s'était inscrit dans la feuille base de données

Range(Cells(Dl, 1), Cells(Dl, 10)).ClearContents

End If

Sinon, on copie la dernière ligne inscrite dans la feuille base de donnée et on la copie sur la 1ère cellule vide de la colonne A de la feuille correspondant à la valeur de la Combobox1

Range(Cells(Dl, 1), Cells(Dl, 10)).Copy Sheets(ComboBox1.Value).Range("A" & Dl2)

UserForm1.Hide

End Sub

Nad

Merci pour tes renseignements, une dernière chose, est ce qu'il est possible que:

- L’utilisateur puisse ajouter finalement autant de notes qu'il veut pour chaque étudiant, je ne sais pas quel est la meilleur façon peut-être lorsque l'on rentre un nouvel étudiant et aussi de pouvoir y affecter des coefficients?

- l'utilisateur puisse demander la liste de tous les étudiants dont la moyenne est inférieure à une valeur donnée avec un bouton qui ouvre peut-être un formulaire dans lequel il demande dans un premier temps la valeurs et ensuite à quoi elle s'applique (dans toute la base de données ou dans un diplôme donné) peut-être avec un combobox encore.

amicalement.

Tom

Rechercher des sujets similaires à "gestion base donnee vba"